diff options
author | Jan Hubicka <jh@suse.cz> | 2010-07-15 18:01:33 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2010-07-15 16:01:33 +0000 |
commit | ef8fc6c2eff4060e5acf59d7592837d352c706ce (patch) | |
tree | 052badf696ddabc169780546ea09d374868b2551 | |
parent | 3d894a8eaf6b85393ef136045babc20e3c6e6536 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto-symtab.c | 43 |
2 files changed, 26 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f9fbfd8..2e80e69 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. 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; } |