diff options
author | Daniel Jacobowitz <dan@debian.org> | 2006-11-02 21:34:07 +0000 |
---|---|---|
committer | Daniel Jacobowitz <dan@debian.org> | 2006-11-02 21:34:07 +0000 |
commit | 6e9f695bc2b959bbc8c6e768688d37c65349dc93 (patch) | |
tree | fee1a64d7d2ba25d4eb775c0bded6cb1a083d249 /gdb/dwarf2read.c | |
parent | 889e1181fe4b019fe3a4b127249c8f724102ba32 (diff) | |
download | gdb-6e9f695bc2b959bbc8c6e768688d37c65349dc93.tar.gz |
* 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/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 28 |
1 files changed, 19 insertions, 9 deletions
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); |