aarch64: Use tpidr_el0 rather than __errno_location in librt
authorRichard Henderson <rth@redhat.com>
Tue, 20 May 2014 20:34:59 +0000 (16:34 -0400)
committerRichard Henderson <rth@redhat.com>
Thu, 29 May 2014 16:41:08 +0000 (12:41 -0400)
ChangeLog
sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data
sysdeps/unix/sysv/linux/aarch64/sysdep.h

index 5b9b820..8ea6ef9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,13 @@
 2014-05-29  Richard Henderson  <rth@twiddle.net>
 
+       * sysdeps/unix/sysv/linux/aarch64/sysdep.h [NOT_IN_libc]
+       (SYSCALL_ERROR_HANDLER): Use tpidr_el0 instead of a call
+       to __errno_location.
+       * sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data (libpthread.so):
+       Remove the expected plt for __errno_location.
+
        * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
-       [!NOT_IN_libc] (SINGLE_THREAD_P): Use tpidr_el0 instead of a
+       [NOT_IN_libc] (SINGLE_THREAD_P): Use tpidr_el0 instead of a
        call to __read_tp.
 
        * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h (PSEUDO):
index 84af95d..dfca9a7 100644 (file)
@@ -12,4 +12,3 @@ libm.so: matherr
 libm.so: __signbit
 libm.so: __signbitf
 libm.so: __signbitl
-libpthread.so: __errno_location
index 0e91f83..8cce986 100644 (file)
 
 #   define SYSCALL_ERROR_HANDLER                               \
 .Lsyscall_error:                                               \
-       stp     x29, x30, [sp, -32]!;                           \
-       cfi_adjust_cfa_offset (32);                             \
-       cfi_rel_offset (x29, 0);                                \
-       cfi_rel_offset (x30, 8);                                \
-        add     x29, sp, 0;                                    \
-        str     x19, [sp,16];                                  \
-       neg     x19, x0;                                        \
-       bl      C_SYMBOL_NAME(__errno_location);                \
-       str     w19, [x0];                                      \
+       adrp    x1, :gottprel:errno;                            \
+       neg     w2, w0;                                         \
+       ldr     x1, [x1, :gottprel_lo12:errno];                 \
+       mrs     x3, tpidr_el0;                                  \
        mov     x0, -1;                                         \
-        ldr     x19, [sp,16];                                  \
-        ldp     x29, x30, [sp], 32;                            \
-       cfi_adjust_cfa_offset (-32);                            \
-       cfi_restore (x29);                                      \
-       cfi_restore (x30);                                      \
+       str     w2, [x1, x3];                                   \
        RET;
 #  endif
 # else