]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
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>
Sun, 25 May 2014 19:10:19 +0000 (15:10 -0400)
sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data
sysdeps/unix/sysv/linux/aarch64/sysdep.h

index 84af95dc360edf9942e24d99ed7b6bdb2201c150..dfca9a7ac7ec3daa671751b4f08f55e9230c5893 100644 (file)
@@ -12,4 +12,3 @@ libm.so: matherr
 libm.so: __signbit
 libm.so: __signbitf
 libm.so: __signbitl
-libpthread.so: __errno_location
index 0e91f83c88bacdcb9b85c5943a977183e3f4d1c3..8cce986b008f9ea472bbd5f50b39f741fbe48768 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