Message ID | CAC-ggsGDog8CNR0sSeU4MpgkvUb+dT1tCDNNo5R8ybyuo44=mA@mail.gmail.com |
---|---|
State | New |
Headers | show |
Series | [1/3] Refactor copying decl section names | expand |
On 11/12/19 11:28 PM, Strager Neds wrote: > symtab_node::set_section_for_node manages the reference count of > section_hash_entry objects. I plan to add another function which needs > to manage the reference count of these objects. To avoid duplicating > code, factor the existing logic into reusable functions. > > This patch should not change behavior. > > Testing: Bootstrap on x86_64-linux-gnu with --disable-multilib > --enable-checking=release --enable-languages=c,c++. Observe no change in > test results. > > 2019-11-12 Matthew Glazar <strager.nds@gmail.com> > > * gcc/symtab.c (symtab_node::set_section_for_node): Extract reference > counting logic into ... > (retain_section_hash_entry): ... here (new function) and ... > (release_section_hash_entry): ... here (new function). I fixed some minor formatting problems, added function comments to the factored-out code and re-tested this patch. I'm pushing it to the trunk momentarily. jeff
diff --git a/gcc/symtab.c b/gcc/symtab.c index 84d17c36189..a2aa519e760 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -368,6 +368,30 @@ section_name_hasher::equal (section_hash_entry *n1, const char *name) return n1->name == name || !strcmp (n1->name, name); } +static section_hash_entry * +retain_section_hash_entry (section_hash_entry *entry) +{ + entry->ref_count++; + return entry; +} + +static void +release_section_hash_entry (section_hash_entry *entry) +{ + if (entry) + { + entry->ref_count--; + if (!entry->ref_count) + { + hashval_t hash = htab_hash_string (entry->name); + section_hash_entry **slot = symtab->section_hash->find_slot_with_hash (entry->name, + hash, INSERT); + ggc_free (entry); + symtab->section_hash->clear_slot (slot); + } + } +} + /* Add node into symbol table. This function is not used directly, but via