aboutsummaryrefslogtreecommitdiff
path: root/gdb/symmisc.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-10-15 11:37:19 -0600
committerTom Tromey <tromey@redhat.com>2014-02-26 12:11:17 -0700
commit34643a32c6b17041b7ebc13ac3077f6eaec7ec80 (patch)
tree5febf13c3c8c850bc9a8303ab20ab871981023e6 /gdb/symmisc.c
parent2273f0ac95a79ce29ef42025c63f90e82cf907d7 (diff)
move minimal symbols to per-bfd
Now that minimal symbols are independent of the program space, we can move them to the per-BFD object. This lets us save memory in the multi-inferior case; and, once the symbol readers are updated, time. The other prerequisite for this move is that all the objects referred to by the minimal symbols have a lifetime at least as long as the per-BFD object. I think this is satisfied partially by this patch (moving the copied names there) and partially by earlier patches moving the demangled name hash. This patch contains a bit of logic to avoid creating new minimal symbols if they have already been read for a given BFD. This allows us to avoid trying to update all the symbol readers for this condition. At first glance this may seem like a hack, but some symbol readers mix psym and minsym reading, and would require logic just like this regardless -- and it is simpler and less error-prone to just do the work in a central spot. 2014-02-26 Tom Tromey <tromey@redhat.com> * minsyms.c (lookup_minimal_symbol, iterate_over_minimal_symbols) (lookup_minimal_symbol_text, lookup_minimal_symbol_by_pc_name) (lookup_minimal_symbol_solib_trampoline) (lookup_minimal_symbol_by_pc_section_1) (lookup_minimal_symbol_and_objfile): Update. (prim_record_minimal_symbol_full): Use the per-BFD obstack. Don't allocate a minimal symbol if minsyms have already been read. (build_minimal_symbol_hash_tables): Update. (install_minimal_symbols): Do nothing if minsyms already read. Use the per-BFD obstack. (terminate_minimal_symbol_table): Use the per-BFD obstack. * objfiles.c (allocate_objfile): Call terminate_minimal_symbol_table later. (have_minimal_symbols): Update. * objfiles.h (struct objfile_per_bfd_storage) <msymbols, minimal_symbol_count, msymbol_hash, msymbol_demangled_hash>: Move from struct objfile. <minsyms_read>: New field. (struct objfile) <msymbols, minimal_symbol_count, msymbol_hash, msymbol_demangled_hash>: Move. (ALL_OBJFILE_MSYMBOLS): Update. * symfile.c (read_symbols): Set minsyms_read. (reread_symbols): Update. * symmisc.c (dump_objfile, dump_msymbols): Update.
Diffstat (limited to 'gdb/symmisc.c')
-rw-r--r--gdb/symmisc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 0fc78d540d..eb15ecc1bb 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -168,7 +168,7 @@ dump_objfile (struct objfile *objfile)
printf_filtered (", bfd at ");
gdb_print_host_address (objfile->obfd, gdb_stdout);
printf_filtered (", %d minsyms\n\n",
- objfile->minimal_symbol_count);
+ objfile->per_bfd->minimal_symbol_count);
if (objfile->sf)
objfile->sf->qf->dump (objfile);
@@ -204,7 +204,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
char ms_type;
fprintf_filtered (outfile, "\nObject file %s:\n\n", objfile_name (objfile));
- if (objfile->minimal_symbol_count == 0)
+ if (objfile->per_bfd->minimal_symbol_count == 0)
{
fprintf_filtered (outfile, "No minimal symbols found.\n");
return;
@@ -274,10 +274,10 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
fputs_filtered ("\n", outfile);
index++;
}
- if (objfile->minimal_symbol_count != index)
+ if (objfile->per_bfd->minimal_symbol_count != index)
{
warning (_("internal error: minimal symbol count %d != %d"),
- objfile->minimal_symbol_count, index);
+ objfile->per_bfd->minimal_symbol_count, index);
}
fprintf_filtered (outfile, "\n");
}