TLS_LD should use linker-provided symbol _TLS_MODULE_BASE_ instead of
symbol it resolves to get thread pointer, otherwise linker relaxation
doesn't work correctly, adding extra offset to thread-local variable
address.
This fixes most of tls/tst-tls* tests.
Signed-off-by: Max Filippov <jcmvbkbc(a)gmail.com>
---
test/tls/tls-macros.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/test/tls/tls-macros.h b/test/tls/tls-macros.h
index a41aef6..7d89274 100644
--- a/test/tls/tls-macros.h
+++ b/test/tls/tls-macros.h
@@ -900,9 +900,9 @@ register void *__gp __asm__("$29");
#define TLS_LD(x) \
({ int *__l; \
- __asm__ ("movi a8, " #x "@TLSFUNC\n\t" \
- "movi a10, " #x "@TLSARG\n\t" \
- "callx8.tls a8, " #x "@TLSCALL\n\t" \
+ __asm__ ("movi a8, _TLS_MODULE_BASE_@TLSFUNC\n\t" \
+ "movi a10, _TLS_MODULE_BASE_@TLSARG\n\t" \
+ "callx8.tls a8, _TLS_MODULE_BASE_@TLSCALL\n\t" \
"movi %0, " #x "@TPOFF\n\t" \
"add %0, %0, a10\n\t" \
: "=r" (__l) \
--
1.8.1.4
Show replies by date
Hi,
Max Filippov wrote,
TLS_LD should use linker-provided symbol
_TLS_MODULE_BASE_ instead of
symbol it resolves to get thread pointer, otherwise linker relaxation
doesn't work correctly, adding extra offset to thread-local variable
address.
This fixes most of tls/tst-tls* tests.
Right. Tested and applied.
best regards
Waldemar