diff options
author | Daniel Jacobowitz <dan@debian.org> | 2004-02-21 21:27:48 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2004-02-21 21:27:48 +0000 |
commit | d00932c0696de33bcb070a0a6d2da4f3456d340d (patch) | |
tree | f3c60ac6a1fea4ef14fae7b9daad7040dc64f547 | |
parent | d283432b0b6f0684c56dafc543a90eff44f26422 (diff) | |
download | gdb-d00932c0696de33bcb070a0a6d2da4f3456d340d.tar.gz |
* dwarf2read.c (peek_die_abbrev): Add prototype.
(load_partial_die): Take an abbrev and its uleb128 length as
arguments.
(dwarf2_build_psymtabs_hard): Adjust call to load_partial_die.
(load_partial_dies): Likewise.
-rw-r--r-- | gdb/ChangeLog.intercu | 8 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 36 |
2 files changed, 27 insertions, 17 deletions
diff --git a/gdb/ChangeLog.intercu b/gdb/ChangeLog.intercu index 664822d1b1a..a6e53fedd96 100644 --- a/gdb/ChangeLog.intercu +++ b/gdb/ChangeLog.intercu @@ -1,5 +1,13 @@ 2004-02-21 Daniel Jacobowitz <drow@mvista.com> + * dwarf2read.c (peek_die_abbrev): Add prototype. + (load_partial_die): Take an abbrev and its uleb128 length as + arguments. + (dwarf2_build_psymtabs_hard): Adjust call to load_partial_die. + (load_partial_dies): Likewise. + +2004-02-21 Daniel Jacobowitz <drow@mvista.com> + * dwarf2read.c (splay_tree_obstack_allocate): Disable. (add_partial_symbol): Fix a warning. (fixup_partial_die): Recurse if necessary. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index d1c01ef8b04..d74c59e9ef8 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -685,12 +685,15 @@ static void dwarf2_read_abbrevs (bfd *abfd, struct dwarf2_cu *cu); static void dwarf2_empty_abbrev_table (void *); +static struct abbrev_info *peek_die_abbrev (char *, int *, struct dwarf2_cu *); + static struct abbrev_info *dwarf2_lookup_abbrev (unsigned int, struct dwarf2_cu *); static void load_partial_dies (bfd *, char *, struct dwarf2_cu *); static char *load_partial_die (struct partial_die_info *, + struct abbrev_info *abbrev, unsigned int, bfd *, char *, struct dwarf2_cu *); static struct partial_die_info *find_partial_die (unsigned long, @@ -1267,6 +1270,9 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline) { struct cleanup *back_to_inner; struct dwarf2_cu cu; + struct abbrev_info *abbrev; + unsigned int bytes_read; + beg_of_comp_unit = info_ptr; cu.objfile = objfile; @@ -1308,8 +1314,9 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline) back_to_inner = make_cleanup (dwarf2_empty_abbrev_table, &cu); /* Read the compilation unit die */ - info_ptr = load_partial_die (&comp_unit_die, abfd, info_ptr, - &cu); + abbrev = peek_die_abbrev (info_ptr, &bytes_read, &cu); + info_ptr = load_partial_die (&comp_unit_die, abbrev, bytes_read, + abfd, info_ptr, &cu); /* Set the language we're debugging */ set_cu_language (comp_unit_die.language, &cu); @@ -4578,7 +4585,8 @@ load_partial_dies (bfd *abfd, char *info_ptr, struct dwarf2_cu *cu) } // fprintf_unfiltered (gdb_stderr, "Loading DIE %x\n", info_ptr - dwarf_info_buffer); - info_ptr = load_partial_die (part_die, abfd, info_ptr, cu); + info_ptr = load_partial_die (part_die, abbrev, bytes_read, + abfd, info_ptr, cu); /* We'll save this DIE so link it in. */ part_die->die_parent = parent_die; @@ -4628,11 +4636,12 @@ load_partial_dies (bfd *abfd, char *info_ptr, struct dwarf2_cu *cu) /* Read a minimal amount of information into the minimal die structure. */ static char * -load_partial_die (struct partial_die_info *part_die, bfd *abfd, +load_partial_die (struct partial_die_info *part_die, + struct abbrev_info *abbrev, + unsigned int abbrev_len, bfd *abfd, char *info_ptr, struct dwarf2_cu *cu) { - unsigned int abbrev_number, bytes_read, i; - struct abbrev_info *abbrev; + unsigned int bytes_read, i; struct attribute attr; int has_low_pc_attr = 0; int has_high_pc_attr = 0; @@ -4641,21 +4650,14 @@ load_partial_die (struct partial_die_info *part_die, bfd *abfd, part_die->offset = info_ptr - dwarf_info_buffer; - abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); - info_ptr += bytes_read; - if (!abbrev_number) - return info_ptr; + info_ptr += abbrev_len; - abbrev = dwarf2_lookup_abbrev (abbrev_number, cu); - if (!abbrev) - { - error ("Dwarf Error: Could not find abbrev number %d [in module %s]", abbrev_number, - bfd_get_filename (abfd)); - } + if (abbrev == NULL) + return info_ptr; part_die->tag = abbrev->tag; part_die->has_children = abbrev->has_children; - part_die->abbrev = abbrev_number; + part_die->abbrev = abbrev->number; for (i = 0; i < abbrev->num_attrs; ++i) { |