diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d988b86a2e..2df92f4516 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-08-15 Tom Tromey + + * dwarf2read.c (dwarf_decode_macro_bytes) + : Use pointer to included data + as hash key. + 2012-08-14 Mike Frysinger * infcmd.c (_initialize_infcmd): Update help text for the signal, diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 04c6ed05e2..099b67a00f 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 = new_mac_ptr; - *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; - } - - 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;