Add code for (re)building the minimal symbol hash tables.
This commit is contained in:
parent
679ebd0f9c
commit
afbb8d7a46
2 changed files with 46 additions and 11 deletions
|
@ -1,5 +1,10 @@
|
|||
2000-08-04 Kevin Buettner <kevinb@redhat.com>
|
||||
|
||||
* minsyms.c (build_minimal_symbol_hash_tables): New function.
|
||||
(compact_minimal_symbols): Don't construct hash tables here.
|
||||
(install_minimal_symbols): Instead, construct them here.
|
||||
(msymbols_sort): And rebuild them here too.
|
||||
|
||||
* dwarf2read.c (struct comp_unit_head): Add fields offset_size
|
||||
and initial_length_size. Change type of ``length'' field to long.
|
||||
(read_initial_length, read_offset): New functions.
|
||||
|
|
|
@ -801,11 +801,7 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
|
|||
copyfrom++;
|
||||
}
|
||||
else
|
||||
{
|
||||
*copyto++ = *copyfrom++;
|
||||
|
||||
add_minsym_to_hash_table (copyto - 1, objfile->msymbol_hash);
|
||||
}
|
||||
*copyto++ = *copyfrom++;
|
||||
}
|
||||
*copyto++ = *copyfrom++;
|
||||
mcount = copyto - msymbol;
|
||||
|
@ -813,6 +809,38 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
|
|||
return (mcount);
|
||||
}
|
||||
|
||||
/* 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. */
|
||||
|
||||
static void
|
||||
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->msymbol_hash[i] = 0;
|
||||
objfile->msymbol_demangled_hash[i] = 0;
|
||||
}
|
||||
|
||||
/* Now, (re)insert the actual entries. */
|
||||
for (i = objfile->minimal_symbol_count, msym = objfile->msymbols;
|
||||
i > 0;
|
||||
i--, msym++)
|
||||
{
|
||||
msym->hash_next = 0;
|
||||
add_minsym_to_hash_table (msym, objfile->msymbol_hash);
|
||||
|
||||
msym->demangled_hash_next = 0;
|
||||
if (SYMBOL_DEMANGLED_NAME (msym) != NULL)
|
||||
add_minsym_to_demangled_hash_table (msym,
|
||||
objfile->msymbol_demangled_hash);
|
||||
}
|
||||
}
|
||||
|
||||
/* Add the minimal symbols in the existing bunches to the objfile's official
|
||||
minimal symbol table. In most cases there is no minimal symbol table yet
|
||||
for this objfile, and the existing bunches are used to create one. Once
|
||||
|
@ -928,12 +956,13 @@ install_minimal_symbols (struct objfile *objfile)
|
|||
ones and attempting to cache their C++ demangled names. */
|
||||
|
||||
for (; mcount-- > 0; msymbols++)
|
||||
{
|
||||
SYMBOL_INIT_DEMANGLED_NAME (msymbols, &objfile->symbol_obstack);
|
||||
if (SYMBOL_DEMANGLED_NAME (msymbols) != NULL)
|
||||
add_minsym_to_demangled_hash_table (msymbols,
|
||||
objfile->msymbol_demangled_hash);
|
||||
}
|
||||
SYMBOL_INIT_DEMANGLED_NAME (msymbols, &objfile->symbol_obstack);
|
||||
|
||||
/* Now build the hash tables; we can't do this incrementally
|
||||
at an earlier point since we weren't finished with the obstack
|
||||
yet. (And if the msymbol obstack gets moved, all the internal
|
||||
pointers to other msymbols need to be adjusted.) */
|
||||
build_minimal_symbol_hash_tables (objfile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -944,6 +973,7 @@ msymbols_sort (struct objfile *objfile)
|
|||
{
|
||||
qsort (objfile->msymbols, objfile->minimal_symbol_count,
|
||||
sizeof (struct minimal_symbol), compare_minimal_symbols);
|
||||
build_minimal_symbol_hash_tables (objfile);
|
||||
}
|
||||
|
||||
/* Check if PC is in a shared library trampoline code stub.
|
||||
|
|
Loading…
Reference in a new issue