aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto-symtab.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2010-07-15 18:01:33 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2010-07-15 16:01:33 +0000
commitef8fc6c2eff4060e5acf59d7592837d352c706ce (patch)
tree052badf696ddabc169780546ea09d374868b2551 /gcc/lto-symtab.c
parent3d894a8eaf6b85393ef136045babc20e3c6e6536 (diff)
downloadgcc-ef8fc6c2eff4060e5acf59d7592837d352c706ce.zip
gcc-ef8fc6c2eff4060e5acf59d7592837d352c706ce.tar.gz
gcc-ef8fc6c2eff4060e5acf59d7592837d352c706ce.tar.bz2
lto-symtab.c (lto_symtab_resolve_symbols): Remove hack handling comdats for broken gold.
* lto-symtab.c (lto_symtab_resolve_symbols): Remove hack handling comdats for broken gold. (lto_sy mtab_merge_decls_1): Set used_from_object_file correctly. From-SVN: r162225
Diffstat (limited to 'gcc/lto-symtab.c')
-rw-r--r--gcc/lto-symtab.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c
index 7d42350..978bccb 100644
--- a/gcc/lto-symtab.c
+++ b/gcc/lto-symtab.c
@@ -494,13 +494,7 @@ lto_symtab_resolve_symbols (void **slot)
if (TREE_CODE (e->decl) == FUNCTION_DECL)
e->node = cgraph_get_node_or_alias (e->decl);
else if (TREE_CODE (e->decl) == VAR_DECL)
- {
- e->vnode = varpool_get_node (e->decl);
- /* The LTO plugin for gold doesn't handle common symbols
- properly. Let us choose manually. */
- if (DECL_COMMON (e->decl))
- e->resolution = LDPR_UNKNOWN;
- }
+ e->vnode = varpool_get_node (e->decl);
}
e = (lto_symtab_entry_t) *slot;
@@ -742,23 +736,26 @@ lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED)
&& TREE_CODE (prevailing->decl) != VAR_DECL)
prevailing->next = NULL;
- /* Set externally_visible flags for declaration of LDPR_PREVAILING_DEF */
- if (flag_whole_program)
+ /* Set used_from_object_file flags. */
+ if (prevailing->resolution == LDPR_PREVAILING_DEF
+ || prevailing->resolution == LDPR_PREEMPTED_REG
+ || prevailing->resolution == LDPR_RESOLVED_EXEC
+ || prevailing->resolution == LDPR_RESOLVED_DYN)
{
- if (prevailing->resolution == LDPR_PREVAILING_DEF)
- {
- if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
- prevailing->node->local.used_from_object_file = true;
- else
- prevailing->vnode->used_from_object_file = true;
- }
- else if (prevailing->resolution == LDPR_PREVAILING_DEF_IRONLY)
- {
- if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
- prevailing->node->local.used_from_object_file = false;
- else
- prevailing->vnode->used_from_object_file = false;
- }
+ if (TREE_CODE (prevailing->decl) == FUNCTION_DECL)
+ {
+ if (prevailing->node->same_body_alias)
+ prevailing->node->same_body->local.used_from_object_file = true;
+ else
+ prevailing->node->local.used_from_object_file = true;
+ }
+ else
+ {
+ if (prevailing->vnode->alias)
+ prevailing->vnode->extra_name->used_from_object_file = true;
+ else
+ prevailing->vnode->used_from_object_file = true;
+ }
}
return 1;
}