Browse Source

test/tls: xtensa: fix TLS_LD definition

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@gmail.com>
Max Filippov 9 years ago
parent
commit
49700fa92a
1 changed files with 3 additions and 3 deletions
  1. 3 3
      test/tls/tls-macros.h

+ 3 - 3
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)							\