aboutsummaryrefslogtreecommitdiff
path: root/gdb/elfread.c
diff options
context:
space:
mode:
authorPeter Schauer <Peter.Schauer@mytum.de>1996-12-01 08:33:39 +0000
committerPeter Schauer <Peter.Schauer@mytum.de>1996-12-01 08:33:39 +0000
commit0db3fe94c3a498329fc165e3c0f61c25d8572a7c (patch)
tree6ecc1e45ddf5c90903fc8feafdd1d4c6c3777230 /gdb/elfread.c
parent0e0f4106193758b063a6fa877f301c1844dae045 (diff)
downloadgdb-0db3fe94c3a498329fc165e3c0f61c25d8572a7c.zip
gdb-0db3fe94c3a498329fc165e3c0f61c25d8572a7c.tar.gz
gdb-0db3fe94c3a498329fc165e3c0f61c25d8572a7c.tar.bz2
Add support for Irix 6.2 native O32 and N32 ABI.
* config.in, configure.in, configure: Check for <objlist.h>. * configure.tgt: Handle mips*-sgi-irix6* like irix5 for now. * cp-valprint.c (cp_print_value_fields): Use SYMBOL_VALUE_ADDRESS instead of SYMBOL_BLOCK_VALUE to get the address of a static member. * dwarf2read.c: Turn warnings and recoverable errors into complaints, add new complaints where appropriate. gcc -Wall cleanup. (struct line_head): Change line_base from char to int to avoid problems with compilers whose plain char is represented by an unsigned char. (struct partial_die_info): Add is_declaration field. (dwarf2_tmp_obstack): New obstack for allocating temporary storage used during symbol reading. (cu_header_offset): New variable for resolving relative reference dies. (optimized_out, basereg, islocal, frame_base_reg, frame_base_offset): New interface variables for decode_locdesc. (struct dwarf2_pinfo): New structure for communication between psymtab and symtab reading, passed via pst->read_symtab_private. (dwarf2_has_info, dwarf2_build_psymtabs): Accept objects files without line number sections. (dwarf2_build_psymtabs_hard): Initialize temporary obstack for symbol reading. Allocate and initialize pst->read_symtab_private. Relocate pst->textlow and pst->texthigh with baseaddr. (scan_partial_symbols): Do not add DW_AT_declaration symbols to the partial symbol table. Add file scope enumerator symbols to the partial symbol table. Fix typo in highpc computation. If we didn't find a lowpc, set it to highpc to avoid complaints from `maint check. (add_partial_symbol): Relocate symbol values with baseaddr. Add static DW_TAG_subprogram and DW_TAG_variable symbols to the minimal symbol table. Obtain symbol values for DW_TAG_variable symbols from the location descriptor, skip symbols with missing location desciptors. Skip symbols for aggregate types without children. Handle enumerator symbols. (dwarf2_psymtab_to_symtab): Issue symbol reading message if verbose. (psymtab_to_symtab_1): Set local variables from pst->read_symtab_private, set cu_header_offset and baseaddr. Initialize temporary obstack for symbol reading, initialize buildsym and add a cleanup to really_free_pendings. Relocate highpc with baseaddr when calling end_symtab. If the compilation is from a C file generated by language preprocessors, do not set the symtab language if it was already deduced by start_subfile. Removed verbose sorting symbol table message. (process_die): Handle DW_TAG_ptr_to_member_type and DW_TAG_reference_type. Use read_subroutine_type to get the function type for DW_TAG_subprogram before calling read_func_scope. (read_file_scope): Initialize file name to <unknown>, start_subfile expects a non-NULL name. If we didn't find a lowpc, set it to highpc to avoid complaints from finish_symbol. Relocate lowpc and highpc with baseaddr. Get rid of Irix6.2 native cc compile machine prefix in comp_dir. Zero out ftypes for each new compilation unit (may be different language or different objfile). Accept compilation units without line number information, pass comp_dir to decode_lines. (read_func_scope): Initialize function name to <unknown> to avoid core dumps when DW_AT_name is missing. Relocate lowpc and highpc with baseaddr. Handle DW_AT_frame_base, keep result for DW_OP_fbreg operations. Pass function type to new_symbol. (read_lexical_block_scope): Relocate lowpc and highpc with baseaddr. (read_structure_scope): Set TYPE_TAG_NAME, not TYPE_NAME. Handle DW_TAG_class_type. Copy fields to type_obstack, release temporary storage for fields. Don't add symbol if die is a stub die and has no children. Handle C++ static member fields. (read_enumeration): Set TYPE_TAG_NAME, not TYPE_NAME. Copy fields to type_obstack, release temporary storage for fields. Let new_symbol handle the symbol creation for enumerators instead of handcrafting a symbol. Determine signedness of enum type from enumerators. (dwarf_read_array_type): Handle variable length arrays. Use lookup_pointer_type instead of handcrafting a type. Create array type only if a DW_TAG_subrange_type was found. (read_tag_pointer_type, read_tag_reference_type): Use lookup_pointer_type and lookup_reference_type instead of handcrafting a type. (read_tag_ptr_to_member_type): New function to handle DW_TAG_ptr_to_member_type. (read_subroutine_type): Handle parameter dies. Use lookup_function_type instead of handcrafting a type. (read_typedef): Allocate a TYPE_CODE_TYPEDEF type for the typedef. (read_base_type): If the type has a name, use init_type to create a new type instead of second guessing a fundamental type. (read_comp_unit): Reset die reference table before building a new one. (dwarf2_read_section): Read section contents into psymbol_obstack. (dwarf2_read_abbrevs): Handle unterminated abbreviations for a compile unit gracefully. (read_partial_die): Zero partial die before reading its info. Handle DW_AT_declaration. Fix typo in handling of DW_FORM_block4. (read_full_die): Fix typo in handling of DW_FORM_block4. (read_1_signed_byte, read_2_signed_bytes, read_4_signed_bytes): New routines to get signed values from a buffer. (read_n_bytes, read_string): Allocate storage from the temporary obstack. If the host char size permits it, return pointer to buffer instead of allocating storage. (set_cu_language): Handle DW_LANG_Mips_Assembler. (dwarf_attr): Return NULL if reference die for DW_AT_specification or DW_AT_abstract_origin die is not found. (record_minimal_symbol): Removed, replaced with a direct call to prim_record_minimal_symbol, it now handles saving the string itself. (convert_locdesc): Removed, partial symtab reading now uses decode_locdesc. (dwarf_attr): Use dwarf2_get_ref_die_offset to get the absolute offset for the die reference. (dwarf_decode_lines): Complain if the line section info is missing. Use read_1_signed_byte to extract lh.line_base to avoid problems with compilers whose plain char is represented by an unsigned char. Add cleanups for allocated temporary storage. Start a subfile for the first file in the state machine. Fix off by one problem with dirs.dirs access. Use comp_dir when directory index is 0. Support multiple sequences (from Jason Merrill <jason@cygnus.com>). (dwarf2_start_subfile): Try to keep line numbers from identical absolute and relative file names in a common subfile. (new_symbol): Allocate symbol and symbol name on the symbol_obstack. Set SYMBOL_LINE from DW_AT_decl_line if present. Set SYMBOL_TYPE from passed type if not NULL. Change DW_TAG_variable symbol types with missing type entries to a sensible type. Handle optimized_out, offreg and islocal storage classes. Add external symbols with type information whose address isn't known as LOC_UNRESOLVED symbols. Synthesize typedefs for C++ classes, structs, unions and enumerations. Handle DW_TAG_enumerator symbols, complain for unrecognized symbol tags. (die_type): A missing DW_AT_type represents a void type. Use dwarf2_get_ref_die_offset to get the absolute offset for the die reference. (die_containing_type): New function to build type from DW_AT_containing_type attribut. (read_type_die): Handle DW_TAG_ptr_to_member_type. Treat DW_TAG_subprogram like DW_TAG_subroutine_type. (dwarf_base_type): Fix typo with creation of FT_UNSIGNED_SHORT fundamental type. (create_name): Removed, symbol name allocation is now done in new_symbol. (dump_die): Use print_address_numeric to print a CORE_ADDR. (dwarf2_empty_die_ref_table): New function to clear the die reference table. (dwarf2_get_ref_die_offset): New function to get the absolute die offset from a die reference attribute. (decode_locdesc): Complete rewrite using a stack, code mostly borrowed from dwarfread.c:locval. (dwarf_alloc_type): Removed, replaced by direct calls to alloc_type. (dwarf_alloc_block): Allocate block on temporary obstack. * elfread.c (elf_symtab_read): When handling Irix dynamic symbols, skip section name symbols and relocate all others. (elf_symfile_read): Build dwarf2 psymtab even if offset is non-zero. * irix5-nat.c (fetch_core_registers): Handle core_reg_sect from N32 executables. Call registers_fetched after extracting the registers. (obj_list_variant, struct link_map, LM_OFFSET, LM_ADDR): New definitions to enable support of O32 and N32 format objlists. (struct so_list): New members offset, so_name and lmstart to eliminate dependencies from the objlist format used. (solib_map_sections, symbol_add_stub, solib_add, info_sharedlibrary_command, solib_address, clear_solib): Use so_name and LM_OFFSET. (first_link_map_member): Rewrite to enable support of O32 and N32 format objlists. (next_link_map_member, xfer_link_map_member): New functions to support O32 and N32 format objlists. (find_solib): Use first_link_map_member, next_link_map_member and xfer_link_map_member. (solib_create_inferior_hook): Use TARGET_SIGNAL_* instead of host signal numbers. * mdebugread.c (parse_partial_symbols, handle_psymbol_enumerators): Pass CORE_ADDR variant to add_psymbol_to_list. * mips-tdep.c (heuristic_proc_desc): Stop examining the prologue if we encounter a positive stack adjustment. Handle `move $30,$sp'. Handle `sd reg,offset($sp)' for 32 bit ABIs. * symmisc.c (dump_msymbols, print_partial_symbols): Use print_address_numeric to print a SYMBOL_VALUE_ADDRESS. (dump_symtab): Print compilation directory if it is not NULL. * valops.c (search_struct_field, value_struct_elt_for_reference): Use SYMBOL_VALUE_ADDRESS instead of SYMBOL_BLOCK_VALUE to get the address of a static member.
Diffstat (limited to 'gdb/elfread.c')
-rw-r--r--gdb/elfread.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 107bdaf..524df4a 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -389,6 +389,15 @@ elf_symtab_read (abfd, addr, objfile, dynamic)
default:
ms_type = mst_abs;
}
+
+ /* If it is an Irix dynamic symbol, skip section name
+ symbols, relocate all others. */
+ if (ms_type != mst_abs)
+ {
+ if (sym->name[0] == '.')
+ continue;
+ symaddr += addr;
+ }
}
else if (sym -> section -> flags & SEC_CODE)
{
@@ -603,7 +612,7 @@ elf_symfile_read (objfile, section_offsets, mainline)
special ELF sections. We first have to find them... */
bfd_map_over_sections (abfd, elf_locate_sections, (PTR) &ei);
- if (dwarf2_has_info (abfd) && !offset)
+ if (dwarf2_has_info (abfd))
{
/* DWARF 2 sections */
dwarf2_build_psymtabs (objfile, section_offsets, mainline);