]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
aarch64: Merge __local_multiple_threads offset with memory reference
authorRichard Henderson <rth@redhat.com>
Wed, 21 May 2014 17:24:03 +0000 (13:24 -0400)
committerRichard Henderson <rth@redhat.com>
Wed, 21 May 2014 17:24:03 +0000 (13:24 -0400)
This also highlights that we'd been loading 64-bits instead of
the proper 32-bits.  Caught by the linker as a relocation error,
since the variable happened to be unaligned for 64-bits.

Cherry-pick of a6b3657be6bc5067aeec98d990f60765361c6557.

ports/ChangeLog.aarch64
ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h

index 6d4ab4778b9e6cbed2d787f434beeaa59dc0b302..1dfc50b0a459267b5c67ee70659ecef681d90c36 100644 (file)
@@ -1,3 +1,9 @@
+2014-05-21  Richard Henderson  <rth@redhat.com>
+
+       * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
+       (SINGLE_THREAD_P): Use the correct width load.  Fold an add
+       into the ldr offset.
+
 2014-01-22  Marcus Shawcroft  <marcus.shawcroft@arm.com>
 
        * sysdeps/aarch64/libm-test-ulps: Regenerated.
index f6903b5dd8ca2c381d707298626ea1659c575c35..fed1dcb2154f66e6681d684946c0fb2680ab8da2 100644 (file)
@@ -162,9 +162,8 @@ extern int __local_multiple_threads attribute_hidden;
 #  else
 #   define SINGLE_THREAD_P                                             \
   adrp x16, __local_multiple_threads;                                  \
-  add  x16, x16, #:lo12:__local_multiple_threads;                      \
-  ldr  x16, [x16];                                                     \
-  cmp  x16, 0;
+  ldr  w16, [x16, :lo12:__local_multiple_threads];                     \
+  cmp  w16, 0;
 #  endif
 # else
 /*  There is no __local_multiple_threads for librt, so use the TCB.  */
@@ -180,12 +179,12 @@ extern int __local_multiple_threads attribute_hidden;
   cfi_rel_offset (x30, 8);                                             \
   bl   __read_tp;                                                      \
   sub  x0, x0, PTHREAD_SIZEOF;                                         \
-  ldr  x16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET];                     \
+  ldr  w16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET];                     \
   ldp  x0, x30, [sp], 16;                                              \
   cfi_restore (x0);                                                    \
   cfi_restore (x30);                                                   \
   cfi_adjust_cfa_offset (-16);                                         \
-  cmp  x16, 0
+  cmp  w16, 0
 #   define SINGLE_THREAD_P_PIC(x) SINGLE_THREAD_P
 #  endif
 # endif