This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 2/6] aarch64: Merge __local_multiple_threads offset with memory reference
- From: Richard Henderson <rth at twiddle dot net>
- To: libc-alpha at sourceware dot org
- Cc: marcus dot shawcroft at gmail dot com, Richard Henderson <rth at redhat dot com>
- Date: Tue, 20 May 2014 13:56:14 -0700
- Subject: [PATCH 2/6] aarch64: Merge __local_multiple_threads offset with memory reference
- Authentication-results: sourceware.org; auth=none
- References: <1400619378-7262-1-git-send-email-rth at twiddle dot net>
From: Richard Henderson <rth@redhat.com>
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.
* sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
(SINGLE_THREAD_P): Use the correct width load. Fold an add into
the ldr offset.
---
sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
index 0e9bef3..acaed5d 100644
--- a/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
@@ -163,9 +163,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. */
@@ -181,12 +180,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
--
1.9.0