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