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
This commit is contained in:
Jan Hubicka 2010-07-15 18:01:33 +02:00 committed by Jan Hubicka
parent 3d894a8eaf
commit ef8fc6c2ef
2 changed files with 26 additions and 23 deletions

View File

@ -1,3 +1,9 @@
2010-07-15 Jan Hubicka <jh@suse.cz>
* 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.
2010-07-15 Nathan Froyd <froydnj@codesourcery.com>
* tree.h (TREE_RTL_OPERAND_CHECK): Delete.

View File

@ -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;
}