* dwarf2read.c (dwarf_decode_macro_bytes)
authorTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 14:18:18 +0000 (14:18 +0000)
committerTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 14:18:18 +0000 (14:18 +0000)
<DW_MACRO_GNU_transparent_include>: Use pointer to included data
as hash key.

gdb/ChangeLog
gdb/dwarf2read.c

index d988b86..2df92f4 100644 (file)
@@ -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,
index 04c6ed0..099b67a 100644 (file)
@@ -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;