From: Doug Evans Date: Mon, 2 Jan 2012 01:23:41 +0000 (+0000) Subject: * dwarf2read.c (dwarf2_compute_name): Simplify objfile references. X-Git-Tag: sid-snapshot-20120201~312 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=bb5ed36303def9c2273257431b1f1f166537683f;p=external%2Fbinutils.git * dwarf2read.c (dwarf2_compute_name): Simplify objfile references. (dwarf2_physname, read_import_statement): Ditto. (read_call_site_scope, dwarf2_record_block_ranges): Ditto. (process_structure_scope read_subroutine_type): Ditto. (read_typedef, load_partial_dies, read_partial_die): Ditto. (find_partial_die, dwarf_decode_lines, lookup_die_type): Ditto. (dwarf2_fetch_die_location_block): Ditto. (dwarf_decode_macros, dwarf2_symbol_mark_computed): Ditto. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e852c40..3ece037 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,14 @@ 2012-01-01 Doug Evans + * dwarf2read.c (dwarf2_compute_name): Simplify objfile references. + (dwarf2_physname, read_import_statement): Ditto. + (read_call_site_scope, dwarf2_record_block_ranges): Ditto. + (process_structure_scope read_subroutine_type): Ditto. + (read_typedef, load_partial_dies, read_partial_die): Ditto. + (find_partial_die, dwarf_decode_lines, lookup_die_type): Ditto. + (dwarf2_fetch_die_location_block): Ditto. + (dwarf_decode_macros, dwarf2_symbol_mark_computed): Ditto. + * dwarf2read.c (read_signatured_type): Delete `objfile' arg. All callers updated. (load_full_comp_unit, queue_comp_unit, process_queue): Ditto. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index da5762c..8072859 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -5078,6 +5078,8 @@ static const char * dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu, int physname) { + struct objfile *objfile = cu->objfile; + if (name == NULL) name = dwarf2_name (die, cu); @@ -5285,7 +5287,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu, } } - name = ui_file_obsavestring (buf, &cu->objfile->objfile_obstack, + name = ui_file_obsavestring (buf, &objfile->objfile_obstack, &length); ui_file_delete (buf); @@ -5293,7 +5295,7 @@ dwarf2_compute_name (char *name, struct die_info *die, struct dwarf2_cu *cu, { char *cname = dwarf2_canonicalize_name (name, cu, - &cu->objfile->objfile_obstack); + &objfile->objfile_obstack); if (cname != NULL) name = cname; @@ -5328,6 +5330,7 @@ dwarf2_full_name (char *name, struct die_info *die, struct dwarf2_cu *cu) static const char * dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct attribute *attr; const char *retval, *mangled = NULL, *canon = NULL; struct cleanup *back_to; @@ -5390,7 +5393,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("Computed physname <%s> does not match demangled <%s> " "(from linkage <%s>) - DIE at 0x%x [in module %s]"), - physname, canon, mangled, die->offset, cu->objfile->name); + physname, canon, mangled, die->offset, objfile->name); /* Prefer DW_AT_linkage_name (in the CANON form) - when it is available here - over computed PHYSNAME. It is safer @@ -5409,7 +5412,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu) if (need_copy) retval = obsavestring (retval, strlen (retval), - &cu->objfile->objfile_obstack); + &objfile->objfile_obstack); do_cleanups (back_to); return retval; @@ -5420,6 +5423,7 @@ dwarf2_physname (char *name, struct die_info *die, struct dwarf2_cu *cu) static void read_import_statement (struct die_info *die, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct attribute *import_attr; struct die_info *imported_die, *child_die; struct dwarf2_cu *imported_cu; @@ -5526,7 +5530,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("child DW_TAG_imported_declaration expected " "- DIE at 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); continue; } @@ -5547,7 +5551,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("child DW_TAG_imported_declaration has unknown " "imported name - DIE at 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); continue; } @@ -5561,7 +5565,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu) import_alias, imported_declaration, excludes, - &cu->objfile->objfile_obstack); + &objfile->objfile_obstack); do_cleanups (cleanups); } @@ -6224,7 +6228,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("missing DW_AT_low_pc for DW_TAG_GNU_call_site " "DIE 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); return; } pc = DW_ADDR (attr) + baseaddr; @@ -6240,7 +6244,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("Duplicate PC %s for DW_TAG_GNU_call_site " "DIE 0x%x [in module %s]"), - paddress (gdbarch, pc), die->offset, cu->objfile->name); + paddress (gdbarch, pc), die->offset, objfile->name); return; } @@ -6255,7 +6259,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("Tag %d is not DW_TAG_GNU_call_site_parameter in " "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"), - child_die->tag, child_die->offset, cu->objfile->name); + child_die->tag, child_die->offset, objfile->name); continue; } @@ -6313,7 +6317,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("Cannot find function owning DW_TAG_GNU_call_site " "DIE 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); } } @@ -6336,7 +6340,6 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) } else if (is_ref_attr (attr)) { - struct objfile *objfile = cu->objfile; struct dwarf2_cu *target_cu = cu; struct die_info *target_die; @@ -6351,7 +6354,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("DW_AT_GNU_call_site_target target DIE has invalid " "physname, for referencing DIE 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); else SET_FIELD_PHYSNAME (call_site->target, (char *) target_physname); } @@ -6364,7 +6367,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("DW_AT_GNU_call_site_target target DIE has invalid " "low pc, for referencing DIE 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); else SET_FIELD_PHYSADDR (call_site->target, lowpc + baseaddr); } @@ -6373,7 +6376,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("DW_TAG_GNU_call_site DW_AT_GNU_call_site_target is neither " "block nor reference, for DIE 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); call_site->per_cu = cu->per_cu; @@ -6402,7 +6405,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("No DW_FORM_block* DW_AT_location for " "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); continue; } parameter->dwarf_reg = dwarf_block_to_dwarf_reg (DW_BLOCK (attr)->data, @@ -6416,7 +6419,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) _("Only single DW_OP_reg or DW_OP_fbreg is supported " "for DW_FORM_block* DW_AT_location for " "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); continue; } @@ -6426,7 +6429,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("No DW_FORM_block* DW_AT_GNU_call_site_value for " "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); continue; } parameter->value = DW_BLOCK (attr)->data; @@ -6444,7 +6447,7 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("No DW_FORM_block* DW_AT_GNU_call_site_data_value for " "DW_TAG_GNU_call_site child DIE 0x%x [in module %s]"), - child_die->offset, cu->objfile->name); + child_die->offset, objfile->name); else { parameter->data_value = DW_BLOCK (attr)->data; @@ -6760,6 +6763,7 @@ static void dwarf2_record_block_ranges (struct die_info *die, struct block *block, CORE_ADDR baseaddr, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct attribute *attr; attr = dwarf2_attr (die, DW_AT_high_pc, cu); @@ -6779,7 +6783,7 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block, attr = dwarf2_attr (die, DW_AT_ranges, cu); if (attr) { - bfd *obfd = cu->objfile->obfd; + bfd *obfd = objfile->obfd; /* The value of the DW_AT_ranges attribute is the offset of the address range list in the .debug_ranges section. */ @@ -7894,7 +7898,7 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu) TYPE_CPLUS_REALLY_JAVA (type) = cu->language == language_java; } - quirk_gcc_member_function_pointer (type, cu->objfile); + quirk_gcc_member_function_pointer (type, objfile); /* NOTE: carlton/2004-03-16: GCC 3.4 (or at least one of its snapshots) has been known to create a die giving a declaration @@ -8681,6 +8685,7 @@ read_tag_string_type (struct die_info *die, struct dwarf2_cu *cu) static struct type * read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct type *type; /* Type that this function returns. */ struct type *ftype; /* Function that returns above type. */ struct attribute *attr; @@ -8726,7 +8731,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu) if (die->child != NULL) { - struct type *void_type = objfile_type (cu->objfile)->builtin_void; + struct type *void_type = objfile_type (objfile)->builtin_void; struct die_info *child_die; int nparams, iparams; @@ -8853,7 +8858,7 @@ read_typedef (struct die_info *die, struct dwarf2_cu *cu) complaint (&symfile_complaints, _("Self-referential DW_TAG_typedef " "- DIE at 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); TYPE_TARGET_TYPE (this_type) = NULL; } return this_type; @@ -9501,6 +9506,7 @@ static struct partial_die_info * load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, int building_psymtab, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct partial_die_info *part_die; struct partial_die_info *parent_die, *last_die, *first_die = NULL; struct abbrev_info *abbrev; @@ -9628,8 +9634,8 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, if (building_psymtab && part_die->name != NULL) add_psymbol_to_list (part_die->name, strlen (part_die->name), 0, VAR_DOMAIN, LOC_TYPEDEF, - &cu->objfile->static_psymbols, - 0, (CORE_ADDR) 0, cu->language, cu->objfile); + &objfile->static_psymbols, + 0, (CORE_ADDR) 0, cu->language, objfile); info_ptr = locate_pdi_sibling (part_die, buffer, info_ptr, abfd, cu); continue; } @@ -9646,7 +9652,7 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, complaint (&symfile_complaints, _("DW_TAG_typedef has childen - GCC PR debug/47510 bug " "- DIE at 0x%x [in module %s]"), - part_die->offset, cu->objfile->name); + part_die->offset, objfile->name); /* If we're at the second level, and we're an enumerator, and our parent has no specification (meaning possibly lives in a @@ -9666,9 +9672,9 @@ load_partial_dies (bfd *abfd, gdb_byte *buffer, gdb_byte *info_ptr, VAR_DOMAIN, LOC_CONST, (cu->language == language_cplus || cu->language == language_java) - ? &cu->objfile->global_psymbols - : &cu->objfile->static_psymbols, - 0, (CORE_ADDR) 0, cu->language, cu->objfile); + ? &objfile->global_psymbols + : &objfile->static_psymbols, + 0, (CORE_ADDR) 0, cu->language, objfile); info_ptr = locate_pdi_sibling (part_die, buffer, info_ptr, abfd, cu); continue; @@ -9778,6 +9784,7 @@ read_partial_die (struct partial_die_info *part_die, gdb_byte *buffer, gdb_byte *info_ptr, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; unsigned int i; struct attribute attr; int has_low_pc_attr = 0; @@ -9819,7 +9826,7 @@ read_partial_die (struct partial_die_info *part_die, default: part_die->name = dwarf2_canonicalize_name (DW_STRING (&attr), cu, - &cu->objfile->objfile_obstack); + &objfile->objfile_obstack); break; } break; @@ -9925,25 +9932,25 @@ read_partial_die (struct partial_die_info *part_die, so that GDB will ignore it. */ if (part_die->lowpc == 0 && !dwarf2_per_objfile->has_section_at_zero) { - struct gdbarch *gdbarch = get_objfile_arch (cu->objfile); + struct gdbarch *gdbarch = get_objfile_arch (objfile); complaint (&symfile_complaints, _("DW_AT_low_pc %s is zero " "for DIE at 0x%x [in module %s]"), paddress (gdbarch, part_die->lowpc), - part_die->offset, cu->objfile->name); + part_die->offset, objfile->name); } /* dwarf2_get_pc_bounds has also the strict low < high requirement. */ else if (part_die->lowpc >= part_die->highpc) { - struct gdbarch *gdbarch = get_objfile_arch (cu->objfile); + struct gdbarch *gdbarch = get_objfile_arch (objfile); complaint (&symfile_complaints, _("DW_AT_low_pc %s is not < DW_AT_high_pc %s " "for DIE at 0x%x [in module %s]"), paddress (gdbarch, part_die->lowpc), paddress (gdbarch, part_die->highpc), - part_die->offset, cu->objfile->name); + part_die->offset, objfile->name); } else part_die->has_pc_info = 1; @@ -9974,6 +9981,7 @@ find_partial_die_in_comp_unit (unsigned int offset, struct dwarf2_cu *cu) static struct partial_die_info * find_partial_die (unsigned int offset, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct dwarf2_per_cu_data *per_cu = NULL; struct partial_die_info *pd = NULL; @@ -9992,7 +10000,7 @@ find_partial_die (unsigned int offset, struct dwarf2_cu *cu) return pd; } - per_cu = dwarf2_find_containing_comp_unit (offset, cu->objfile); + per_cu = dwarf2_find_containing_comp_unit (offset, objfile); if (per_cu->cu == NULL || per_cu->cu->partial_dies == NULL) load_partial_comp_unit (per_cu); @@ -10014,7 +10022,7 @@ find_partial_die (unsigned int offset, struct dwarf2_cu *cu) back_to = make_cleanup (null_cleanup, 0); if (per_cu->cu->dwarf2_abbrevs == NULL) { - dwarf2_read_abbrevs (per_cu->cu->objfile->obfd, per_cu->cu); + dwarf2_read_abbrevs (objfile->obfd, per_cu->cu); make_cleanup (dwarf2_free_abbrev_table, per_cu->cu); } info_ptr = (dwarf2_per_objfile->info.buffer @@ -10022,11 +10030,11 @@ find_partial_die (unsigned int offset, struct dwarf2_cu *cu) + per_cu->cu->header.first_die_offset); abbrev = peek_die_abbrev (info_ptr, &bytes_read, per_cu->cu); info_ptr = read_partial_die (&comp_unit_die, abbrev, bytes_read, - per_cu->cu->objfile->obfd, + objfile->obfd, dwarf2_per_objfile->info.buffer, info_ptr, per_cu->cu); if (comp_unit_die.has_children) - load_partial_dies (per_cu->cu->objfile->obfd, + load_partial_dies (objfile->obfd, dwarf2_per_objfile->info.buffer, info_ptr, 0, per_cu->cu); do_cleanups (back_to); @@ -10040,7 +10048,7 @@ find_partial_die (unsigned int offset, struct dwarf2_cu *cu) internal_error (__FILE__, __LINE__, _("could not find partial DIE 0x%x " "in cache [from module %s]\n"), - offset, bfd_get_filename (cu->objfile->obfd)); + offset, bfd_get_filename (objfile->obfd)); return pd; } @@ -11286,7 +11294,7 @@ dwarf_decode_lines (struct line_header *lh, const char *comp_dir, bfd *abfd, complaint (&symfile_complaints, _(".debug_line address at offset 0x%lx is 0 " "[in module %s]"), - line_offset, cu->objfile->name); + line_offset, objfile->name); p_record_line = noop_record_line; } @@ -11495,7 +11503,7 @@ dwarf_decode_lines (struct line_header *lh, const char *comp_dir, bfd *abfd, if (current_subfile->symtab == NULL) current_subfile->symtab = allocate_symtab (current_subfile->name, - cu->objfile); + objfile); fe->symtab = current_subfile->symtab; } } @@ -12249,6 +12257,7 @@ static struct type * lookup_die_type (struct die_info *die, struct attribute *attr, struct dwarf2_cu *cu) { + struct objfile *objfile = cu->objfile; struct type *this_type; /* First see if we have it cached. */ @@ -12270,7 +12279,7 @@ lookup_die_type (struct die_info *die, struct attribute *attr, if (sig_type == NULL) error (_("Dwarf Error: Cannot find signatured DIE referenced from DIE " "at 0x%x [in module %s]"), - die->offset, cu->objfile->name); + die->offset, objfile->name); gdb_assert (sig_type->per_cu.debug_types_section); offset = sig_type->per_cu.offset + sig_type->type_offset; @@ -12280,7 +12289,7 @@ lookup_die_type (struct die_info *die, struct attribute *attr, { dump_die_for_error (die); error (_("Dwarf Error: Bad type attribute %s [in module %s]"), - dwarf_attr_name (attr->name), cu->objfile->name); + dwarf_attr_name (attr->name), objfile->name); } /* If not cached we need to read it in. */ @@ -12304,14 +12313,14 @@ lookup_die_type (struct die_info *die, struct attribute *attr, /* read_type_die already issued a complaint. */ message = xstrprintf (_(""), - cu->objfile->name, + objfile->name, cu->header.offset, die->offset); - saved = obstack_copy0 (&cu->objfile->objfile_obstack, + saved = obstack_copy0 (&objfile->objfile_obstack, message, strlen (message)); xfree (message); - this_type = init_type (TYPE_CODE_ERROR, 0, 0, saved, cu->objfile); + this_type = init_type (TYPE_CODE_ERROR, 0, 0, saved, objfile); } return this_type; @@ -14255,7 +14264,7 @@ dwarf2_fetch_die_location_block (unsigned int offset, die = follow_die_offset (offset, &cu); if (!die) error (_("Dwarf Error: Cannot find DIE at 0x%x referenced in module %s"), - offset, per_cu->cu->objfile->name); + offset, per_cu->objfile->name); attr = dwarf2_attr (die, DW_AT_location, cu); if (!attr) @@ -14283,7 +14292,7 @@ dwarf2_fetch_die_location_block (unsigned int offset, if (!attr_form_is_block (attr)) error (_("Dwarf Error: DIE at 0x%x referenced in module %s " "is neither DW_FORM_block* nor DW_FORM_exprloc"), - offset, per_cu->cu->objfile->name); + offset, per_cu->objfile->name); retval.data = DW_BLOCK (attr)->data; retval.size = DW_BLOCK (attr)->size; @@ -15422,13 +15431,14 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset, struct dwarf2_section_info *section, int section_is_gnu) { + struct objfile *objfile = dwarf2_per_objfile->objfile; gdb_byte *mac_ptr, *mac_end; struct macro_source_file *current_file = 0; enum dwarf_macro_record_type macinfo_type; unsigned int offset_size = cu->header.offset_size; gdb_byte *opcode_definitions[256]; - dwarf2_read_section (dwarf2_per_objfile->objfile, section); + dwarf2_read_section (objfile, section); if (section->buffer == NULL) { complaint (&symfile_complaints, _("missing %s section"), @@ -15505,7 +15515,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset, mac_ptr += bytes_read; current_file = macro_start_file (file, line, current_file, - comp_dir, lh, cu->objfile); + comp_dir, lh, objfile); } break; @@ -15562,7 +15572,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset, dwarf_decode_macro_bytes (abfd, section->buffer + offset, mac_end, current_file, lh, comp_dir, section, section_is_gnu, - offset_size, cu->objfile); + offset_size, objfile); } /* Check if the attribute's form is a DW_FORM_block* @@ -15647,16 +15657,18 @@ static void dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, struct dwarf2_cu *cu) { + struct objfile *objfile = dwarf2_per_objfile->objfile; + if (attr_form_is_section_offset (attr) /* ".debug_loc" may not exist at all, or the offset may be outside the section. If so, fall through to the complaint in the other branch. */ - && DW_UNSND (attr) < dwarf2_section_size (dwarf2_per_objfile->objfile, + && DW_UNSND (attr) < dwarf2_section_size (objfile, &dwarf2_per_objfile->loc)) { struct dwarf2_loclist_baton *baton; - baton = obstack_alloc (&cu->objfile->objfile_obstack, + baton = obstack_alloc (&objfile->objfile_obstack, sizeof (struct dwarf2_loclist_baton)); fill_in_loclist_baton (cu, baton, attr); @@ -15673,7 +15685,7 @@ dwarf2_symbol_mark_computed (struct attribute *attr, struct symbol *sym, { struct dwarf2_locexpr_baton *baton; - baton = obstack_alloc (&cu->objfile->objfile_obstack, + baton = obstack_alloc (&objfile->objfile_obstack, sizeof (struct dwarf2_locexpr_baton)); baton->per_cu = cu->per_cu; gdb_assert (baton->per_cu);