diff options
author | Tom Tromey <tromey@redhat.com> | 2012-08-15 14:18:18 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-08-15 14:18:18 +0000 |
commit | a036ba48efc7145d0cd2de136be0443b65f672d2 (patch) | |
tree | 046b56d3a86871bb8cb95d4ff3b6fe3d2030657c | |
parent | b1759dce03dd4d47a5ae801ad981ab682cd99147 (diff) | |
download | gdb-a036ba48efc7145d0cd2de136be0443b65f672d2.zip gdb-a036ba48efc7145d0cd2de136be0443b65f672d2.tar.gz gdb-a036ba48efc7145d0cd2de136be0443b65f672d2.tar.bz2 |
* dwarf2read.c (dwarf_decode_macro_bytes)
<DW_MACRO_GNU_transparent_include>: Use pointer to included data
as hash key.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 49 |
2 files changed, 31 insertions, 24 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d988b86..2df92f4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-08-15 Tom Tromey <tromey@redhat.com> + + * dwarf2read.c (dwarf_decode_macro_bytes) + <DW_MACRO_GNU_transparent_include>: Use pointer to included data + as hash key. + 2012-08-14 Mike Frysinger <vapier@gentoo.org> * infcmd.c (_initialize_infcmd): Update help text for the signal, diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 04c6ed0..099b67a 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -17658,11 +17658,32 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end, { LONGEST offset; void **slot; + bfd *include_bfd = abfd; + struct dwarf2_section_info *include_section = section; + struct dwarf2_section_info alt_section; + gdb_byte *include_mac_end = mac_end; + int is_dwz = section_is_dwz; + gdb_byte *new_mac_ptr; offset = read_offset_1 (abfd, mac_ptr, offset_size); mac_ptr += offset_size; - slot = htab_find_slot (include_hash, mac_ptr, INSERT); + if (macinfo_type == DW_MACRO_GNU_transparent_include_alt) + { + struct dwz_file *dwz = dwarf2_get_dwz_file (); + + dwarf2_read_section (dwarf2_per_objfile->objfile, + &dwz->macro); + + include_bfd = dwz->macro.asection->owner; + include_section = &dwz->macro; + include_mac_end = dwz->macro.buffer + dwz->macro.size; + is_dwz = 1; + } + + new_mac_ptr = include_section->buffer + offset; + slot = htab_find_slot (include_hash, new_mac_ptr, INSERT); + if (*slot != NULL) { /* This has actually happened; see @@ -17673,35 +17694,15 @@ dwarf_decode_macro_bytes (bfd *abfd, gdb_byte *mac_ptr, gdb_byte *mac_end, } else { - bfd *include_bfd = abfd; - struct dwarf2_section_info *include_section = section; - struct dwarf2_section_info alt_section; - gdb_byte *include_mac_end = mac_end; - int is_dwz = section_is_dwz; - - *slot = mac_ptr; - - if (macinfo_type == DW_MACRO_GNU_transparent_include_alt) - { - struct dwz_file *dwz = dwarf2_get_dwz_file (); - - dwarf2_read_section (dwarf2_per_objfile->objfile, - &dwz->macro); - - include_bfd = dwz->macro.asection->owner; - include_section = &dwz->macro; - include_mac_end = dwz->macro.buffer + dwz->macro.size; - is_dwz = 1; - } + *slot = new_mac_ptr; - dwarf_decode_macro_bytes (include_bfd, - include_section->buffer + offset, + dwarf_decode_macro_bytes (include_bfd, new_mac_ptr, include_mac_end, current_file, lh, comp_dir, section, section_is_gnu, is_dwz, offset_size, objfile, include_hash); - htab_remove_elt (include_hash, mac_ptr); + htab_remove_elt (include_hash, new_mac_ptr); } } break; |