mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Use sparc GOTDATA relocations whenever possible.
* sysdeps/sparc/crti.S: Try to use GOTDATA relocs. * sysdeps/sparc/sparc32/dl-machine.h (RTLD_START): Likewise. * sysdeps/sparc/sparc32/elf/start.S: Likewise. * sysdeps/sparc/sparc64/dl-machine.h (RTLD_START): Likewise. * sysdeps/sparc/sparc64/elf/start.S: Likewise. * sysdeps/sparc/sparc64/multiarch/memcpy.S: Likewise. * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/____longjmp_chk.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (SYSCALL_ERROR_HANDLER): Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/____longjmp_chk.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/brk.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h (SYSCALL_ERROR_HANDLER): Likewise.
This commit is contained in:
@ -63,16 +63,20 @@ ENTRY (____longjmp_chk)
|
||||
nop
|
||||
|
||||
.Lfail:
|
||||
#ifdef PIC
|
||||
1: call 2f
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
add %l7, %o7, %l7
|
||||
#endif
|
||||
#ifndef PIC
|
||||
sethi %hi(longjmp_msg), %o0
|
||||
or %o0, %lo(longjmp_msg), %o0
|
||||
#else
|
||||
SETUP_PIC_REG(l7)
|
||||
#ifdef HAVE_BINUTILS_GOTDATA
|
||||
sethi %gdop_hix22(longjmp_msg), %o0
|
||||
xor %o0, %gdop_lox10(longjmp_msg), %o0
|
||||
ld [%l7 + %o0], %o0, %gdop(longjmp_msg)
|
||||
#else
|
||||
sethi %hi(longjmp_msg), %o0
|
||||
or %o0, %lo(longjmp_msg), %o0
|
||||
#ifdef PIC
|
||||
ld [%l7 + %o0], %o0
|
||||
#endif
|
||||
#endif
|
||||
call HIDDEN_JUMPTARGET(__fortify_fail)
|
||||
nop
|
||||
|
@ -88,7 +88,17 @@ ENTRY(name); \
|
||||
mov %g1, %o7;
|
||||
#else
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifdef HAVE_BINUTILS_GOTDATA
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %gdop_hix22(rtld_errno), %g1; \
|
||||
xor %g1, %gdop_lox10(rtld_errno), %g1;\
|
||||
ld [%o2 + %g1], %g1, %gdop(rtld_errno); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %hi(rtld_errno), %g1; \
|
||||
or %g1, %lo(rtld_errno), %g1; \
|
||||
@ -96,6 +106,7 @@ ENTRY(name); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# endif
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# ifndef NOT_IN_libc
|
||||
@ -112,7 +123,17 @@ ENTRY(name); \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifdef HAVE_BINUTILS_GOTDATA
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %gdop_hix22(errno), %g1;\
|
||||
xor %g1, %gdop_lox10(errno), %g1;\
|
||||
ld [%o2 + %g1], %g1, %gdop(errno);\
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %hi(errno), %g1; \
|
||||
or %g1, %lo(errno), %g1; \
|
||||
@ -120,6 +141,7 @@ ENTRY(name); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# endif
|
||||
# endif /* _LIBC_REENTRANT */
|
||||
#endif /* PIC */
|
||||
|
||||
|
@ -62,16 +62,20 @@ ENTRY (____longjmp_chk)
|
||||
nop
|
||||
|
||||
.Lfail:
|
||||
#ifdef PIC
|
||||
1: call 2f
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
add %l7, %o7, %l7
|
||||
#endif
|
||||
#ifndef PIC
|
||||
sethi %hi(longjmp_msg), %o0
|
||||
or %o0, %lo(longjmp_msg), %o0
|
||||
#else
|
||||
SETUP_PIC_REG(l7)
|
||||
#ifdef HAVE_BINUTILS_GOTDATA
|
||||
sethi %gdop_hix22(longjmp_msg), %o0
|
||||
xor %o0, %gdop_lox10(longjmp_msg), %o0
|
||||
ldx [%l7 + %o0], %o0, %gdop(longjmp_msg)
|
||||
#else
|
||||
sethi %hi(longjmp_msg), %o0
|
||||
or %o0, %lo(longjmp_msg), %o0
|
||||
#ifdef PIC
|
||||
ldx [%l7 + %o0], %o0
|
||||
#endif
|
||||
#endif
|
||||
call HIDDEN_JUMPTARGET(__fortify_fail)
|
||||
nop
|
||||
|
@ -42,10 +42,7 @@ ENTRY (__brk)
|
||||
cfi_window_save
|
||||
cfi_register(%o7, %i7)
|
||||
#ifdef PIC
|
||||
1: call 2f
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
2: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
add %l7, %o7, %l7
|
||||
SETUP_PIC_REG(l7)
|
||||
#endif
|
||||
|
||||
LOADSYSCALL(brk)
|
||||
@ -62,10 +59,20 @@ ENTRY (__brk)
|
||||
nop
|
||||
|
||||
/* Update __curbrk and return cleanly. */
|
||||
.Lok: sethi %hi(__curbrk), %g1
|
||||
.Lok:
|
||||
#ifndef PIC
|
||||
sethi %hi(__curbrk), %g1
|
||||
or %g1, %lo(__curbrk), %g1
|
||||
#ifdef PIC
|
||||
ldx [%l7+%g1], %g1
|
||||
#else
|
||||
#ifdef HAVE_BINUTILS_GOTDATA
|
||||
sethi %gdop_hix22(__curbrk), %g1
|
||||
xor %g1, %gdop_lox10(__curbrk), %g1
|
||||
ldx [%l7 + %g1], %g1, %gdop(__curbrk)
|
||||
#else
|
||||
sethi %hi(__curbrk), %g1
|
||||
or %g1, %lo(__curbrk), %g1
|
||||
ldx [%l7 + %g1], %g1
|
||||
#endif
|
||||
#endif
|
||||
stx %o0, [%g1]
|
||||
mov %g0, %i0
|
||||
@ -78,10 +85,19 @@ ENTRY (__brk)
|
||||
.Lerr0: set ENOMEM, %o0
|
||||
.Lerr1:
|
||||
#ifndef _LIBC_REENTRANT
|
||||
#ifndef PIC
|
||||
sethi %hi(errno), %g1
|
||||
or %g1, %lo(errno), %g1
|
||||
#ifdef PIC
|
||||
ldx [%l7+%g1], %g1
|
||||
#else
|
||||
#ifdef HAVE_BINUTILS_GOTDATA
|
||||
sethi %gdop_hix22(errno), %g1
|
||||
xor %g1, %gdop_lox10(errno), %g1
|
||||
ldx [%l7 + %g1], %g1, %gdop(errno)
|
||||
#else
|
||||
sethi %hi(errno), %g1
|
||||
or %g1, %lo(errno), %g1
|
||||
ldx [%l7 + %g1], %g1
|
||||
#endif
|
||||
#endif
|
||||
st %o0, [%g1]
|
||||
#else
|
||||
|
@ -95,7 +95,17 @@ ENTRY(name); \
|
||||
mov %g1, %o7;
|
||||
#else
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifdef HAVE_BINUTILS_GOTDATA
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %gdop_hix22(rtld_errno), %g1; \
|
||||
xor %g1, %gdop_lox10(rtld_errno), %g1;\
|
||||
ldx [%o2 + %g1], %g1, %gdop(rtld_errno); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %hi(rtld_errno), %g1; \
|
||||
or %g1, %lo(rtld_errno), %g1; \
|
||||
@ -103,6 +113,7 @@ ENTRY(name); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# endif
|
||||
# elif defined _LIBC_REENTRANT
|
||||
|
||||
# ifndef NOT_IN_libc
|
||||
@ -119,7 +130,17 @@ ENTRY(name); \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
# ifdef HAVE_BINUTILS_GOTDATA
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %gdop_hix22(errno), %g1;\
|
||||
xor %g1, %gdop_lox10(errno), %g1;\
|
||||
ldx [%o2 + %g1], %g1, %gdop(errno);\
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
0: SETUP_PIC_REG_LEAF(o2,g1) \
|
||||
sethi %hi(errno), %g1; \
|
||||
or %g1, %lo(errno), %g1; \
|
||||
@ -127,6 +148,7 @@ ENTRY(name); \
|
||||
st %o0, [%g1]; \
|
||||
jmp %o7 + 8; \
|
||||
mov -1, %o0;
|
||||
# endif
|
||||
# endif /* _LIBC_REENTRANT */
|
||||
#endif /* PIC */
|
||||
|
||||
|
Reference in New Issue
Block a user