[Linux-Xtensa] [PATCH] test/tls: xtensa: fix TLS_LD definition

Max Filippov jcmvbkbc at gmail.com
Fri Jul 3 16:51:25 UTC 2015


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 at 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_ at TLSFUNC\n\t"			\
+	  "movi a10, _TLS_MODULE_BASE_ at TLSARG\n\t"			\
+	  "callx8.tls a8, _TLS_MODULE_BASE_ at TLSCALL\n\t"		\
 	  "movi %0, " #x "@TPOFF\n\t"					\
 	  "add %0, %0, a10\n\t"						\
 	  : "=r" (__l)							\
-- 
1.8.1.4



More information about the linux-xtensa mailing list