aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2012-08-15 14:18:18 +0000
committerTom Tromey <tromey@redhat.com>2012-08-15 14:18:18 +0000
commita036ba48efc7145d0cd2de136be0443b65f672d2 (patch)
tree046b56d3a86871bb8cb95d4ff3b6fe3d2030657c
parentb1759dce03dd4d47a5ae801ad981ab682cd99147 (diff)
downloadgdb-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/ChangeLog6
-rw-r--r--gdb/dwarf2read.c49
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;