OSDN Git Service

test/tls: xtensa: fix TLS_LD definition
authorMax Filippov <jcmvbkbc@gmail.com>
Fri, 3 Jul 2015 16:51:25 +0000 (19:51 +0300)
committerWaldemar Brodkorb <wbx@openadk.org>
Fri, 3 Jul 2015 22:39:31 +0000 (17:39 -0500)
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>
test/tls/tls-macros.h

index a41aef6..7d89274 100644 (file)
@@ -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)                                                  \