diff options
Diffstat (limited to 'sysdeps/sparc')
-rw-r--r-- | sysdeps/sparc/sparc32/dl-machine.h | 214 |
1 files changed, 107 insertions, 107 deletions
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 6977cdc..72258bb 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -205,23 +205,23 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) 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 @@ -256,96 +256,96 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) 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(_rtld_local), %o0 - add %sp, 23*4, %o2 - orcc %o0, %lo(_rtld_local), %o0 - sll %i5, 2, %o3 - ld [%l7+%o0], %o0 - add %o3, 4, %o3 - mov %i5, %o1 - add %o2, %o3, %o3 - call _dl_init_internal - 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(_rtld_local), %o0\n\ + add %sp, 23*4, %o2\n\ + orcc %o0, %lo(_rtld_local), %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_internal\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 |