From f961457f887a965ecca2f35b81e33c077759c347 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 12 Jun 2014 06:03:49 +0200 Subject: symtab.c (section_hash): New hash. * symtab.c (section_hash): New hash. (symtab_unregister_node): Clear section before freeing. (hash_section_hash_entry): New haser. (eq_sections): New function. (symtab_node::set_section_for_node): New method. (set_section_1): Update. (symtab_node::set_section): Take string instead of tree as parameter. (symtab_resolve_alias): Update. * cgraph.h (section_hash_entry_d): New structure. (section_hash_entry): New typedef. (cgraph_node): Change comdat_group_ to x_comdat_group, change section_ to x_section and turn into section_hash_entry; update accestors; put set_section_for_node offline. * tree.c (decl_section_name): Turn into string. (set_decl_section_name): Change parameter to be string. * tree.h (decl_section_name, set_decl_section_name): Update prototypes. * sdbout.c (sdbout_one_type): Update. * tree-vect-data-refs.c (vect_can_force_dr_alignment_p): Update. * varasm.c (IN_NAMED_SECTION, get_named_section, resolve_unique_section, hot_function_section, get_named_text_section, USE_SELECT_SECTION_FOR_FUNCTIONS, default_function_rodata_section, make_decl_rtl, default_unique_section): Update. * config/c6x/c6x.c (c6x_in_small_data_p): Update. (c6x_elf_unique_section): Update. * config/nios2/nios2.c (nios2_in_small_data_p): Update. * config/pa/pa.c (pa_function_section): Update. * config/pa/pa.h (IN_NAMED_SECTION_P): Update. * config/ia64/ia64.c (ia64_in_small_data_p): Update. * config/arc/arc.c (arc_in_small_data_p): Update. * config/arm/unknown-elf.h (IN_NAMED_SECTION_P): Update. * config/mcore/mcore.c (mcore_unique_section): Update. * config/mips/mips.c (mips16_build_function_stub): Update. (mips16_build_call_stub): Update. (mips_function_rodata_section): Update. (mips_in_small_data_p): Update. * config/score/score.c (score_in_small_data_p): Update. * config/rx/rx.c (rx_in_small_data): Update. * config/rs6000/rs6000.c (rs6000_elf_in_small_data_p): Update. (rs6000_xcoff_asm_named_section): Update. (rs6000_xcoff_unique_section): Update. * config/frv/frv.c (frv_string_begins_with): Update. (frv_in_small_data_p): Update. * config/v850/v850.c (v850_encode_data_area): Update. * config/bfin/bfin.c (DECL_SECTION_NAME): Update. (bfin_handle_l1_data_attribute): Update. (bfin_handle_l2_attribute): Update. * config/mep/mep.c (mep_unique_section): Update. * config/microblaze/microblaze.c (microblaze_elf_in_small_data_p): Update. * config/h8300/h8300.c (h8300_handle_eightbit_data_attribute): Update. (h8300_handle_tiny_data_attribute): Update. * config/m32r/m32r.c (m32r_in_small_data_p): Update. (m32r_in_small_data_p): Update. * config/alpha/alpha.c (alpha_in_small_data_p): Update. * config/i386/i386.c (ix86_in_large_data_p): Update. * config/i386/winnt.c (i386_pe_unique_section): Update. * config/darwin.c (darwin_function_section): Update. * config/lm32/lm32.c (lm32_in_small_data_p): Update. * tree-emutls.c (get_emutls_init_templ_addr): Update. (new_emutls_decl): Update. * lto-cgraph.c (lto_output_node, input_node, input_varpool_node, input_varpool_node): Update. (ead_string_cst): Turn to ... (read_string): ... this one. * dwarf2out.c (secname_for_decl): Update. * asan.c (asan_protect_global): Update. * c-family/c-common.c (handle_section_attribute): Update handling for section names that are no longer trees. * java/class.c (build_utf8_ref): Update handling for section names that are no longer trees. (emit_register_classes_in_jcr_section): Update. * vtable-class-hierarchy.c: Update handling for section names that are no longer trees. * decl.c (duplicate_decls): Likewise. * gcc-interface/utils.c: Update handling for section names that are no longer trees. From-SVN: r211489 --- gcc/cgraph.h | 51 ++++++++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 27 deletions(-) (limited to 'gcc/cgraph.h') diff --git a/gcc/cgraph.h b/gcc/cgraph.h index dc286d9..1a5e85e 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -37,6 +37,19 @@ enum symtab_type SYMTAB_VARIABLE }; +/* Section names are stored as reference counted strings in GGC safe hashtable + (to make them survive through PCH). */ + +struct GTY(()) section_hash_entry_d +{ + int ref_count; + char *name; /* As long as this datastructure stays in GGC, we can not put + string at the tail of structure of GGC dies in horrible + way */ +}; + +typedef struct section_hash_entry_d section_hash_entry; + /* Base of all entries in the symbol table. The symtab_node is inherited by cgraph and varpol nodes. */ class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"), @@ -147,14 +160,14 @@ public: /* Return comdat group. */ tree get_comdat_group () { - return comdat_group_; + return x_comdat_group; } tree get_comdat_group_id () { - if (comdat_group_ && TREE_CODE (comdat_group_) != IDENTIFIER_NODE) - comdat_group_ = DECL_ASSEMBLER_NAME (comdat_group_); - return comdat_group_; + if (x_comdat_group && TREE_CODE (x_comdat_group) != IDENTIFIER_NODE) + x_comdat_group = DECL_ASSEMBLER_NAME (x_comdat_group); + return x_comdat_group; } /* Set comdat group. */ @@ -162,32 +175,15 @@ public: { gcc_checking_assert (!group || TREE_CODE (group) == IDENTIFIER_NODE || DECL_P (group)); - comdat_group_ = group; - } - - /* Return section as STRING_CST. */ - tree get_section_name () - { - return section_; + x_comdat_group = group; } /* Return section as string. */ const char * get_section () { - if (!section_) + if (!x_section) return NULL; - return TREE_STRING_POINTER (section_); - } - - /* Set section, do not recurse into aliases. - When one wants to change section of symbol and its aliases, - use set_section */ - void set_section_for_node (tree section) - { - gcc_checking_assert (!section || TREE_CODE (section) == STRING_CST); - section_ = section; - if (!section) - implicit_section = false; + return x_section->name; } /* Vectors of referring and referenced entities. */ @@ -204,13 +200,14 @@ public: PTR GTY ((skip)) aux; /* Comdat group the symbol is in. Can be private if GGC allowed that. */ - tree comdat_group_; + tree x_comdat_group; /* Section name. Again can be private, if allowed. */ - tree section_; + section_hash_entry *x_section; /* Set section for symbol and its aliases. */ - void set_section (tree section); + void set_section (const char *section); + void set_section_for_node (const char *section); }; enum availability -- cgit v1.1