aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-11-13 01:53:53 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-11-13 01:53:53 +0000
commit9c4b457e1b47369a40afd5e5e220f5d657667c0a (patch)
tree0f58239813dd0e10f9cbda394499c2f3bd546f9c
parent53f5c65914b7601b652cd7a38714885a8492e562 (diff)
downloadglibc-9c4b457e1b47369a40afd5e5e220f5d657667c0a.zip
glibc-9c4b457e1b47369a40afd5e5e220f5d657667c0a.tar.gz
glibc-9c4b457e1b47369a40afd5e5e220f5d657667c0a.tar.bz2
Add hidden_tls_def macros, fix powerpc-soft build with GCC 9.
Soft-float powerpc fails to build with current GCC mainline because of use of libc_hidden_data_def for TLS variables, resulting in a non-TLS alias being defined, to which the tls_model attribute is now copied, resulting in a warning about it being ignored. The problem here appears to be the non-TLS alias. This patch adds a hidden_tls_def macro family, corresponding to the hidden_tls_proto macros, to define TLS aliases properly in such a case, and uses it for those powerpc soft-float variables. Tested with build-many-glibcs.py compilers build for powerpc-linux-gnu soft-float. Also tested for x86_64. * include/libc-symbols.h [SHARED && !NO_HIDDEN && !__ASSEMBLER__] (__hidden_ver2): New macro. Use old definition of __hidden_ver1 with additional parameter thread. [SHARED && !NO_HIDDEN && !__ASSEMBLER__] (__hidden_ver1): Define in terms of __hidden_ver2. (hidden_tls_def): New macro. (libc_hidden_tls_def): Likewise. (rtld_hidden_tls_def): Likewise. (libm_hidden_tls_def): Likewise. (libmvec_hidden_tls_def): Likewise. (libresolv_hidden_tls_def): Likewise. (librt_hidden_tls_def): Likewise. (libdl_hidden_tls_def): Likewise. (libnss_files_hidden_tls_def): Likewise. (libnsl_hidden_tls_def): Likewise. (libnss_nisplus_hidden_tls_def): Likewise. (libutil_hidden_tls_def): Likewise. (libutil_hidden_tls_def): Likweise. * sysdeps/powerpc/nofpu/sim-full.c (__sim_exceptions_thread): Use libc_hidden_tls_def. (__sim_disabled_exceptions_thread): Likewise. (__sim_round_mode_thread): Likewise.
-rw-r--r--ChangeLog23
-rw-r--r--include/libc-symbols.h33
-rw-r--r--sysdeps/powerpc/nofpu/sim-full.c6
3 files changed, 57 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 8b82d3e..c7ddb7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,28 @@
2018-11-13 Joseph Myers <joseph@codesourcery.com>
+ * include/libc-symbols.h [SHARED && !NO_HIDDEN && !__ASSEMBLER__]
+ (__hidden_ver2): New macro. Use old definition of __hidden_ver1
+ with additional parameter thread.
+ [SHARED && !NO_HIDDEN && !__ASSEMBLER__] (__hidden_ver1): Define
+ in terms of __hidden_ver2.
+ (hidden_tls_def): New macro.
+ (libc_hidden_tls_def): Likewise.
+ (rtld_hidden_tls_def): Likewise.
+ (libm_hidden_tls_def): Likewise.
+ (libmvec_hidden_tls_def): Likewise.
+ (libresolv_hidden_tls_def): Likewise.
+ (librt_hidden_tls_def): Likewise.
+ (libdl_hidden_tls_def): Likewise.
+ (libnss_files_hidden_tls_def): Likewise.
+ (libnsl_hidden_tls_def): Likewise.
+ (libnss_nisplus_hidden_tls_def): Likewise.
+ (libutil_hidden_tls_def): Likewise.
+ (libutil_hidden_tls_def): Likweise.
+ * sysdeps/powerpc/nofpu/sim-full.c (__sim_exceptions_thread): Use
+ libc_hidden_tls_def.
+ (__sim_disabled_exceptions_thread): Likewise.
+ (__sim_round_mode_thread): Likewise.
+
* sysdeps/sparc/sparc-ifunc.h [SHARED]
(sparc_ifunc_redirected_hidden_def): Use __attribute_copy__ to
copy attributes from name.
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index e71a479..4dbefd5 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -538,14 +538,19 @@ for linking")
# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name)
# define __hidden_asmname2(prefix, name) #prefix name
# define __hidden_ver1(local, internal, name) \
- extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
- extern __typeof (name) __EI_##name \
+ __hidden_ver2 (, local, internal, name)
+# define __hidden_ver2(thread, local, internal, name) \
+ extern thread __typeof (name) __EI_##name \
+ __asm__(__hidden_asmname (#internal)); \
+ extern thread __typeof (name) __EI_##name \
__attribute__((alias (__hidden_asmname (#local)))) \
__attribute_copy__ (name)
# define hidden_ver(local, name) __hidden_ver1(local, __GI_##name, name);
# define hidden_data_ver(local, name) hidden_ver(local, name)
# define hidden_def(name) __hidden_ver1(__GI_##name, name, name);
# define hidden_data_def(name) hidden_def(name)
+# define hidden_tls_def(name) \
+ __hidden_ver2 (__thread, __GI_##name, name, name);
# define hidden_weak(name) \
__hidden_ver1(__GI_##name, name, name) __attribute__((weak));
# define hidden_data_weak(name) hidden_weak(name)
@@ -573,6 +578,7 @@ for linking")
# define hidden_weak(name) hidden_def (name)
# define hidden_ver(local, name) strong_alias (local, __GI_##name)
# define hidden_data_def(name) strong_data_alias (name, __GI_##name)
+# define hidden_tls_def(name) hidden_data_def (name)
# define hidden_data_weak(name) hidden_data_def (name)
# define hidden_data_ver(local, name) strong_data_alias (local, __GI_##name)
# define HIDDEN_JUMPTARGET(name) __GI_##name
@@ -602,6 +608,7 @@ for linking")
# define hidden_ver(local, name)
# define hidden_data_weak(name)
# define hidden_data_def(name)
+# define hidden_tls_def(name)
# define hidden_data_ver(local, name)
# define hidden_nolink(name, lib, version)
#endif
@@ -619,6 +626,7 @@ for linking")
# endif
# define libc_hidden_ver(local, name) hidden_ver (local, name)
# define libc_hidden_data_def(name) hidden_data_def (name)
+# define libc_hidden_tls_def(name) hidden_tls_def (name)
# define libc_hidden_data_weak(name) hidden_data_weak (name)
# define libc_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -628,6 +636,7 @@ for linking")
# define libc_hidden_weak(name)
# define libc_hidden_ver(local, name)
# define libc_hidden_data_def(name)
+# define libc_hidden_tls_def(name)
# define libc_hidden_data_weak(name)
# define libc_hidden_data_ver(local, name)
#endif
@@ -639,6 +648,7 @@ for linking")
# define rtld_hidden_weak(name) hidden_weak (name)
# define rtld_hidden_ver(local, name) hidden_ver (local, name)
# define rtld_hidden_data_def(name) hidden_data_def (name)
+# define rtld_hidden_tls_def(name) hidden_tls_def (name)
# define rtld_hidden_data_weak(name) hidden_data_weak (name)
# define rtld_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -648,6 +658,7 @@ for linking")
# define rtld_hidden_weak(name)
# define rtld_hidden_ver(local, name)
# define rtld_hidden_data_def(name)
+# define rtld_hidden_tls_def(name)
# define rtld_hidden_data_weak(name)
# define rtld_hidden_data_ver(local, name)
#endif
@@ -659,6 +670,7 @@ for linking")
# define libm_hidden_weak(name) hidden_weak (name)
# define libm_hidden_ver(local, name) hidden_ver (local, name)
# define libm_hidden_data_def(name) hidden_data_def (name)
+# define libm_hidden_tls_def(name) hidden_tls_def (name)
# define libm_hidden_data_weak(name) hidden_data_weak (name)
# define libm_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -668,6 +680,7 @@ for linking")
# define libm_hidden_weak(name)
# define libm_hidden_ver(local, name)
# define libm_hidden_data_def(name)
+# define libm_hidden_tls_def(name)
# define libm_hidden_data_weak(name)
# define libm_hidden_data_ver(local, name)
#endif
@@ -679,6 +692,7 @@ for linking")
# define libmvec_hidden_weak(name) hidden_weak (name)
# define libmvec_hidden_ver(local, name) hidden_ver (local, name)
# define libmvec_hidden_data_def(name) hidden_data_def (name)
+# define libmvec_hidden_tls_def(name) hidden_tls_def (name)
# define libmvec_hidden_data_weak(name) hidden_data_weak (name)
# define libmvec_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -688,6 +702,7 @@ for linking")
# define libmvec_hidden_weak(name)
# define libmvec_hidden_ver(local, name)
# define libmvec_hidden_data_def(name)
+# define libmvec_hidden_tls_def(name)
# define libmvec_hidden_data_weak(name)
# define libmvec_hidden_data_ver(local, name)
#endif
@@ -700,6 +715,7 @@ for linking")
# define libresolv_hidden_weak(name) hidden_weak (name)
# define libresolv_hidden_ver(local, name) hidden_ver (local, name)
# define libresolv_hidden_data_def(name) hidden_data_def (name)
+# define libresolv_hidden_tls_def(name) hidden_tls_def (name)
# define libresolv_hidden_data_weak(name) hidden_data_weak (name)
# define libresolv_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -709,6 +725,7 @@ for linking")
# define libresolv_hidden_weak(name)
# define libresolv_hidden_ver(local, name)
# define libresolv_hidden_data_def(name)
+# define libresolv_hidden_tls_def(name)
# define libresolv_hidden_data_weak(name)
# define libresolv_hidden_data_ver(local, name)
#endif
@@ -721,6 +738,7 @@ for linking")
# define librt_hidden_weak(name) hidden_weak (name)
# define librt_hidden_ver(local, name) hidden_ver (local, name)
# define librt_hidden_data_def(name) hidden_data_def (name)
+# define librt_hidden_tls_def(name) hidden_tls_def (name)
# define librt_hidden_data_weak(name) hidden_data_weak (name)
# define librt_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -730,6 +748,7 @@ for linking")
# define librt_hidden_weak(name)
# define librt_hidden_ver(local, name)
# define librt_hidden_data_def(name)
+# define librt_hidden_tls_def(name)
# define librt_hidden_data_weak(name)
# define librt_hidden_data_ver(local, name)
#endif
@@ -742,6 +761,7 @@ for linking")
# define libdl_hidden_weak(name) hidden_weak (name)
# define libdl_hidden_ver(local, name) hidden_ver (local, name)
# define libdl_hidden_data_def(name) hidden_data_def (name)
+# define libdl_hidden_tls_def(name) hidden_tls_def (name)
# define libdl_hidden_data_weak(name) hidden_data_weak (name)
# define libdl_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -751,6 +771,7 @@ for linking")
# define libdl_hidden_weak(name)
# define libdl_hidden_ver(local, name)
# define libdl_hidden_data_def(name)
+# define libdl_hidden_tls_def(name)
# define libdl_hidden_data_weak(name)
# define libdl_hidden_data_ver(local, name)
#endif
@@ -763,6 +784,7 @@ for linking")
# define libnss_files_hidden_weak(name) hidden_weak (name)
# define libnss_files_hidden_ver(local, name) hidden_ver (local, name)
# define libnss_files_hidden_data_def(name) hidden_data_def (name)
+# define libnss_files_hidden_tls_def(name) hidden_tls_def (name)
# define libnss_files_hidden_data_weak(name) hidden_data_weak (name)
# define libnss_files_hidden_data_ver(local, name) hidden_data_ver(local, name)
#else
@@ -772,6 +794,7 @@ for linking")
# define libnss_files_hidden_weak(name)
# define libnss_files_hidden_ver(local, name)
# define libnss_files_hidden_data_def(name)
+# define libnss_files_hidden_tls_def(name)
# define libnss_files_hidden_data_weak(name)
# define libnss_files_hidden_data_ver(local, name)
#endif
@@ -790,6 +813,7 @@ for linking")
# define libnsl_hidden_weak(name) hidden_weak (name)
# define libnsl_hidden_ver(local, name) hidden_ver (local, name)
# define libnsl_hidden_data_def(name) hidden_data_def (name)
+# define libnsl_hidden_tls_def(name) hidden_tls_def (name)
# define libnsl_hidden_data_weak(name) hidden_data_weak (name)
# define libnsl_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -799,6 +823,7 @@ for linking")
# define libnsl_hidden_weak(name)
# define libnsl_hidden_ver(local, name)
# define libnsl_hidden_data_def(name)
+# define libnsl_hidden_tls_def(name)
# define libnsl_hidden_data_weak(name)
# define libnsl_hidden_data_ver(local, name)
#endif
@@ -811,6 +836,7 @@ for linking")
# define libnss_nisplus_hidden_weak(name) hidden_weak (name)
# define libnss_nisplus_hidden_ver(local, name) hidden_ver (local, name)
# define libnss_nisplus_hidden_data_def(name) hidden_data_def (name)
+# define libnss_nisplus_hidden_tls_def(name) hidden_tls_def (name)
# define libnss_nisplus_hidden_data_weak(name) hidden_data_weak (name)
# define libnss_nisplus_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -820,6 +846,7 @@ for linking")
# define libnss_nisplus_hidden_weak(name)
# define libnss_nisplus_hidden_ver(local, name)
# define libnss_nisplus_hidden_data_def(name)
+# define libnss_nisplus_hidden_tls_def(name)
# define libnss_nisplus_hidden_data_weak(name)
# define libnss_nisplus_hidden_data_ver(local, name)
#endif
@@ -840,6 +867,7 @@ for linking")
# define libutil_hidden_weak(name) hidden_weak (name)
# define libutil_hidden_ver(local, name) hidden_ver (local, name)
# define libutil_hidden_data_def(name) hidden_data_def (name)
+# define libutil_hidden_tls_def(name) hidden_tls_def (name)
# define libutil_hidden_data_weak(name) hidden_data_weak (name)
# define libutil_hidden_data_ver(local, name) hidden_data_ver (local, name)
#else
@@ -849,6 +877,7 @@ for linking")
# define libutil_hidden_weak(name)
# define libutil_hidden_ver(local, name)
# define libutil_hidden_data_def(name)
+# define libutil_hidden_tls_def(name)
# define libutil_hidden_data_weak(name)
# define libutil_hidden_data_ver(local, name)
#endif
diff --git a/sysdeps/powerpc/nofpu/sim-full.c b/sysdeps/powerpc/nofpu/sim-full.c
index 223bf48..f18ebad 100644
--- a/sysdeps/powerpc/nofpu/sim-full.c
+++ b/sysdeps/powerpc/nofpu/sim-full.c
@@ -23,14 +23,14 @@
/* Thread-local to store sticky exceptions. */
__thread int __sim_exceptions_thread __attribute__ ((nocommon));
-libc_hidden_data_def (__sim_exceptions_thread);
+libc_hidden_tls_def (__sim_exceptions_thread);
/* By default, no exceptions should trap. */
__thread int __sim_disabled_exceptions_thread = 0xffffffff;
-libc_hidden_data_def (__sim_disabled_exceptions_thread);
+libc_hidden_tls_def (__sim_disabled_exceptions_thread);
__thread int __sim_round_mode_thread __attribute__ ((nocommon));
-libc_hidden_data_def (__sim_round_mode_thread);
+libc_hidden_tls_def (__sim_round_mode_thread);
#if SIM_GLOBAL_COMPAT
int __sim_exceptions_global __attribute__ ((nocommon));