2004-02-22 Daniel Jacobowitz * dwarf2read.c (dwarf2_attr_with_cu): New function, renamed from dwarf2_attr. Also return the compilation unit associated with the attribute if we have followed a reference. Complain if we return a reference attribute and the caller does not want the target compilation unit. (dwarf2_attr): Call dwarf2_attr_with_cu. (die_specification, dwarf2_extension): Also return a compilation unit. (follow_die_ref): Take attribute and compilation unit arguments. Call dwarf2_get_ref_die_offset. Also return the target compilation unit. (read_func_scope, read_structure_scope): Update calls to die_specification. Use the result. (read_namespace): Update call to dwarf2_extension. (namespace_name): Likewise. Use the result. (new_symbol): Call dwarf2_attr_with_cu to check for DIE type. (die_type): Likewise. Update call to follow_die_ref. Use the results. (dwarf2_add_member_fn, read_structure_scope): Likewise for DW_AT_containing_type. (die_containing_type): Likewise. (die_is_declaration): Likewise for DW_AT_specification. 2004-02-22 Daniel Jacobowitz * dwarf2read.c (MAX_CACHE_AGE): Define. (struct dwarf2_cu): Add last_used counter. (free_comp_units_worker): New function, based on clear_per_cu_pointer. Support aging. (clear_per_cu_pointer): Use it. (free_cached_comp_units, free_one_cached_comp_unit): New functions. (dwarf2_build_psymtabs_hard): Keep read_in_chain across iterations. Free all cached comp units after building psymtabs. Free any cached copy of a comp unit before building a psymtab for it. (find_partial_die): Clear the last_used counter. 2004-02-22 Daniel Jacobowitz * dwarf2read.c (partial_die_full_name): Always return NULL or malloc'd memory. Don't try to free real_parent->full_name. 2004-02-22 Daniel Jacobowitz * dwarf2read.c (struct dwarf2_cu): Add read_in_chain and per_cu. (dwarf2_cu_tree): New variable. (struct dwarf2_per_cu_data): New type. (struct partial_die_info): Remove abbrev. Make tag a bitfield. Add full_name_set. (load_partial_dies): Take a flag indicating whether we are building a psymtab. (find_partial_die_in_comp_unit): Rename frome find_partial_die. (find_partial_die): New function to support inter-CU references. Return the CU of the found DIE. (splay_tree_obstack_allocate): Remove #if 0. (partial_read_comp_unit_head): New function, broken out from dwarf2_build_psymtabs_hard. (dwarf2_build_psymtabs_hard): Remove unused variable abbrev_ptr. Add the current CU to the splay tree if the tree already exists. Update call to load_partial_dies. (partial_die_full_name): Rewrite to support inter-CU references. (add_partial_symbol): Check and set pdi->full_name_set. (fixup_partial_die): Support inter-CU references. (dwarf2_find_containing_comp_unit, clear_per_cu_pointer) (load_comp_unit, create_comp_unit_tree, _initialize_dwarf2_read): New functions. 2004-02-22 Daniel Jacobowitz * dwarf2read.c (partial_die_full_name): Remove allocate argument, always use concat. (add_partial_symbol): Copy the name from the psymbol. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (struct partial_die_info): Add full_name. (scan_partial_symbols, add_partial_symbol, add_partial_structure) (add_partial_enumeration): Change namespace argument to have_namespace_info flag. Move DW_TAG_namespace handling to add_partial_symbol. Update comments. (pdi_needs_namespace): Remove namespace argument. Handle DW_TAG_namespace. (partial_determine_prefix, partial_determine_prefix_aux): Remove. (dwarf2_build_psymtabs_hard): Update call to scan_partial_symbols. (partial_die_full_name): New function. (load_partial_die): Correct comment formatting. Don't handle DW_TAG_enumeration_type. (load_partial_dies): Correct comment formatting. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (load_partial_dies): Check for NULL name before adding types. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (maybe_specification_partial_die): Removed. (is_type_tag_for_partial): Renamed from is_type_tag. Remove some tags. (load_partial_dies): Call is_type_tag_for_partial. Handle simple DIEs early. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (scan_partial_symbols): Don't return anything. Take a DIE argument instead of an info_ptr. (add_partial_namespace, add_partial_structure) add_partial_enumeration): Likewise. (load_partial_dies): Return the first interesting DIE. Do not add DIEs to the hash table if we aren't going to look them up. (dwarf2_build_psymtabs_hard): Adjust call to scan_partial_symbols. 2004-02-21 Daniel Jacobowitz * 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 * dwarf2read.c (splay_tree_obstack_allocate): Disable. (add_partial_symbol): Fix a warning. (fixup_partial_die): Recurse if necessary. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (partial_determine_prefix) (partial_determine_prefix_aux): New functions. (add_partial_symbol): Call partial_determine_prefix. (add_partial_structure): Remove workaround for DW_AT_specification. (load_partial_die): Save DW_AT_extension. (determine_prefix_aux): Reuse the return value of dwarf2_name. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (load_partial_dies): Follow unions. Follow aggregates for all non-C languages. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (dwarf2_build_psymtabs_hard): Estimate the initial size of the hash table. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (struct dwarf2_cu): Add abbrev_obstack. (struct abbrev_info): Shorten two int flags. (dwarf_alloc_abbrev): Take a CU argument. (dwarf2_build_psymtabs_hard): Call dwarf2_empty_abbrev_table each time through the loop. Update cleanup argument. (psymtab_to_symtab_1): Update cleanup argument. (dwarf2_read_abbrevs, dwarf2_alloc_abbrev): Allocate on the abbrev_obstack. (dwarf2_empty_abbrev_table): Just call obstack_free. 2004-02-21 Daniel Jacobowitz * Makefile.in (hashtab_h): Add. (dwarf2read.o): Update dependencies. * dwarf2read.c: Include "hashtab.h". (struct dwarf2_cu): Change partial_dies to an htab_t. (hash_obstack_allocate, partial_die_hash, partial_die_eq): New functions. (dwarf2_build_psymtabs_hard): Call htab_create_alloc_ex. (load_partial_dies): Call htab_find_slot_with_hash. (find_partial_die): Call htab_find_with_hash. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (struct partial_die_info): Use bitfields and rearrange members for packing. Replace spec_attr with spec_offset. (load_partial_dies): Only follow structures for C++. (load_partial_die): Use memset. Save specification attributes only as offsets. (fixup_partial_die): Adjust to use spec_offset. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (struct dwarf2_cu): Add partial_die_obstack. (splay_tree_obstack_allocate, splay_tree_obstack_deallocate): New functions. (dwarf2_build_psymtabs_hard): Use splay_tree_new_with_allocator and obstack_free to manage partial_dies. (load_partial_dies): Allocate partial DIEs on the obstack. Don't initialize the splay tree here. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (skip_leb128, peek_die_abbrev, skip_one_die) (skip_children): New functions. (locate_pdi_sibling): Call skip_children. (load_partial_dies): Use peek_die_abbrev and skip_one_die. 2004-02-21 Daniel Jacobowitz * dwarf2read.c (find_partial_die, fixup_partial_die): New functions, broken out from read_partial_die. (read_partial_die): Remove function. (dwarf2_build_psymtabs_hard): Update comments. (scan_partial_symbols): Use the new functions. Reduce copying of partial DIEs. 2004-02-21 Daniel Jacobowitz * dwarf2read.c: Include "splay-tree.h". (struct dwarf2_cu): Add splay tree for partial DIEs. (struct partial_die_info): Move after struct attribute. Add has_specification, spec_attr, die_parent, die_child, and die_sibling fields. (load_partial_dies): New function. (load_partial_die): New function, broken out from read_partial_die. Correct setting of part_die->offset. Save any specification attributes for later. (read_partial_die): Look up DIEs in the splay tree. (dwarf2_build_psymtabs_hard): Initialize partial_dies. Call load_partial_die to read in the compilation unit DIE. Call load_partial_dies. Free the splay tree after use. (scan_partial_symbols): Follow the die_sibling chain. (add_partial_structure): Use die_child and die_sibling instead of read_partial_die and locate_pdi_sibling. (add_partial_enumeration): Likewise. (locate_pdi_sibling): Use load_partial_die instead of read_partial_die. (is_type_tag): New function. * Makefile.in (dwarf2read.o): Update dependencies.