From 31ffec4870b73c7eadab3f98bc777d5c0fb2dd6a Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Thu, 2 Nov 2006 21:34:07 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 8 ++++++++ gdb/dwarf2read.c | 28 +++++++++++++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 322499f923c..a3a78584700 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2006-11-02 Daniel Jacobowitz + + * 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 * arm-tdep.c (arm_gdbarch_init): Handle EF_ARM_EABI_VER5. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index d026572c9ff..4254f168158 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); -- 2.30.2