aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/ipa-visibility.c7
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4c03408..87907fd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2014-09-19 Jan Hubicka <hubicka@ucw.cz>
+ * ipa-visibility.c (varpool_node::externally_visible_p): Do not
+ privatize dynamic TLS variables.
+
+2014-09-19 Jan Hubicka <hubicka@ucw.cz>
+
* diagnostic.c (warning_n): New function.
* diagnostic-core.h (warning_n): Declare.
* ipa-devirt.c (ipa_devirt): Handle singulars correctly;
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))