mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
Update.
2001-04-29 Ben Collins <bcollins@debian.org> * sysdeps/sparc/sparc64/dl-machine.h: Fix multiline strings warnings. * sysdeps/sparc/sparc64/soft-fp/qp_add.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_cmp.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_div.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_feq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fge.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fgt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fle.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_flt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fne.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_mul.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_sub.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Likewise.
This commit is contained in:
@@ -481,53 +481,53 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||
and then redirect to the address it returns. */
|
||||
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
|
||||
asm ("\
|
||||
.text
|
||||
.globl " #tramp_name "_0
|
||||
.type " #tramp_name "_0, @function
|
||||
.align 32
|
||||
" #tramp_name "_0:
|
||||
! sethi %hi(1047552), %l2 - Done in .PLT0
|
||||
ldx [%l6 + 32 + 8], %o0
|
||||
sub %g1, %l6, %l0
|
||||
xor %l2, -1016, %l2
|
||||
sethi %hi(5120), %l3 ! 160 * 32
|
||||
add %l0, %l2, %l0
|
||||
sethi %hi(32768), %l4
|
||||
udivx %l0, %l3, %l3
|
||||
sllx %l3, 2, %l1
|
||||
add %l1, %l3, %l1
|
||||
sllx %l1, 10, %l2
|
||||
sub %l4, 4, %l4 ! No thanks to Sun for not obeying their own ABI
|
||||
sllx %l1, 5, %l1
|
||||
sub %l0, %l2, %l0
|
||||
udivx %l0, 24, %l0
|
||||
add %l0, %l4, %l0
|
||||
add %l1, %l0, %l1
|
||||
add %l1, %l1, %l0
|
||||
add %l0, %l1, %l0
|
||||
mov %i7, %o2
|
||||
call " #fixup_name "
|
||||
sllx %l0, 3, %o1
|
||||
jmp %o0
|
||||
restore
|
||||
.size " #tramp_name "_0, . - " #tramp_name "_0
|
||||
|
||||
.globl " #tramp_name "_1
|
||||
.type " #tramp_name "_1, @function
|
||||
.align 32
|
||||
" #tramp_name "_1:
|
||||
! srlx %g1, 12, %o1 - Done in .PLT1
|
||||
ldx [%l6 + 8], %o0
|
||||
add %o1, %o1, %o3
|
||||
sub %o1, 96, %o1 ! No thanks to Sun for not obeying their own ABI
|
||||
mov %i7, %o2
|
||||
call " #fixup_name "
|
||||
add %o1, %o3, %o1
|
||||
jmp %o0
|
||||
restore
|
||||
.size " #tramp_name "_1, . - " #tramp_name "_1
|
||||
.previous");
|
||||
asm ("\n" \
|
||||
" .text\n" \
|
||||
" .globl " #tramp_name "_0\n" \
|
||||
" .type " #tramp_name "_0, @function\n" \
|
||||
" .align 32\n" \
|
||||
"\t" #tramp_name "_0:\n" \
|
||||
" ! sethi %hi(1047552), %l2 - Done in .PLT0\n" \
|
||||
" ldx [%l6 + 32 + 8], %o0\n" \
|
||||
" sub %g1, %l6, %l0\n" \
|
||||
" xor %l2, -1016, %l2\n" \
|
||||
" sethi %hi(5120), %l3 ! 160 * 32\n" \
|
||||
" add %l0, %l2, %l0\n" \
|
||||
" sethi %hi(32768), %l4\n" \
|
||||
" udivx %l0, %l3, %l3\n" \
|
||||
" sllx %l3, 2, %l1\n" \
|
||||
" add %l1, %l3, %l1\n" \
|
||||
" sllx %l1, 10, %l2\n" \
|
||||
" sub %l4, 4, %l4 ! No thanks to Sun for not obeying their own ABI\n" \
|
||||
" sllx %l1, 5, %l1\n" \
|
||||
" sub %l0, %l2, %l0\n" \
|
||||
" udivx %l0, 24, %l0\n" \
|
||||
" add %l0, %l4, %l0\n" \
|
||||
" add %l1, %l0, %l1\n" \
|
||||
" add %l1, %l1, %l0\n" \
|
||||
" add %l0, %l1, %l0\n" \
|
||||
" mov %i7, %o2\n" \
|
||||
" call " #fixup_name "\n" \
|
||||
" sllx %l0, 3, %o1\n" \
|
||||
" jmp %o0\n" \
|
||||
" restore\n" \
|
||||
" .size " #tramp_name "_0, . - " #tramp_name "_0\n" \
|
||||
"\n" \
|
||||
" .globl " #tramp_name "_1\n" \
|
||||
" .type " #tramp_name "_1, @function\n" \
|
||||
" .align 32\n" \
|
||||
"\t" #tramp_name "_1:\n" \
|
||||
" ! srlx %g1, 12, %o1 - Done in .PLT1\n" \
|
||||
" ldx [%l6 + 8], %o0\n" \
|
||||
" add %o1, %o1, %o3\n" \
|
||||
" sub %o1, 96, %o1 ! No thanks to Sun for not obeying their own ABI\n" \
|
||||
" mov %i7, %o2\n" \
|
||||
" call " #fixup_name "\n" \
|
||||
" add %o1, %o3, %o1\n" \
|
||||
" jmp %o0\n" \
|
||||
" restore\n" \
|
||||
" .size " #tramp_name "_1, . - " #tramp_name "_1\n" \
|
||||
" .previous\n");
|
||||
|
||||
#ifndef PROF
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
||||
@@ -549,94 +549,94 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
#define __S1(x) #x
|
||||
#define __S(x) __S1(x)
|
||||
|
||||
#define RTLD_START __asm__ ( "\
|
||||
.text
|
||||
.global _start
|
||||
.type _start, @function
|
||||
.align 32
|
||||
_start:
|
||||
/* Make room for functions to drop their arguments on the stack. */
|
||||
sub %sp, 6*8, %sp
|
||||
/* Pass pointer to argument block to _dl_start. */
|
||||
call _dl_start
|
||||
add %sp," __S(STACK_BIAS) "+22*8,%o0
|
||||
/* FALLTHRU */
|
||||
.size _start, .-_start
|
||||
|
||||
.global _dl_start_user
|
||||
.type _dl_start_user, @function
|
||||
_dl_start_user:
|
||||
/* Load the GOT register. */
|
||||
1: call 11f
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
/* Store the highest stack address. */
|
||||
sethi %hi(__libc_stack_end), %g5
|
||||
add %l7, %o7, %l7
|
||||
or %g5, %lo(__libc_stack_end), %g5
|
||||
/* Save the user entry point address in %l0. */
|
||||
mov %o0, %l0
|
||||
ldx [%l7 + %g5], %l1
|
||||
sethi %hi(_dl_skip_args), %g5
|
||||
add %sp, 6*8, %l2
|
||||
/* See if we were run as a command with the executable file name as an
|
||||
extra leading argument. If so, we must shift things around since we
|
||||
must keep the stack doubleword aligned. */
|
||||
or %g5, %lo(_dl_skip_args), %g5
|
||||
stx %l2, [%l1]
|
||||
ldx [%l7 + %g5], %i0
|
||||
ld [%i0], %i0
|
||||
brz,pt %i0, 2f
|
||||
ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5
|
||||
/* Find out how far to shift. */
|
||||
sethi %hi(_dl_argv), %l4
|
||||
sub %i5, %i0, %i5
|
||||
or %l4, %lo(_dl_argv), %l4
|
||||
sllx %i0, 3, %l6
|
||||
ldx [%l7 + %l4], %l4
|
||||
stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]
|
||||
add %sp, " __S(STACK_BIAS) " + 23*8, %i1
|
||||
add %i1, %l6, %i2
|
||||
ldx [%l4], %l5
|
||||
/* Copy down argv. */
|
||||
12: ldx [%i2], %i3
|
||||
add %i2, 8, %i2
|
||||
stx %i3, [%i1]
|
||||
brnz,pt %i3, 12b
|
||||
add %i1, 8, %i1
|
||||
sub %l5, %l6, %l5
|
||||
/* Copy down envp. */
|
||||
13: ldx [%i2], %i3
|
||||
add %i2, 8, %i2
|
||||
stx %i3, [%i1]
|
||||
brnz,pt %i3, 13b
|
||||
add %i1, 8, %i1
|
||||
/* Copy down auxiliary table. */
|
||||
14: ldx [%i2], %i3
|
||||
ldx [%i2 + 8], %i4
|
||||
add %i2, 16, %i2
|
||||
stx %i3, [%i1]
|
||||
stx %i4, [%i1 + 8]
|
||||
brnz,pt %i3, 14b
|
||||
add %i1, 16, %i1
|
||||
stx %l5, [%l4]
|
||||
/* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */
|
||||
2: sethi %hi(_dl_loaded), %o0
|
||||
add %sp, " __S(STACK_BIAS) " + 23*8, %o2
|
||||
orcc %o0, %lo(_dl_loaded), %o0
|
||||
sllx %i5, 3, %o3
|
||||
ldx [%l7 + %o0], %o0
|
||||
add %o3, 8, %o3
|
||||
mov %i5, %o1
|
||||
add %o2, %o3, %o3
|
||||
call _dl_init
|
||||
ldx [%o0], %o0
|
||||
/* Pass our finalizer function to the user in %g1. */
|
||||
sethi %hi(_dl_fini), %g1
|
||||
or %g1, %lo(_dl_fini), %g1
|
||||
ldx [%l7 + %g1], %g1
|
||||
/* Jump to the user's entry point and deallocate the extra stack we got. */
|
||||
jmp %l0
|
||||
add %sp, 6*8, %sp
|
||||
.size _dl_start_user, . - _dl_start_user
|
||||
.previous");
|
||||
#define RTLD_START __asm__ ( "\n" \
|
||||
" .text\n" \
|
||||
" .global _start\n" \
|
||||
" .type _start, @function\n" \
|
||||
" .align 32\n" \
|
||||
"_start:\n" \
|
||||
" /* Make room for functions to drop their arguments on the stack. */\n" \
|
||||
" sub %sp, 6*8, %sp\n" \
|
||||
" /* Pass pointer to argument block to _dl_start. */\n" \
|
||||
" call _dl_start\n" \
|
||||
" add %sp," __S(STACK_BIAS) "+22*8,%o0\n" \
|
||||
" /* FALLTHRU */\n" \
|
||||
" .size _start, .-_start\n" \
|
||||
"\n" \
|
||||
" .global _dl_start_user\n" \
|
||||
" .type _dl_start_user, @function\n" \
|
||||
"_dl_start_user:\n" \
|
||||
" /* Load the GOT register. */\n" \
|
||||
"1: call 11f\n" \
|
||||
" sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \
|
||||
"11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \
|
||||
" /* Store the highest stack address. */\n" \
|
||||
" sethi %hi(__libc_stack_end), %g5\n" \
|
||||
" add %l7, %o7, %l7\n" \
|
||||
" or %g5, %lo(__libc_stack_end), %g5\n" \
|
||||
" /* Save the user entry point address in %l0. */\n" \
|
||||
" mov %o0, %l0\n" \
|
||||
" ldx [%l7 + %g5], %l1\n" \
|
||||
" sethi %hi(_dl_skip_args), %g5\n" \
|
||||
" add %sp, 6*8, %l2\n" \
|
||||
" /* See if we were run as a command with the executable file name as an\n" \
|
||||
" extra leading argument. If so, we must shift things around since we\n" \
|
||||
" must keep the stack doubleword aligned. */\n" \
|
||||
" or %g5, %lo(_dl_skip_args), %g5\n" \
|
||||
" stx %l2, [%l1]\n" \
|
||||
" ldx [%l7 + %g5], %i0\n" \
|
||||
" ld [%i0], %i0\n" \
|
||||
" brz,pt %i0, 2f\n" \
|
||||
" ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5\n" \
|
||||
" /* Find out how far to shift. */\n" \
|
||||
" sethi %hi(_dl_argv), %l4\n" \
|
||||
" sub %i5, %i0, %i5\n" \
|
||||
" or %l4, %lo(_dl_argv), %l4\n" \
|
||||
" sllx %i0, 3, %l6\n" \
|
||||
" ldx [%l7 + %l4], %l4\n" \
|
||||
" stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]\n" \
|
||||
" add %sp, " __S(STACK_BIAS) " + 23*8, %i1\n" \
|
||||
" add %i1, %l6, %i2\n" \
|
||||
" ldx [%l4], %l5\n" \
|
||||
" /* Copy down argv. */\n" \
|
||||
"12: ldx [%i2], %i3\n" \
|
||||
" add %i2, 8, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" brnz,pt %i3, 12b\n" \
|
||||
" add %i1, 8, %i1\n" \
|
||||
" sub %l5, %l6, %l5\n" \
|
||||
" /* Copy down envp. */\n" \
|
||||
"13: ldx [%i2], %i3\n" \
|
||||
" add %i2, 8, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" brnz,pt %i3, 13b\n" \
|
||||
" add %i1, 8, %i1\n" \
|
||||
" /* Copy down auxiliary table. */\n" \
|
||||
"14: ldx [%i2], %i3\n" \
|
||||
" ldx [%i2 + 8], %i4\n" \
|
||||
" add %i2, 16, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" stx %i4, [%i1 + 8]\n" \
|
||||
" brnz,pt %i3, 14b\n" \
|
||||
" add %i1, 16, %i1\n" \
|
||||
" stx %l5, [%l4]\n" \
|
||||
" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \
|
||||
"2: sethi %hi(_dl_loaded), %o0\n" \
|
||||
" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \
|
||||
" orcc %o0, %lo(_dl_loaded), %o0\n" \
|
||||
" sllx %i5, 3, %o3\n" \
|
||||
" ldx [%l7 + %o0], %o0\n" \
|
||||
" add %o3, 8, %o3\n" \
|
||||
" mov %i5, %o1\n" \
|
||||
" add %o2, %o3, %o3\n" \
|
||||
" call _dl_init\n" \
|
||||
" ldx [%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" \
|
||||
" ldx [%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*8, %sp\n" \
|
||||
" .size _dl_start_user, . - _dl_start_user\n" \
|
||||
" .previous\n");
|
||||
|
Reference in New Issue
Block a user