aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-02-21 15:42:42 -0800
committerDavid S. Miller <davem@davemloft.net>2012-02-20 17:51:53 -0800
commit3d2b3019e0efa9735370498122ac80298deff8c7 (patch)
tree693771bb0b1fba08098558d99613ce80bc36a923 /sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
parentc80098a9a05b7d5f8ad1488135f2cee613998c50 (diff)
downloadglibc-3d2b3019e0efa9735370498122ac80298deff8c7.tar
glibc-3d2b3019e0efa9735370498122ac80298deff8c7.tar.gz
glibc-3d2b3019e0efa9735370498122ac80298deff8c7.tar.bz2
glibc-3d2b3019e0efa9735370498122ac80298deff8c7.zip
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.
Diffstat (limited to 'sysdeps/unix/sysv/linux/sparc/sparc64/brk.S')
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/brk.S34
1 files changed, 25 insertions, 9 deletions
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
index 74500eb486..a89d8775e1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S
@@ -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