Avoid duplicate symbols produced by emutls
Jan Hubicka
hubicka@ucw.cz
Mon Feb 9 21:08:00 GMT 2015
Hi,
this patch fixes issue with emutls outputting duplicate ddeifnitions of the vars
it creates becuase it sometimes inserts variable twice (once as alias target and
once as real var).
Bootstrapped/regtested x86_64-linux and HP regtested at at cris-elf.
PR ipa/61548
* tree-emutls.c (ipa_lower_emutls): Avoid duplicates in TLS_VARS.
Index: tree-emutls.c
===================================================================
--- tree-emutls.c (revision 220547)
+++ tree-emutls.c (working copy)
@@ -753,17 +753,19 @@ ipa_lower_emutls (void)
cgraph_node *func;
bool any_aliases = false;
tree ctor_body = NULL;
-
+ hash_set <varpool_node *> visited;
auto_vec <varpool_node *> tls_vars;
/* Examine all global variables for TLS variables. */
FOR_EACH_VARIABLE (var)
- if (DECL_THREAD_LOCAL_P (var->decl))
+ if (DECL_THREAD_LOCAL_P (var->decl)
+ && !visited.add (var))
{
gcc_checking_assert (TREE_STATIC (var->decl)
|| DECL_EXTERNAL (var->decl));
tls_vars.safe_push (var);
- if (var->alias && var->definition)
+ if (var->alias && var->definition
+ && !visited.add (var->ultimate_alias_target ()))
tls_vars.safe_push (var->ultimate_alias_target ());
}
More information about the Gcc-patches
mailing list