[s390] Define a __tls_get_addr macro to avoid declaring it again
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 14 Jan 2015 15:56:50 +0000 (21:26 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 14 Jan 2015 15:56:50 +0000 (21:26 +0530)
commit 050f7298e1ecc39887c329037575ccd972071255 added an extern
declaration for __tls_get_addr that conflicts with the one in s390
dl-tls.h, based on whether __tls_get_addr is defined as a macro.  The
rationale seems to be based on the assumption that __tls_get_addr is
exported for every architecture and hence an internal non-plt alias is
needed.  This is not true for s390 though, since it exports
__tls_get_offset and not __tls_get_addr.  This results in tst-audit9
being stuck in an infinite loop.

This patch fixes this by defining a __tls_get_addr macro to itself so
as to not use the conflicting declaration.

ChangeLog
sysdeps/s390/dl-tls.h

index 2b65e02..33e232c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-14  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       * sysdeps/s390/dl-tls.h [IS_IN (rtld)]: Define __tls_get_addr
+       macro.
+
 2015-01-13  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * sysdeps/powerpc/powerpc64/power7/memcmp.S (memcmp): Fix performance
index 0fa8045..8132b10 100644 (file)
@@ -33,6 +33,13 @@ extern unsigned long __tls_get_offset (unsigned long got_offset);
 
 #  include <shlib-compat.h>
 
+/* dl-tls.c declares __tls_get_addr as an exported symbol if it is not defined
+   as a macro.  It seems suitable to do that in the generic code because all
+   architectures other than s390 export __tls_get_addr.  The declaration causes
+   problems in s390 though, so we define __tls_get_addr here to avoid declaring
+   __tls_get_addr again.  */
+#  define __tls_get_addr __tls_get_addr
+
 extern void *__tls_get_addr (tls_index *ti) attribute_hidden;
 /* Make a temporary alias of __tls_get_addr to remove the hidden
    attribute.  Then export __tls_get_addr as __tls_get_addr_internal