diff options
author | Tom Tromey <tromey@redhat.com> | 2013-10-15 13:28:57 -0600 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2014-02-26 12:11:17 -0700 |
commit | 2273f0ac95a79ce29ef42025c63f90e82cf907d7 (patch) | |
tree | 11a8d5d14c815bc74dacecdc0374fb082512ab13 /gdb/coff-pe-read.c | |
parent | 77e371c079408e265f1dfd2b0620dd8e76c23371 (diff) | |
download | gdb-2273f0ac95a79ce29ef42025c63f90e82cf907d7.zip gdb-2273f0ac95a79ce29ef42025c63f90e82cf907d7.tar.gz gdb-2273f0ac95a79ce29ef42025c63f90e82cf907d7.tar.bz2 |
change minsyms not to be relocated at read-time
This removes the runtime offsets from minsyms. Instead, these offsets
will now be applied whenever the minsym's address is computed.
This patch redefines MSYMBOL_VALUE_ADDRESS to actually use the offsets
from the given objfile. Then, it updates all the symbol readers,
changing them so that they do not add in the section offset when
creating the symbol.
This change also lets us remove relocation of minsyms from
objfile_relocate1 and also msymbols_sort.
2014-02-26 Tom Tromey <tromey@redhat.com>
* minsyms.c (msymbols_sort): Remove.
* minsyms.h (msymbols_sort): Remove.
* objfiles.c (objfile_relocate1): Don't relocate minsyms.
* symtab.h (MSYMBOL_VALUE_ADDRESS): Use objfile offsets.
* elfread.c (elf_symtab_read): Don't add section offsets.
* xcoffread.c (record_minimal_symbol): Don't add section offset
to minimal symbol address.
* somread.c (text_offset, data_offset): Remove.
(som_symtab_read): Don't add section offsets to minimal symbol
addresses.
* coff-pe-read.c (add_pe_forwarded_sym, read_pe_exported_syms):
Don't add section offsets to minimal symbols.
* coffread.c (coff_symtab_read): Don't add section offsets
to minimal symbol addresses.
* machoread.c (macho_symtab_add_minsym): Don't add section offset
to minimal symbol addresses.
* mipsread.c (read_alphacoff_dynamic_symtab): Don't add
section offset to minimal symbol addresses.
* mdebugread.c (parse_partial_symbols): Don't add section
offset to minimal symbol addresses.
* dbxread.c (read_dbx_dynamic_symtab): Don't add section
offset to minimal symbol addresses.
Diffstat (limited to 'gdb/coff-pe-read.c')
-rw-r--r-- | gdb/coff-pe-read.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index e1a61b7..dbb57f8 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -204,7 +204,7 @@ add_pe_forwarded_sym (const char *sym_name, const char *forward_dll_name, const char *forward_func_name, int ordinal, const char *dll_name, struct objfile *objfile) { - CORE_ADDR vma; + CORE_ADDR vma, baseaddr; struct bound_minimal_symbol msymbol; enum minimal_symbol_type msymtype; char *qualified_name, *bare_name; @@ -259,11 +259,18 @@ add_pe_forwarded_sym (const char *sym_name, const char *forward_dll_name, qualified_name = xstrprintf ("%s!%s", dll_name, bare_name); - prim_record_minimal_symbol_and_info (qualified_name, vma, msymtype, - section, objfile); + /* Note that this code makes a minimal symbol whose value may point + outside of any section in this objfile. These symbols can't + really be relocated properly, but nevertheless we make a stab at + it, choosing an approach consistent with the history of this + code. */ + baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + + prim_record_minimal_symbol_and_info (qualified_name, vma - baseaddr, + msymtype, section, objfile); /* Enter the plain name as well, which might not be unique. */ - prim_record_minimal_symbol_and_info (bare_name, vma, msymtype, + prim_record_minimal_symbol_and_info (bare_name, vma - baseaddr, msymtype, section, objfile); xfree (qualified_name); xfree (bare_name); @@ -528,15 +535,6 @@ read_pe_exported_syms (struct objfile *objfile) bfd_map_over_sections (dll, get_section_vmas, &pe_sections_info); - /* Adjust the vma_offsets in case this PE got relocated. This - assumes that *all* sections share the same relocation offset - as the text section. */ - for (i = 0; i < otherix; i++) - { - section_data[i].vma_offset - += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); - } - /* Truncate name at first dot. Should maybe also convert to all lower case for convenience on Windows. */ read_pe_truncate_name (dll_name); |