aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-visibility.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2014-09-20 05:11:04 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2014-09-20 03:11:04 +0000
commit8e1ba78f1b8eedd6c65c6f0e6d6d09a801de5d3d (patch)
tree747bbde9edb99ee3266d883a819aa1c7fa43e116 /gcc/ipa-visibility.c
parent26e82579383ea5d8fcf2149eaba65708893f58dc (diff)
downloadgcc-8e1ba78f1b8eedd6c65c6f0e6d6d09a801de5d3d.zip
gcc-8e1ba78f1b8eedd6c65c6f0e6d6d09a801de5d3d.tar.gz
gcc-8e1ba78f1b8eedd6c65c6f0e6d6d09a801de5d3d.tar.bz2
ipa-visibility.c (varpool_node::externally_visible_p): Do not privatize dynamic TLS variables.
* ipa-visibility.c (varpool_node::externally_visible_p): Do not privatize dynamic TLS variables. From-SVN: r215417
Diffstat (limited to 'gcc/ipa-visibility.c')
-rw-r--r--gcc/ipa-visibility.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index 32199af..ea6052f 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -277,6 +277,13 @@ varpool_node::externally_visible_p (void)
if (used_from_object_file_p ())
return true;
+ /* Bringing TLS variables local may cause dynamic linker failures
+ on limits of static TLS vars. */
+ if (DECL_THREAD_LOCAL_P (decl)
+ && (DECL_TLS_MODEL (decl) != TLS_MODEL_EMULATED
+ && DECL_TLS_MODEL (decl) != TLS_MODEL_INITIAL_EXEC))
+ return true;
+
if (DECL_HARD_REGISTER (decl))
return true;
if (DECL_PRESERVE_P (decl))