diff options
author | Siddhesh Poyarekar <siddhesh@redhat.com> | 2015-01-14 21:26:50 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@redhat.com> | 2015-01-14 21:26:50 +0530 |
commit | d639a36345dfce12cbb69e254e8d2f32e5da9ed9 (patch) | |
tree | 4e9377853b9ee17af6e36dd0362d58ad5de19982 /sysdeps/s390/dl-tls.h | |
parent | ce6615c9c686acd34672a9f4eba9bcf5553496f6 (diff) | |
download | glibc-d639a36345dfce12cbb69e254e8d2f32e5da9ed9.tar glibc-d639a36345dfce12cbb69e254e8d2f32e5da9ed9.tar.gz glibc-d639a36345dfce12cbb69e254e8d2f32e5da9ed9.tar.bz2 glibc-d639a36345dfce12cbb69e254e8d2f32e5da9ed9.zip |
[s390] Define a __tls_get_addr macro to avoid declaring it again
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.
Diffstat (limited to 'sysdeps/s390/dl-tls.h')
-rw-r--r-- | sysdeps/s390/dl-tls.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sysdeps/s390/dl-tls.h b/sysdeps/s390/dl-tls.h index 0fa8045809..8132b10ab5 100644 --- a/sysdeps/s390/dl-tls.h +++ b/sysdeps/s390/dl-tls.h @@ -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 |