📄 dl-machine-sparc.patch
字号:
--- glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h.old Sat Jun 7 18:19:03 2003+++ glibc-2.2.5/sysdeps/sparc/sparc32/dl-machine.h Sat Jun 7 18:20:04 2003@@ -148,23 +148,23 @@ and then redirect to the address it returns. */ #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \ asm ( "\- .text- .globl " #tramp_name "- .type " #tramp_name ", @function- .align 32-" #tramp_name ":- /* Set up the arguments to fixup --- %o0 = link_map out of plt0- %o1 = offset of reloc entry- %o2 = return address */- ld [%o7 + 8], %o0- srl %g1, 10, %o1- mov %i7, %o2- call " #fixup_name "- sub %o1, 4*12, %o1- jmp %o0- restore- .size " #tramp_name ", . - " #tramp_name "+ .text\n\+ .globl " #tramp_name "\n\+ .type " #tramp_name ", @function\n\+ .align 32\n\+" #tramp_name ":\n\+ /* Set up the arguments to fixup --\n\+ %o0 = link_map out of plt0\n\+ %o1 = offset of reloc entry\n\+ %o2 = return address */\n\+ ld [%o7 + 8], %o0\n\+ srl %g1, 10, %o1\n\+ mov %i7, %o2\n\+ call " #fixup_name "\n\+ sub %o1, 4*12, %o1\n\+ jmp %o0\n\+ restore\n\+ .size " #tramp_name ", . - " #tramp_name "\n\ .previous") #ifndef PROF@@ -199,96 +199,96 @@ its return value is the user program's entry point. */ #define RTLD_START __asm__ ("\- .text- .globl _start- .type _start, @function- .align 32-_start:- /* Allocate space for functions to drop their arguments. */- sub %sp, 6*4, %sp- /* Pass pointer to argument block to _dl_start. */- call _dl_start- add %sp, 22*4, %o0- /* FALTHRU */- .globl _dl_start_user- .type _dl_start_user, @function-_dl_start_user:- /* Load the PIC register. */-1: call 2f- sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7-2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7- add %l7, %o7, %l7- /* Save the user entry point address in %l0 */- mov %o0, %l0- /* Store the highest stack address. */- sethi %hi(__libc_stack_end), %g2- or %g2, %lo(__libc_stack_end), %g2- ld [%l7 + %g2], %l1- sethi %hi(_dl_skip_args), %g2- add %sp, 6*4, %l2- or %g2, %lo(_dl_skip_args), %g2- st %l2, [%l1]- /* See if we were run as a command with the executable file name as an- extra leading argument. If so, adjust the contents of the stack. */- ld [%l7+%g2], %i0- ld [%i0], %i0- tst %i0- beq 3f- ld [%sp+22*4], %i5 /* load argc */- /* Find out how far to shift. */- sethi %hi(_dl_argv), %l3- or %l3, %lo(_dl_argv), %l3- ld [%l7+%l3], %l3- sub %i5, %i0, %i5- ld [%l3], %l4- sll %i0, 2, %i2- st %i5, [%sp+22*4]- sub %l4, %i2, %l4- add %sp, 23*4, %i1- add %i1, %i2, %i2- st %l4, [%l3]- /* Copy down argv */-21: ld [%i2], %i3- add %i2, 4, %i2- tst %i3- st %i3, [%i1]- bne 21b- add %i1, 4, %i1- /* Copy down env */-22: ld [%i2], %i3- add %i2, 4, %i2- tst %i3- st %i3, [%i1]- bne 22b- add %i1, 4, %i1- /* Copy down auxiliary table. */-23: ld [%i2], %i3- ld [%i2+4], %i4- add %i2, 8, %i2- tst %i3- st %i3, [%i1]- st %i4, [%i1+4]- bne 23b- add %i1, 8, %i1- /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */-3: sethi %hi(_dl_loaded), %o0- add %sp, 23*4, %o2- orcc %o0, %lo(_dl_loaded), %o0- sll %i5, 2, %o3- ld [%l7+%o0], %o0- add %o3, 4, %o3- mov %i5, %o1- add %o2, %o3, %o3- call _dl_init- ld [%o0], %o0- /* Pass our finalizer function to the user in %g1. */- sethi %hi(_dl_fini), %g1- or %g1, %lo(_dl_fini), %g1- ld [%l7+%g1], %g1- /* Jump to the user's entry point and deallocate the extra stack we got. */- jmp %l0- add %sp, 6*4, %sp- .size _dl_start_user, . - _dl_start_user+ .text\n\+ .globl _start\n\+ .type _start, @function\n\+ .align 32\n\+_start:\n\+ /* Allocate space for functions to drop their arguments. */\n\+ sub %sp, 6*4, %sp\n\+ /* Pass pointer to argument block to _dl_start. */\n\+ call _dl_start\n\+ add %sp, 22*4, %o0\n\+ /* FALTHRU */\n\+ .globl _dl_start_user\n\+ .type _dl_start_user, @function\n\+_dl_start_user:\n\+ /* Load the PIC register. */\n\+1: call 2f\n\+ sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\+2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n\+ add %l7, %o7, %l7\n\+ /* Save the user entry point address in %l0 */\n\+ mov %o0, %l0\n\+ /* Store the highest stack address. */\n\+ sethi %hi(__libc_stack_end), %g2\n\+ or %g2, %lo(__libc_stack_end), %g2\n\+ ld [%l7 + %g2], %l1\n\+ sethi %hi(_dl_skip_args), %g2\n\+ add %sp, 6*4, %l2\n\+ or %g2, %lo(_dl_skip_args), %g2\n\+ st %l2, [%l1]\n\+ /* See if we were run as a command with the executable file name as an\n\+ extra leading argument. If so, adjust the contents of the stack. */\n\+ ld [%l7+%g2], %i0\n\+ ld [%i0], %i0\n\+ tst %i0\n\+ beq 3f\n\+ ld [%sp+22*4], %i5 /* load argc */\n\+ /* Find out how far to shift. */\n\+ sethi %hi(_dl_argv), %l3\n\+ or %l3, %lo(_dl_argv), %l3\n\+ ld [%l7+%l3], %l3\n\+ sub %i5, %i0, %i5\n\+ ld [%l3], %l4\n\+ sll %i0, 2, %i2\n\+ st %i5, [%sp+22*4]\n\+ sub %l4, %i2, %l4\n\+ add %sp, 23*4, %i1\n\+ add %i1, %i2, %i2\n\+ st %l4, [%l3]\n\+ /* Copy down argv */\n\+21: ld [%i2], %i3\n\+ add %i2, 4, %i2\n\+ tst %i3\n\+ st %i3, [%i1]\n\+ bne 21b\n\+ add %i1, 4, %i1\n\+ /* Copy down env */\n\+22: ld [%i2], %i3\n\+ add %i2, 4, %i2\n\+ tst %i3\n\+ st %i3, [%i1]\n\+ bne 22b\n\+ add %i1, 4, %i1\n\+ /* Copy down auxiliary table. */\n\+23: ld [%i2], %i3\n\+ ld [%i2+4], %i4\n\+ add %i2, 8, %i2\n\+ tst %i3\n\+ st %i3, [%i1]\n\+ st %i4, [%i1+4]\n\+ bne 23b\n\+ add %i1, 8, %i1\n\+ /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n\+3: sethi %hi(_dl_loaded), %o0\n\+ add %sp, 23*4, %o2\n\+ orcc %o0, %lo(_dl_loaded), %o0\n\+ sll %i5, 2, %o3\n\+ ld [%l7+%o0], %o0\n\+ add %o3, 4, %o3\n\+ mov %i5, %o1\n\+ add %o2, %o3, %o3\n\+ call _dl_init\n\+ ld [%o0], %o0\n\+ /* Pass our finalizer function to the user in %g1. */\n\+ sethi %hi(_dl_fini), %g1\n\+ or %g1, %lo(_dl_fini), %g1\n\+ ld [%l7+%g1], %g1\n\+ /* Jump to the user's entry point and deallocate the extra stack we got. */\n\+ jmp %l0\n\+ add %sp, 6*4, %sp\n\+ .size _dl_start_user, . - _dl_start_user\n\ .previous"); static inline Elf32_Addr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -