summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2013-04-03 19:45:00 +0000
committerDoug Evans <dje@google.com>2013-04-03 19:45:00 +0000
commitbf6af49608b070238a23cdaf5c2b1b4ab639559b (patch)
treec9e99d9b7bef754c433d180e3851fa055d8c97dc
parent0ac5b59e255a649b1a42df984ae77c4d51771371 (diff)
downloadbinutils-gdb-bf6af49608b070238a23cdaf5c2b1b4ab639559b.tar.gz
* dwarf2read.c (read_die_and_siblings_1): Renamed from
read_die_and_siblings. (read_die_and_siblings): New function. (read_cutu_die_from_dwo): Dump die if requested. (read_die_and_children): Call read_full_die_1 and read_die_and_siblings_1. (read_full_die): Dump die if requested. * dwarf2read.c (read_comp_units_from_section): Add debugging printf.
-rw-r--r--gdb/ChangeLog10
-rw-r--r--gdb/dwarf2read.c78
2 files changed, 77 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index bf8bb98e040..024cd9ddf53 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
2013-04-03 Doug Evans <dje@google.com>
+ * dwarf2read.c (read_die_and_siblings_1): Renamed from
+ read_die_and_siblings.
+ (read_die_and_siblings): New function.
+ (read_cutu_die_from_dwo): Dump die if requested.
+ (read_die_and_children): Call read_full_die_1 and
+ read_die_and_siblings_1.
+ (read_full_die): Dump die if requested.
+
+ * dwarf2read.c (read_comp_units_from_section): Add debugging printf.
+
* dwarf2read.c (struct dwo_file): New member comp_dir.
Rename member name to dwo_name. All uses updated.
(hash_dwo_file): Include comp_dir in computation.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 7498286b168..7eec30a14b6 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1530,10 +1530,9 @@ static CORE_ADDR decode_locdesc (struct dwarf_block *, struct dwarf2_cu *);
static enum dwarf_array_dim_ordering read_array_order (struct die_info *,
struct dwarf2_cu *);
-static struct die_info *read_die_and_children (const struct die_reader_specs *,
- gdb_byte *info_ptr,
- gdb_byte **new_info_ptr,
- struct die_info *parent);
+static struct die_info *read_die_and_siblings_1
+ (const struct die_reader_specs *, gdb_byte *, gdb_byte **,
+ struct die_info *);
static struct die_info *read_die_and_siblings (const struct die_reader_specs *,
gdb_byte *info_ptr,
@@ -4568,6 +4567,16 @@ read_cutu_die_from_dwo (struct dwarf2_per_cu_data *this_cu,
comp_unit_die->attrs[i++] = *comp_dir;
comp_unit_die->num_attrs += num_extra_attrs;
+ if (dwarf2_die_debug)
+ {
+ fprintf_unfiltered (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ bfd_section_name (abfd, section->asection),
+ (unsigned) (begin_info_ptr - section->buffer),
+ bfd_get_filename (abfd));
+ dump_die (comp_unit_die, dwarf2_die_debug);
+ }
+
/* Skip dummy compilation units. */
if (info_ptr >= begin_info_ptr + dwo_unit->length
|| peek_abbrev_code (abfd, info_ptr) == 0)
@@ -5690,6 +5699,10 @@ read_comp_units_from_section (struct objfile *objfile,
gdb_byte *info_ptr;
bfd *abfd = section->asection->owner;
+ if (dwarf2_read_debug)
+ fprintf_unfiltered (gdb_stdlog, "Reading %s for %s\n",
+ section->asection->name, bfd_get_filename (abfd));
+
dwarf2_read_section (objfile, section);
info_ptr = section->buffer;
@@ -13059,7 +13072,7 @@ read_die_and_children (const struct die_reader_specs *reader,
gdb_byte *cur_ptr;
int has_children;
- cur_ptr = read_full_die (reader, &die, info_ptr, &has_children);
+ cur_ptr = read_full_die_1 (reader, &die, info_ptr, &has_children, 0);
if (die == NULL)
{
*new_info_ptr = cur_ptr;
@@ -13068,7 +13081,7 @@ read_die_and_children (const struct die_reader_specs *reader,
store_in_ref_table (die, reader->cu);
if (has_children)
- die->child = read_die_and_siblings (reader, cur_ptr, new_info_ptr, die);
+ die->child = read_die_and_siblings_1 (reader, cur_ptr, new_info_ptr, die);
else
{
die->child = NULL;
@@ -13085,10 +13098,10 @@ read_die_and_children (const struct die_reader_specs *reader,
in read_die_and_children. */
static struct die_info *
-read_die_and_siblings (const struct die_reader_specs *reader,
- gdb_byte *info_ptr,
- gdb_byte **new_info_ptr,
- struct die_info *parent)
+read_die_and_siblings_1 (const struct die_reader_specs *reader,
+ gdb_byte *info_ptr,
+ gdb_byte **new_info_ptr,
+ struct die_info *parent)
{
struct die_info *first_die, *last_sibling;
gdb_byte *cur_ptr;
@@ -13116,6 +13129,34 @@ read_die_and_siblings (const struct die_reader_specs *reader,
}
}
+/* Read a die, all of its descendents, and all of its siblings; set
+ all of the fields of all of the dies correctly. Arguments are as
+ in read_die_and_children.
+ This the main entry point for reading a DIE and all its children. */
+
+static struct die_info *
+read_die_and_siblings (const struct die_reader_specs *reader,
+ gdb_byte *info_ptr,
+ gdb_byte **new_info_ptr,
+ struct die_info *parent)
+{
+ struct die_info *die = read_die_and_siblings_1 (reader, info_ptr,
+ new_info_ptr, parent);
+
+ if (dwarf2_die_debug)
+ {
+ fprintf_unfiltered (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ bfd_section_name (reader->abfd,
+ reader->die_section->asection),
+ (unsigned) (info_ptr - reader->die_section->buffer),
+ bfd_get_filename (reader->abfd));
+ dump_die (die, dwarf2_die_debug);
+ }
+
+ return die;
+}
+
/* Read a die and all its attributes, leave space for NUM_EXTRA_ATTRS
attributes.
The caller is responsible for filling in the extra attributes
@@ -13181,7 +13222,22 @@ read_full_die (const struct die_reader_specs *reader,
struct die_info **diep, gdb_byte *info_ptr,
int *has_children)
{
- return read_full_die_1 (reader, diep, info_ptr, has_children, 0);
+ gdb_byte *result;
+
+ result = read_full_die_1 (reader, diep, info_ptr, has_children, 0);
+
+ if (dwarf2_die_debug)
+ {
+ fprintf_unfiltered (gdb_stdlog,
+ "Read die from %s@0x%x of %s:\n",
+ bfd_section_name (reader->abfd,
+ reader->die_section->asection),
+ (unsigned) (info_ptr - reader->die_section->buffer),
+ bfd_get_filename (reader->abfd));
+ dump_die (*diep, dwarf2_die_debug);
+ }
+
+ return result;
}
/* Abbreviation tables.