diff options
author | Christian Biesinger <cbiesinger@google.com> | 2019-10-29 17:14:48 -0500 |
---|---|---|
committer | Christian Biesinger <cbiesinger@google.com> | 2019-10-30 11:05:02 -0500 |
commit | 808590ec5af20db08005885559fe29ebe7128b48 (patch) | |
tree | 175872d3aceb74a561e19c0a6720371964d8d17c /gdb/minsyms.c | |
parent | 1820262bc909121a408e030195789a70513b9139 (diff) | |
download | gdb-808590ec5af20db08005885559fe29ebe7128b48.zip gdb-808590ec5af20db08005885559fe29ebe7128b48.tar.gz gdb-808590ec5af20db08005885559fe29ebe7128b48.tar.bz2 |
Only clear the minsym array when necessary
The array starts out initialized to zero:
minimal_symbol *msymbol_hash[MINIMAL_SYMBOL_HASH_SIZE] {};
So we only need to explicitly clear it if there were previous minsyms
added to it. This patch does that.
gdb/ChangeLog:
2019-10-30 Christian Biesinger <cbiesinger@google.com>
* minsyms.c (clear_minimal_symbol_hash_tables): New function.
(build_minimal_symbol_hash_tables): Code to clear the table moved
to clear_minimal_symbol_hash_tables.
(minimal_symbol_reader::install): Call clear_minimal_symbol_hash_tables
when needed.
Change-Id: I7da994fe6747f67714e7efe9fdbb0dbc4d6ea532
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r-- | gdb/minsyms.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c index db3e546..78cb15b 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -1238,6 +1238,16 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount, return (mcount); } +static void +clear_minimal_symbol_hash_tables (struct objfile *objfile) +{ + for (size_t i = 0; i < MINIMAL_SYMBOL_HASH_SIZE; i++) + { + objfile->per_bfd->msymbol_hash[i] = 0; + objfile->per_bfd->msymbol_demangled_hash[i] = 0; + } +} + /* Build (or rebuild) the minimal symbol hash tables. This is necessary after compacting or sorting the table since the entries move around thus causing the internal minimal_symbol pointers to become jumbled. */ @@ -1248,14 +1258,7 @@ build_minimal_symbol_hash_tables (struct objfile *objfile) int i; struct minimal_symbol *msym; - /* Clear the hash tables. */ - for (i = 0; i < MINIMAL_SYMBOL_HASH_SIZE; i++) - { - objfile->per_bfd->msymbol_hash[i] = 0; - objfile->per_bfd->msymbol_demangled_hash[i] = 0; - } - - /* Now, (re)insert the actual entries. */ + /* (Re)insert the actual entries. */ for ((i = objfile->per_bfd->minimal_symbol_count, msym = objfile->per_bfd->msymbols.get ()); i > 0; @@ -1345,6 +1348,9 @@ minimal_symbol_reader::install () The strings themselves are also located in the storage_obstack of this objfile. */ + if (m_objfile->per_bfd->minimal_symbol_count != 0) + clear_minimal_symbol_hash_tables (m_objfile); + m_objfile->per_bfd->minimal_symbol_count = mcount; m_objfile->per_bfd->msymbols = std::move (msym_holder); |