diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2014-06-11 07:51:23 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2014-06-11 05:51:23 +0000 |
commit | e257a17cb9cc4dc76a79680616420e75ba030b5f (patch) | |
tree | 1eaa587ddb6f0f91bbd446438e1bb46f9b1df815 /gcc/varasm.c | |
parent | 58170a6621f1677c692634d28c4f67a24da42b13 (diff) | |
download | gcc-e257a17cb9cc4dc76a79680616420e75ba030b5f.zip gcc-e257a17cb9cc4dc76a79680616420e75ba030b5f.tar.gz gcc-e257a17cb9cc4dc76a79680616420e75ba030b5f.tar.bz2 |
varasm.c (set_implicit_section): New function.
* varasm.c (set_implicit_section): New function.
(resolve_unique_section): Use it to set implicit section
for aliases, too.
(get_named_text_section): Use symtab_get_node (decl)->implicit_section
(default_function_section): Likewise.
(decl_binds_to_current_def_p): Constify argument.
* varasm.h (decl_binds_to_current_def_p): Update prototype.
* asan.c (asan_protect_global): Use symtab_get_node (decl)->implicit_section.
* symtab.c (dump_symtab_base): Dump implicit sections.
(verify_symtab_base): Verify sanity of sectoins and comdats.
(symtab_resolve_alias): Alias share the section of its target.
(set_section_1): New function.
(symtab_node::set_section): Move here, recurse to aliases.
(verify_symtab): Check for duplicated symtab lists.
* tree-core.h (implicit_section_name_p): Remove.
* tree-vect-data-refs.c: Include varasm.h.
(vect_can_force_dr_alignment_p): Fix conditional on when
decl bints to current definition; use
symtab_get_node (decl)->implicit_section.
* cgraph.c (cgraph_make_node_local_1): Fix section set.
* cgraph.h (struct symtab_node): Add implicit_section.
(set_section): Rename to ...
(set_section_for_node): ... this one.
(set_section): Declare.
* tree.h (DECL_HAS_IMPLICIT_SECTION_NAME_P): Remove.
* lto-cgraph.c (lto_output_node, lto_output_varpool_node,
input_overwrite_node, input_varpool_node): Stream implicit_section.
* ipa.c (symtab_remove_unreachable_nodes): Do not check symtab before
removal; it will fail in LTO.
* vtable-class-hierarchy.c: Use symtab_get_node (var_decl)->implicit_section.
* optimize.c (cdtor_comdat_group): Fix handling of aliases.
(maybe_clone_body): Move symbol across comdat groups.
* method.c (use_thunk): Copy implicit section flag.
* go/go-gcc.cc (Gcc_backend::global_variable_set_init): Use
symtab_get_node(var_decl)->implicit_section.
* lto.c (read_cgraph_and_symbols): Remove unreachable symbols.
(do_whole_program_analysis): Use verify_symtab.
From-SVN: r211434
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r-- | gcc/varasm.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c index 028e740..d56e67a 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -418,6 +418,15 @@ get_named_section (tree decl, const char *name, int reloc) return get_section (name, flags, decl); } +/* Worker for resolve_unique_section. */ + +static bool +set_implicit_section (struct symtab_node *n, void *data ATTRIBUTE_UNUSED) +{ + n->implicit_section = true; + return false; +} + /* If required, set DECL_SECTION_NAME to a unique name. */ void @@ -430,7 +439,9 @@ resolve_unique_section (tree decl, int reloc ATTRIBUTE_UNUSED, || DECL_COMDAT_GROUP (decl))) { targetm.asm_out.unique_section (decl, reloc); - DECL_HAS_IMPLICIT_SECTION_NAME_P (decl) = true; + if (DECL_SECTION_NAME (decl)) + symtab_for_node_and_aliases (symtab_get_node (decl), + set_implicit_section, NULL, true); } } @@ -510,7 +521,7 @@ get_named_text_section (tree decl, buffer = ACONCAT ((stripped_name, named_section_suffix, NULL)); return get_named_section (decl, buffer, 0); } - else if (DECL_HAS_IMPLICIT_SECTION_NAME_P (decl)) + else if (symtab_get_node (decl)->implicit_section) { const char *name; @@ -539,8 +550,7 @@ default_function_section (tree decl, enum node_frequency freq, /* Old GNU linkers have buggy --gc-section support, which sometimes results in .gcc_except_table* sections being garbage collected. */ if (decl - && DECL_SECTION_NAME (decl) - && DECL_HAS_IMPLICIT_SECTION_NAME_P (decl)) + && symtab_get_node (decl)->implicit_section) return NULL; #endif @@ -6764,7 +6774,7 @@ default_binds_local_p_1 (const_tree exp, int shlib) definition from different object file) and when resolution info is available we simply use the knowledge passed to us by linker plugin. */ bool -decl_binds_to_current_def_p (tree decl) +decl_binds_to_current_def_p (const_tree decl) { gcc_assert (DECL_P (decl)); if (!targetm.binds_local_p (decl)) |