diff options
author | Daniel Jacobowitz <drow@false.org> | 2006-11-02 21:34:07 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2006-11-02 21:34:07 +0000 |
commit | 31ffec4870b73c7eadab3f98bc777d5c0fb2dd6a (patch) | |
tree | 5660ee1b239e200179a2ca2cf89d0670feb7ff21 /gdb | |
parent | 625b50039a97f9ee531f7e6b0d4eb5c6fade0595 (diff) | |
download | binutils-31ffec4870b73c7eadab3f98bc777d5c0fb2dd6a.zip binutils-31ffec4870b73c7eadab3f98bc777d5c0fb2dd6a.tar.gz binutils-31ffec4870b73c7eadab3f98bc777d5c0fb2dd6a.tar.bz2 |
* dwarf2read.c (struct dwarf2_per_cu_data): Update comment.
(load_full_comp_unit): Take OBJFILE argument and use it.
(dwarf2_build_psymtabs_hard): Skip partial units.
(process_queue): Pass OBJFILE to load_full_comp_unit. Check
type_hash for read in CUs. Test psymtab for NULL.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 28 |
2 files changed, 27 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 322499f..a3a7858 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2006-11-02 Daniel Jacobowitz <dan@codesourcery.com> + * dwarf2read.c (struct dwarf2_per_cu_data): Update comment. + (load_full_comp_unit): Take OBJFILE argument and use it. + (dwarf2_build_psymtabs_hard): Skip partial units. + (process_queue): Pass OBJFILE to load_full_comp_unit. Check + type_hash for read in CUs. Test psymtab for NULL. + +2006-11-02 Daniel Jacobowitz <dan@codesourcery.com> + * arm-tdep.c (arm_gdbarch_init): Handle EF_ARM_EABI_VER5. 2006-10-31 Vladimir Prus <vladimir@codesourcery.com> diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index d026572..4254f16 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -389,7 +389,9 @@ struct dwarf2_per_cu_data it. */ htab_t type_hash; - /* The partial symbol table associated with this compilation unit. */ + /* The partial symbol table associated with this compilation unit, + or NULL for partial units (which do not have an associated + symtab). */ struct partial_symtab *psymtab; }; @@ -1066,7 +1068,8 @@ static void reset_die_and_siblings_types (struct die_info *, static void create_all_comp_units (struct objfile *); -static struct dwarf2_cu *load_full_comp_unit (struct dwarf2_per_cu_data *); +static struct dwarf2_cu *load_full_comp_unit (struct dwarf2_per_cu_data *, + struct objfile *); static void process_full_comp_unit (struct dwarf2_per_cu_data *); @@ -1470,6 +1473,14 @@ dwarf2_build_psymtabs_hard (struct objfile *objfile, int mainline) info_ptr = read_partial_die (&comp_unit_die, abbrev, bytes_read, abfd, info_ptr, &cu); + if (comp_unit_die.tag == DW_TAG_partial_unit) + { + info_ptr = (beg_of_comp_unit + cu.header.length + + cu.header.initial_length_size); + do_cleanups (back_to_inner); + continue; + } + /* Set the language we're debugging */ set_cu_language (comp_unit_die.language, &cu); @@ -2386,14 +2397,14 @@ process_queue (struct objfile *objfile) { /* Read in this compilation unit. This may add new items to the end of the queue. */ - load_full_comp_unit (item->per_cu); + load_full_comp_unit (item->per_cu, objfile); item->per_cu->cu->read_in_chain = dwarf2_per_objfile->read_in_chain; dwarf2_per_objfile->read_in_chain = item->per_cu; /* If this compilation unit has already had full symbols created, reset the TYPE fields in each DIE. */ - if (item->per_cu->psymtab->readin) + if (item->per_cu->type_hash) reset_die_and_siblings_types (item->per_cu->cu->dies, item->per_cu->cu); } @@ -2402,7 +2413,7 @@ process_queue (struct objfile *objfile) them, one at a time, removing from the queue as we finish. */ for (item = dwarf2_queue; item != NULL; dwarf2_queue = item = next_item) { - if (!item->per_cu->psymtab->readin) + if (item->per_cu->psymtab && !item->per_cu->psymtab->readin) process_full_comp_unit (item->per_cu); item->per_cu->queued = 0; @@ -2495,10 +2506,9 @@ psymtab_to_symtab_1 (struct partial_symtab *pst) /* Load the DIEs associated with PST and PER_CU into memory. */ static struct dwarf2_cu * -load_full_comp_unit (struct dwarf2_per_cu_data *per_cu) +load_full_comp_unit (struct dwarf2_per_cu_data *per_cu, struct objfile *objfile) { - struct partial_symtab *pst = per_cu->psymtab; - bfd *abfd = pst->objfile->obfd; + bfd *abfd = objfile->obfd; struct dwarf2_cu *cu; unsigned long offset; gdb_byte *info_ptr; @@ -2517,7 +2527,7 @@ load_full_comp_unit (struct dwarf2_per_cu_data *per_cu) /* If an error occurs while loading, release our storage. */ free_cu_cleanup = make_cleanup (free_one_comp_unit, cu); - cu->objfile = pst->objfile; + cu->objfile = objfile; /* read in the comp_unit header */ info_ptr = read_comp_unit_head (&cu->header, info_ptr, abfd); |