]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
S390: Clobber also r14 in TLS_LD, TLS_GD macros on 31bit.
authorStefan Liebler <stli@linux.vnet.ibm.com>
Tue, 4 Apr 2017 11:16:28 +0000 (13:16 +0200)
committerStefan Liebler <stli@linux.vnet.ibm.com>
Tue, 4 Apr 2017 11:16:28 +0000 (13:16 +0200)
This patch also clobbers r14 in TLS_LD, TLS_GD macros on 31bit.
This ensures that r14 isn't used to save and restore r12 while
r14 is clobbered by the bas-instruction.

As note:
r12 can't be added to clobber list as gcc would fail with:
error: PIC register clobbered by â€˜12’ in â€˜asm’

For 64bit this fix was already done in 2004 in the
commit b80af23ac6973e69df6cd23d221fa44fffb21e17.

ChangeLog:

* sysdeps/s390/s390-32/tls-macros.h (TLS_LD, TLS_GD):
Clobber also r14.

ChangeLog
sysdeps/s390/s390-32/tls-macros.h

index 940bcbf64f02b6e1aca275bc392f5287f1af860a..74f56c2b74d5d0132a54e9041ad33ff4a626384a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-04  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
+       * sysdeps/s390/s390-32/tls-macros.h (TLS_LD, TLS_GD):
+       Clobber also r14.
+
 2017-04-03  Mike Frysinger  <vapier@gentoo.org>
 
        [BZ #21253]
index 09b42aa37af22e501f2df6a8f3d9f846132cfbfd..a4c5fffa33674c432c60740e19a14dfad789228e 100644 (file)
@@ -47,7 +47,7 @@
              "alr %0,%%r2\n\t"                                               \
              "lr %%r12,%1"                                                   \
              : "=&a" (__offset), "=&a" (__save12)                            \
-             : : "cc", "0", "1", "2", "3", "4", "5" );                       \
+             : : "cc", "0", "1", "2", "3", "4", "5", "14");                  \
      (int *) (__builtin_thread_pointer() + __offset); })
 #else
 # define TLS_LD(x) \
@@ -63,7 +63,8 @@
              "bas %%r14,0(%%r1):tls_ldcall:" #x "\n\t"                       \
              "l %0,12(%0)\n\t"                                               \
              "alr %0,%%r2"                                                   \
-             : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" ); \
+             : "=&a" (__offset)                                              \
+             : : "cc", "0", "1", "2", "3", "4", "5", "12", "14");            \
      (int *) (__builtin_thread_pointer() + __offset); })
 #endif
 
@@ -83,7 +84,7 @@
              "lr %0,%%r2\n\t"                                                \
              "lr %%r12,%1"                                                   \
              : "=&a" (__offset), "=&a" (__save12)                            \
-             : : "cc", "0", "1", "2", "3", "4", "5" );                       \
+             : : "cc", "0", "1", "2", "3", "4", "5", "14");                  \
      (int *) (__builtin_thread_pointer() + __offset); })
 #else
 # define TLS_GD(x) \
@@ -97,6 +98,7 @@
              "l %%r2,8(%0)\n\t"                                              \
              "bas %%r14,0(%%r1):tls_gdcall:" #x "\n\t"                       \
              "lr %0,%%r2"                                                    \
-             : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" ); \
+             : "=&a" (__offset)                                              \
+             : : "cc", "0", "1", "2", "3", "4", "5", "12", "14");            \
      (int *) (__builtin_thread_pointer() + __offset); })
 #endif