aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cgraph.h1
-rw-r--r--gcc/lto/ChangeLog4
-rw-r--r--gcc/lto/lto-symtab.c9
-rw-r--r--gcc/print-tree.c20
-rw-r--r--gcc/varpool.c6
6 files changed, 29 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a52961..1691cc0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2014-06-20 Jan Hubicka <hubicka@ucw.cz>
+ * cgraph.h (tls_model_names): New variable.
+ * print-tree.c (print_node): Simplify.
+ * varpool.c (tls_model_names): New variable.
+ (dump_varpool_node): Output tls model.
+
+2014-06-20 Jan Hubicka <hubicka@ucw.cz>
+
* ipa-visibility.c (function_and_variable_visibility): Disable
temporarily local aliases for some targets.
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 8f8deae..2fad193 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -244,6 +244,7 @@ struct lto_file_decl_data;
extern const char * const cgraph_availability_names[];
extern const char * const ld_plugin_symbol_resolution_names[];
+extern const char * const tls_model_names[];
/* Information about thunk, used only for same body aliases. */
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index e9ff1be..4086b21 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,5 +1,9 @@
2014-06-20 Jan Hubicka <hubicka@ucw.cz>
+ * lto-symtab.c (lto_varpool_replace_node): Report TLS model conflicts.
+
+2014-06-20 Jan Hubicka <hubicka@ucw.cz>
+
* lto.c (compare_tree_sccs_1): Do not compare priorities.
2014-06-15 Jan Hubicka <hubicka@ucw.cz>
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c
index 571b2dd..c02f987 100644
--- a/gcc/lto/lto-symtab.c
+++ b/gcc/lto/lto-symtab.c
@@ -116,6 +116,15 @@ lto_varpool_replace_node (varpool_node *vnode,
if (DECL_INITIAL (vnode->decl)
&& vnode->decl != prevailing_node->decl)
DECL_INITIAL (vnode->decl) = error_mark_node;
+
+ if (vnode->tls_model != prevailing_node->tls_model)
+ {
+ error_at (DECL_SOURCE_LOCATION (vnode->decl),
+ "%qD is defined as %s", vnode->decl, tls_model_names [vnode->tls_model]);
+ inform (DECL_SOURCE_LOCATION (prevailing_node->decl),
+ "previously defined here as %s",
+ tls_model_names [prevailing_node->tls_model]);
+ }
/* Finally remove the replaced node. */
varpool_remove_node (vnode);
}
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index e26b063..91d88c2 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -418,24 +418,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
fputs (" common", file);
if (code == VAR_DECL && DECL_THREAD_LOCAL_P (node))
{
- enum tls_model kind = DECL_TLS_MODEL (node);
- switch (kind)
- {
- case TLS_MODEL_GLOBAL_DYNAMIC:
- fputs (" tls-global-dynamic", file);
- break;
- case TLS_MODEL_LOCAL_DYNAMIC:
- fputs (" tls-local-dynamic", file);
- break;
- case TLS_MODEL_INITIAL_EXEC:
- fputs (" tls-initial-exec", file);
- break;
- case TLS_MODEL_LOCAL_EXEC:
- fputs (" tls-local-exec", file);
- break;
- default:
- gcc_unreachable ();
- }
+ fputs (" ", file);
+ fputs (tls_model_names[DECL_TLS_MODEL (node)], file);
}
if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
diff --git a/gcc/varpool.c b/gcc/varpool.c
index ff67127..f6f8365 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -36,6 +36,10 @@ along with GCC; see the file COPYING3. If not see
#include "flags.h"
#include "pointer-set.h"
+const char * const tls_model_names[]={"none", "tls-emulated", "tls-real",
+ "tls-global-dynamic", "tls-local-dynamic",
+ "tls-initial-exec", "tls-local-exec"};
+
/* List of hooks triggered on varpool_node events. */
struct varpool_node_hook_list {
varpool_node_hook hook;
@@ -213,6 +217,8 @@ dump_varpool_node (FILE *f, varpool_node *node)
fprintf (f, " const-value-known");
if (node->writeonly)
fprintf (f, " write-only");
+ if (node->tls_model)
+ fprintf (f, " %s", tls_model_names [node->tls_model]);
fprintf (f, "\n");
}