mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 20:49:43 +00:00
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.
This commit is contained in:
parent
0e0f410619
commit
0db3fe94c3
201
gdb/ChangeLog
201
gdb/ChangeLog
@ -1,3 +1,204 @@
|
||||
Sun Dec 1 00:18:59 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||
|
||||
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.
|
||||
|
||||
Thu Nov 28 00:46:24 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||
|
||||
* vax-tdep.c (vax_print_insn): Made static, modified to take
|
||||
|
@ -110,6 +110,9 @@
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <objlist.h> header file. */
|
||||
#undef HAVE_OBJLIST_H
|
||||
|
||||
/* Define if you have the select function. */
|
||||
#undef HAVE_SELECT
|
||||
|
||||
|
2
gdb/configure
vendored
2
gdb/configure
vendored
@ -1346,7 +1346,7 @@ EOF
|
||||
|
||||
fi
|
||||
|
||||
for ac_hdr in limits.h memory.h string.h strings.h unistd.h termios.h termio.h sgtty.h stddef.h stdlib.h sys/procfs.h link.h endian.h
|
||||
for ac_hdr in limits.h memory.h string.h strings.h unistd.h termios.h termio.h sgtty.h stddef.h stdlib.h sys/procfs.h link.h endian.h objlist.h
|
||||
do
|
||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||
|
@ -40,7 +40,7 @@ AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..)
|
||||
AC_ARG_PROGRAM
|
||||
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(limits.h memory.h string.h strings.h unistd.h termios.h termio.h sgtty.h stddef.h stdlib.h sys/procfs.h link.h endian.h)
|
||||
AC_CHECK_HEADERS(limits.h memory.h string.h strings.h unistd.h termios.h termio.h sgtty.h stddef.h stdlib.h sys/procfs.h link.h endian.h objlist.h)
|
||||
AC_HEADER_STAT
|
||||
|
||||
AC_C_CONST
|
||||
|
@ -175,6 +175,7 @@ mips*el-*-elf*) gdb_target=embedl ;;
|
||||
mips*-*-elf*) gdb_target=embed ;;
|
||||
mips*-little-*) gdb_target=littlemips ;;
|
||||
mips*-sgi-irix5*) gdb_target=irix5 ;;
|
||||
mips*-sgi-irix6*) gdb_target=irix5 ;;
|
||||
mips*-sgi-*) gdb_target=irix3 ;;
|
||||
mips*-sony-*) gdb_target=bigmips ;;
|
||||
mips*-*-mach3*) gdb_target=mach3 ;;
|
||||
|
@ -342,7 +342,7 @@ cp_print_value_fields (type, valaddr, address, stream, format, recurse, pretty,
|
||||
else
|
||||
{
|
||||
v = value_at (TYPE_FIELD_TYPE (type, i),
|
||||
(CORE_ADDR)SYMBOL_BLOCK_VALUE (sym));
|
||||
SYMBOL_VALUE_ADDRESS (sym));
|
||||
cp_print_static_field (TYPE_FIELD_TYPE (type, i), v,
|
||||
stream, format, recurse + 1,
|
||||
pretty);
|
||||
|
1941
gdb/dwarf2read.c
1941
gdb/dwarf2read.c
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
|
367
gdb/irix5-nat.c
367
gdb/irix5-nat.c
@ -169,17 +169,53 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
|
||||
int which; /* Unused */
|
||||
CORE_ADDR reg_addr; /* Unused */
|
||||
{
|
||||
if (core_reg_size != REGISTER_BYTES)
|
||||
if (core_reg_size == REGISTER_BYTES)
|
||||
{
|
||||
memcpy ((char *)registers, core_reg_sect, core_reg_size);
|
||||
}
|
||||
else if (core_reg_size == (2 * REGISTER_BYTES) && MIPS_REGSIZE == 4)
|
||||
{
|
||||
/* This is a core file from a N32 executable, 64 bits are saved
|
||||
for all registers. */
|
||||
char *srcp = core_reg_sect;
|
||||
char *dstp = registers;
|
||||
int regno;
|
||||
|
||||
for (regno = 0; regno < NUM_REGS; regno++)
|
||||
{
|
||||
if (regno >= FP0_REGNUM && regno < (FP0_REGNUM + 32))
|
||||
{
|
||||
/* FIXME, this is wrong, N32 has 64 bit FP regs, but GDB
|
||||
currently assumes that they are 32 bit. */
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
srcp += 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
srcp += 4;
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
*dstp++ = *srcp++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
warning ("wrong size gregset struct in core file");
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy ((char *)registers, core_reg_sect, core_reg_size);
|
||||
registers_fetched ();
|
||||
}
|
||||
|
||||
/* Irix 5 uses what appears to be a unique form of shared library
|
||||
support. This is a copy of solib.c modified for Irix 5. */
|
||||
/* FIXME: Most of this code could be merged with osfsolib.c and solib.c
|
||||
by using next_link_map_member and xfer_link_map_member in solib.c. */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
@ -192,6 +228,13 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
|
||||
#define __SYM_H__
|
||||
#define __SYMCONST_H__
|
||||
#include <obj.h>
|
||||
#ifdef HAVE_OBJLIST_H
|
||||
#include <objlist.h>
|
||||
#endif
|
||||
|
||||
#ifdef NEW_OBJ_INFO_MAGIC
|
||||
#define HANDLE_NEW_OBJ_LIST
|
||||
#endif
|
||||
|
||||
#include "symtab.h"
|
||||
#include "bfd.h"
|
||||
@ -207,16 +250,43 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
|
||||
/* The symbol which starts off the list of shared libraries. */
|
||||
#define DEBUG_BASE "__rld_obj_head"
|
||||
|
||||
/* How to get the loaded address of a shared library. */
|
||||
#define LM_ADDR(so) ((so)->lm.o_praw)
|
||||
/* Irix 6.x introduces a new variant of object lists.
|
||||
To be able to debug O32 executables under Irix 6, we have to handle both
|
||||
variants. */
|
||||
|
||||
typedef enum
|
||||
{
|
||||
OBJ_LIST_OLD, /* Pre Irix 6.x object list. */
|
||||
OBJ_LIST_32, /* 32 Bit Elf32_Obj_Info. */
|
||||
OBJ_LIST_64 /* 64 Bit Elf64_Obj_Info, FIXME not yet implemented. */
|
||||
} obj_list_variant;
|
||||
|
||||
/* Define our own link_map structure.
|
||||
This will help to share code with osfsolib.c and solib.c. */
|
||||
|
||||
struct link_map {
|
||||
obj_list_variant l_variant; /* which variant of object list */
|
||||
CORE_ADDR l_lladdr; /* addr in inferior list was read from */
|
||||
CORE_ADDR l_next; /* address of next object list entry */
|
||||
};
|
||||
|
||||
/* Irix 5 shared objects are pre-linked to particular addresses
|
||||
although the dynamic linker may have to relocate them if the
|
||||
address ranges of the libraries used by the main program clash.
|
||||
The offset is the difference between the address where the object
|
||||
is mapped and the binding address of the shared library. */
|
||||
#define LM_OFFSET(so) ((so) -> offset)
|
||||
/* Loaded address of shared library. */
|
||||
#define LM_ADDR(so) ((so) -> lmstart)
|
||||
|
||||
char shadow_contents[BREAKPOINT_MAX]; /* Stash old bkpt addr contents */
|
||||
|
||||
struct so_list {
|
||||
struct so_list *next; /* next structure in linked list */
|
||||
struct obj_list ll;
|
||||
struct obj lm; /* copy of link map from inferior */
|
||||
struct obj_list *lladdr; /* addr in inferior lm was read from */
|
||||
struct link_map lm;
|
||||
CORE_ADDR offset; /* prelink to load address offset */
|
||||
char *so_name; /* shared object lib name */
|
||||
CORE_ADDR lmstart; /* lower addr bound of mapped object */
|
||||
CORE_ADDR lmend; /* upper addr bound of mapped object */
|
||||
char symbols_loaded; /* flag: symbols read in yet? */
|
||||
char from_tty; /* flag: print msgs? */
|
||||
@ -251,9 +321,15 @@ symbol_add_stub PARAMS ((char *));
|
||||
static struct so_list *
|
||||
find_solib PARAMS ((struct so_list *));
|
||||
|
||||
static struct obj_list *
|
||||
static struct link_map *
|
||||
first_link_map_member PARAMS ((void));
|
||||
|
||||
static struct link_map *
|
||||
next_link_map_member PARAMS ((struct so_list *));
|
||||
|
||||
static void
|
||||
xfer_link_map_member PARAMS ((struct so_list *, struct link_map *));
|
||||
|
||||
static CORE_ADDR
|
||||
locate_base PARAMS ((void));
|
||||
|
||||
@ -297,9 +373,8 @@ solib_map_sections (so)
|
||||
struct section_table *p;
|
||||
struct cleanup *old_chain;
|
||||
bfd *abfd;
|
||||
CORE_ADDR offset;
|
||||
|
||||
filename = tilde_expand (so -> lm.o_path);
|
||||
filename = tilde_expand (so -> so_name);
|
||||
old_chain = make_cleanup (free, filename);
|
||||
|
||||
scratch_chan = openp (getenv ("PATH"), 1, filename, O_RDONLY, 0,
|
||||
@ -337,20 +412,13 @@ solib_map_sections (so)
|
||||
bfd_get_filename (exec_bfd), bfd_errmsg (bfd_get_error ()));
|
||||
}
|
||||
|
||||
/* Irix 5 shared objects are pre-linked to particular addresses
|
||||
although the dynamic linker may have to relocate them if the
|
||||
address ranges of the libraries used by the main program clash.
|
||||
The offset is the difference between the address where the object
|
||||
is mapped and the binding address of the shared library. */
|
||||
offset = (CORE_ADDR) LM_ADDR (so) - so -> lm.o_base_address;
|
||||
|
||||
for (p = so -> sections; p < so -> sections_end; p++)
|
||||
{
|
||||
/* Relocate the section binding addresses as recorded in the shared
|
||||
object's file by the offset to get the address to which the
|
||||
object was actually mapped. */
|
||||
p -> addr += offset;
|
||||
p -> endaddr += offset;
|
||||
p -> addr += LM_OFFSET (so);
|
||||
p -> endaddr += LM_OFFSET (so);
|
||||
so -> lmend = (CORE_ADDR) max (p -> endaddr, so -> lmend);
|
||||
if (STREQ (p -> the_bfd_section -> name, ".text"))
|
||||
{
|
||||
@ -437,27 +505,196 @@ DESCRIPTION
|
||||
|
||||
Read in a copy of the first member in the inferior's dynamic
|
||||
link map from the inferior's dynamic linker structures, and return
|
||||
a pointer to the copy in our address space.
|
||||
a pointer to the link map descriptor.
|
||||
*/
|
||||
|
||||
static struct obj_list *
|
||||
static struct link_map *
|
||||
first_link_map_member ()
|
||||
{
|
||||
struct obj_list *lm;
|
||||
struct obj_list s;
|
||||
struct obj_list *listp;
|
||||
struct obj_list list_old;
|
||||
struct link_map *lm;
|
||||
static struct link_map first_lm;
|
||||
CORE_ADDR lladdr;
|
||||
CORE_ADDR next_lladdr;
|
||||
|
||||
read_memory (debug_base, (char *) &lm, sizeof (struct obj_list *));
|
||||
|
||||
if (lm == NULL)
|
||||
/* We have not already read in the dynamic linking structures
|
||||
from the inferior, lookup the address of the base structure. */
|
||||
debug_base = locate_base ();
|
||||
if (debug_base == 0)
|
||||
return NULL;
|
||||
|
||||
/* Get address of first list entry. */
|
||||
read_memory (debug_base, (char *) &listp, sizeof (struct obj_list *));
|
||||
|
||||
if (listp == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Get first list entry. */
|
||||
lladdr = (CORE_ADDR) listp;
|
||||
read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
|
||||
|
||||
/* The first entry in the list is the object file we are debugging,
|
||||
so skip it. */
|
||||
read_memory ((CORE_ADDR) lm, (char *) &s, sizeof (struct obj_list));
|
||||
next_lladdr = (CORE_ADDR) list_old.next;
|
||||
|
||||
return s.next;
|
||||
#ifdef HANDLE_NEW_OBJ_LIST
|
||||
if (list_old.data == NEW_OBJ_INFO_MAGIC)
|
||||
{
|
||||
Elf32_Obj_Info list_32;
|
||||
|
||||
read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
|
||||
if (list_32.oi_size != sizeof (Elf32_Obj_Info))
|
||||
return NULL;
|
||||
next_lladdr = (CORE_ADDR) list_32.oi_next;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (next_lladdr == 0)
|
||||
return NULL;
|
||||
|
||||
first_lm.l_lladdr = next_lladdr;
|
||||
lm = &first_lm;
|
||||
return lm;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
|
||||
next_link_map_member -- locate next member in dynamic linker's map
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
static struct link_map *next_link_map_member (so_list_ptr)
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
Read in a copy of the next member in the inferior's dynamic
|
||||
link map from the inferior's dynamic linker structures, and return
|
||||
a pointer to the link map descriptor.
|
||||
*/
|
||||
|
||||
static struct link_map *
|
||||
next_link_map_member (so_list_ptr)
|
||||
struct so_list *so_list_ptr;
|
||||
{
|
||||
struct link_map *lm = &so_list_ptr -> lm;
|
||||
CORE_ADDR next_lladdr = lm -> l_next;
|
||||
static struct link_map next_lm;
|
||||
|
||||
if (next_lladdr == 0)
|
||||
{
|
||||
/* We have hit the end of the list, so check to see if any were
|
||||
added, but be quiet if we can't read from the target any more. */
|
||||
int status = 0;
|
||||
|
||||
if (lm -> l_variant == OBJ_LIST_OLD)
|
||||
{
|
||||
struct obj_list list_old;
|
||||
|
||||
status = target_read_memory (lm -> l_lladdr,
|
||||
(char *) &list_old,
|
||||
sizeof (struct obj_list));
|
||||
next_lladdr = (CORE_ADDR) list_old.next;
|
||||
}
|
||||
#ifdef HANDLE_NEW_OBJ_LIST
|
||||
else if (lm -> l_variant == OBJ_LIST_32)
|
||||
{
|
||||
Elf32_Obj_Info list_32;
|
||||
status = target_read_memory (lm -> l_lladdr,
|
||||
(char *) &list_32,
|
||||
sizeof (Elf32_Obj_Info));
|
||||
next_lladdr = (CORE_ADDR) list_32.oi_next;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (status != 0 || next_lladdr == 0)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
next_lm.l_lladdr = next_lladdr;
|
||||
lm = &next_lm;
|
||||
return lm;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
|
||||
xfer_link_map_member -- set local variables from dynamic linker's map
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
static void xfer_link_map_member (so_list_ptr, lm)
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
Read in a copy of the requested member in the inferior's dynamic
|
||||
link map from the inferior's dynamic linker structures, and fill
|
||||
in the necessary so_list_ptr elements.
|
||||
*/
|
||||
|
||||
static void
|
||||
xfer_link_map_member (so_list_ptr, lm)
|
||||
struct so_list *so_list_ptr;
|
||||
struct link_map *lm;
|
||||
{
|
||||
struct obj_list list_old;
|
||||
CORE_ADDR lladdr = lm -> l_lladdr;
|
||||
struct link_map *new_lm = &so_list_ptr -> lm;
|
||||
int errcode;
|
||||
|
||||
read_memory (lladdr, (char *) &list_old, sizeof (struct obj_list));
|
||||
|
||||
new_lm -> l_variant = OBJ_LIST_OLD;
|
||||
new_lm -> l_lladdr = lladdr;
|
||||
new_lm -> l_next = (CORE_ADDR) list_old.next;
|
||||
|
||||
#ifdef HANDLE_NEW_OBJ_LIST
|
||||
if (list_old.data == NEW_OBJ_INFO_MAGIC)
|
||||
{
|
||||
Elf32_Obj_Info list_32;
|
||||
|
||||
read_memory (lladdr, (char *) &list_32, sizeof (Elf32_Obj_Info));
|
||||
if (list_32.oi_size != sizeof (Elf32_Obj_Info))
|
||||
return;
|
||||
new_lm -> l_variant = OBJ_LIST_32;
|
||||
new_lm -> l_next = (CORE_ADDR) list_32.oi_next;
|
||||
|
||||
target_read_string ((CORE_ADDR) list_32.oi_pathname,
|
||||
&so_list_ptr -> so_name,
|
||||
list_32.oi_pathname_len + 1, &errcode);
|
||||
if (errcode != 0)
|
||||
memory_error (errcode, (CORE_ADDR) list_32.oi_pathname);
|
||||
|
||||
LM_ADDR (so_list_ptr) = (CORE_ADDR) list_32.oi_ehdr;
|
||||
LM_OFFSET (so_list_ptr)
|
||||
= (CORE_ADDR) list_32.oi_ehdr - (CORE_ADDR) list_32.oi_orig_ehdr;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
struct obj obj_old;
|
||||
|
||||
read_memory ((CORE_ADDR) list_old.data, (char *) &obj_old,
|
||||
sizeof (struct obj));
|
||||
|
||||
target_read_string ((CORE_ADDR) obj_old.o_path,
|
||||
&so_list_ptr -> so_name,
|
||||
INT_MAX, &errcode);
|
||||
if (errcode != 0)
|
||||
memory_error (errcode, (CORE_ADDR) obj_old.o_path);
|
||||
|
||||
LM_ADDR (so_list_ptr) = (CORE_ADDR) obj_old.o_praw;
|
||||
LM_OFFSET (so_list_ptr)
|
||||
= (CORE_ADDR) obj_old.o_praw - obj_old.o_base_address;
|
||||
}
|
||||
|
||||
solib_map_sections (so_list_ptr);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
@ -483,7 +720,7 @@ find_solib (so_list_ptr)
|
||||
struct so_list *so_list_ptr; /* Last lm or NULL for first one */
|
||||
{
|
||||
struct so_list *so_list_next = NULL;
|
||||
struct obj_list *lm = NULL;
|
||||
struct link_map *lm = NULL;
|
||||
struct so_list *new;
|
||||
|
||||
if (so_list_ptr == NULL)
|
||||
@ -491,49 +728,21 @@ find_solib (so_list_ptr)
|
||||
/* We are setting up for a new scan through the loaded images. */
|
||||
if ((so_list_next = so_list_head) == NULL)
|
||||
{
|
||||
/* We have not already read in the dynamic linking structures
|
||||
from the inferior, lookup the address of the base structure. */
|
||||
debug_base = locate_base ();
|
||||
if (debug_base != 0)
|
||||
{
|
||||
/* Read the base structure in and find the address of the first
|
||||
link map list member. */
|
||||
lm = first_link_map_member ();
|
||||
}
|
||||
/* Find the first link map list member. */
|
||||
lm = first_link_map_member ();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We have been called before, and are in the process of walking
|
||||
the shared library list. Advance to the next shared object. */
|
||||
if ((lm = so_list_ptr->ll.next) == NULL)
|
||||
{
|
||||
/* We have hit the end of the list, so check to see if any were
|
||||
added, but be quiet if we can't read from the target any more. */
|
||||
int status = target_read_memory ((CORE_ADDR) so_list_ptr -> lladdr,
|
||||
(char *) &(so_list_ptr -> ll),
|
||||
sizeof (struct obj_list));
|
||||
if (status == 0)
|
||||
{
|
||||
lm = so_list_ptr->ll.next;
|
||||
}
|
||||
else
|
||||
{
|
||||
lm = NULL;
|
||||
}
|
||||
}
|
||||
lm = next_link_map_member (so_list_ptr);
|
||||
so_list_next = so_list_ptr -> next;
|
||||
}
|
||||
if ((so_list_next == NULL) && (lm != NULL))
|
||||
{
|
||||
int errcode;
|
||||
char *buffer;
|
||||
|
||||
/* Get next link map structure from inferior image and build a local
|
||||
abbreviated load_map structure */
|
||||
new = (struct so_list *) xmalloc (sizeof (struct so_list));
|
||||
memset ((char *) new, 0, sizeof (struct so_list));
|
||||
new -> lladdr = lm;
|
||||
/* Add the new node as the next node in the list, or as the root
|
||||
node if this is the first one. */
|
||||
if (so_list_ptr != NULL)
|
||||
@ -545,16 +754,7 @@ find_solib (so_list_ptr)
|
||||
so_list_head = new;
|
||||
}
|
||||
so_list_next = new;
|
||||
read_memory ((CORE_ADDR) lm, (char *) &(new -> ll),
|
||||
sizeof (struct obj_list));
|
||||
read_memory ((CORE_ADDR) new->ll.data, (char *) &(new -> lm),
|
||||
sizeof (struct obj));
|
||||
target_read_string ((CORE_ADDR)new->lm.o_path, &buffer,
|
||||
INT_MAX, &errcode);
|
||||
if (errcode != 0)
|
||||
memory_error (errcode, (CORE_ADDR)new->lm.o_path);
|
||||
new->lm.o_path = buffer;
|
||||
solib_map_sections (new);
|
||||
xfer_link_map_member (new, lm);
|
||||
}
|
||||
return (so_list_next);
|
||||
}
|
||||
@ -582,11 +782,10 @@ symbol_add_stub (arg)
|
||||
bfd_map_over_sections (so -> abfd, find_lowest_section,
|
||||
(PTR) &lowest_sect);
|
||||
if (lowest_sect)
|
||||
text_addr = bfd_section_vma (so -> abfd, lowest_sect)
|
||||
+ (CORE_ADDR) LM_ADDR (so) - so -> lm.o_base_address;
|
||||
text_addr = bfd_section_vma (so -> abfd, lowest_sect) + LM_OFFSET (so);
|
||||
}
|
||||
|
||||
so -> objfile = symbol_file_add (so -> lm.o_path, so -> from_tty,
|
||||
so -> objfile = symbol_file_add (so -> so_name, so -> from_tty,
|
||||
text_addr,
|
||||
0, 0, 0);
|
||||
return (1);
|
||||
@ -636,7 +835,7 @@ solib_add (arg_string, from_tty, target)
|
||||
count = 0;
|
||||
while ((so = find_solib (so)) != NULL)
|
||||
{
|
||||
if (so -> lm.o_path[0])
|
||||
if (so -> so_name[0])
|
||||
{
|
||||
count += so -> sections_end - so -> sections;
|
||||
}
|
||||
@ -678,7 +877,7 @@ solib_add (arg_string, from_tty, target)
|
||||
/* Add these section table entries to the target's table. */
|
||||
while ((so = find_solib (so)) != NULL)
|
||||
{
|
||||
if (so -> lm.o_path[0])
|
||||
if (so -> so_name[0])
|
||||
{
|
||||
count = so -> sections_end - so -> sections;
|
||||
memcpy ((char *) (target -> to_sections + old),
|
||||
@ -693,14 +892,14 @@ solib_add (arg_string, from_tty, target)
|
||||
/* Now add the symbol files. */
|
||||
while ((so = find_solib (so)) != NULL)
|
||||
{
|
||||
if (so -> lm.o_path[0] && re_exec (so -> lm.o_path))
|
||||
if (so -> so_name[0] && re_exec (so -> so_name))
|
||||
{
|
||||
so -> from_tty = from_tty;
|
||||
if (so -> symbols_loaded)
|
||||
{
|
||||
if (from_tty)
|
||||
{
|
||||
printf_unfiltered ("Symbols already loaded for %s\n", so -> lm.o_path);
|
||||
printf_unfiltered ("Symbols already loaded for %s\n", so -> so_name);
|
||||
}
|
||||
}
|
||||
else if (catch_errors
|
||||
@ -751,7 +950,7 @@ info_sharedlibrary_command (ignore, from_tty)
|
||||
}
|
||||
while ((so = find_solib (so)) != NULL)
|
||||
{
|
||||
if (so -> lm.o_path[0])
|
||||
if (so -> so_name[0])
|
||||
{
|
||||
if (!header_done)
|
||||
{
|
||||
@ -766,7 +965,7 @@ info_sharedlibrary_command (ignore, from_tty)
|
||||
local_hex_string_custom ((unsigned long) so -> lmend,
|
||||
"08l"));
|
||||
printf_unfiltered ("%-12s", so -> symbols_loaded ? "Yes" : "No");
|
||||
printf_unfiltered ("%s\n", so -> lm.o_path);
|
||||
printf_unfiltered ("%s\n", so -> so_name);
|
||||
}
|
||||
}
|
||||
if (so_list_head == NULL)
|
||||
@ -807,11 +1006,11 @@ solib_address (address)
|
||||
|
||||
while ((so = find_solib (so)) != NULL)
|
||||
{
|
||||
if (so -> lm.o_path[0])
|
||||
if (so -> so_name[0])
|
||||
{
|
||||
if ((address >= (CORE_ADDR) LM_ADDR (so)) &&
|
||||
(address < (CORE_ADDR) so -> lmend))
|
||||
return (so->lm.o_path);
|
||||
return (so->so_name);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
@ -845,7 +1044,7 @@ clear_solib()
|
||||
next = so_list_head -> next;
|
||||
if (bfd_filename)
|
||||
free ((PTR)bfd_filename);
|
||||
free (so_list_head->lm.o_path);
|
||||
free (so_list_head->so_name);
|
||||
free ((PTR)so_list_head);
|
||||
so_list_head = next;
|
||||
}
|
||||
@ -993,13 +1192,13 @@ solib_create_inferior_hook()
|
||||
|
||||
clear_proceed_status ();
|
||||
stop_soon_quietly = 1;
|
||||
stop_signal = 0;
|
||||
stop_signal = TARGET_SIGNAL_0;
|
||||
do
|
||||
{
|
||||
target_resume (-1, 0, stop_signal);
|
||||
wait_for_inferior ();
|
||||
}
|
||||
while (stop_signal != SIGTRAP);
|
||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
||||
|
||||
/* We are now either at the "mapping complete" breakpoint (or somewhere
|
||||
else, a condition we aren't prepared to deal with anyway), so adjust
|
||||
|
@ -254,8 +254,8 @@ static int cur_sdx;
|
||||
/* Note how much "debuggable" this image is. We would like
|
||||
to see at least one FDR with full symbols */
|
||||
|
||||
static max_gdbinfo;
|
||||
static max_glevel;
|
||||
static int max_gdbinfo;
|
||||
static int max_glevel;
|
||||
|
||||
/* When examining .o files, report on undefined symbols */
|
||||
|
||||
@ -2745,12 +2745,12 @@ parse_partial_symbols (objfile, section_offsets)
|
||||
add_psymbol_to_list (name, strlen (name),
|
||||
VAR_NAMESPACE, LOC_BLOCK,
|
||||
&objfile->global_psymbols,
|
||||
sh.value, 0, psymtab_language, objfile);
|
||||
0, sh.value, psymtab_language, objfile);
|
||||
else
|
||||
add_psymbol_to_list (name, strlen (name),
|
||||
VAR_NAMESPACE, LOC_BLOCK,
|
||||
&objfile->static_psymbols,
|
||||
sh.value, 0, psymtab_language, objfile);
|
||||
0, sh.value, psymtab_language, objfile);
|
||||
|
||||
/* Skip over procedure to next one. */
|
||||
if (sh.index >= hdr->iauxMax)
|
||||
@ -2841,7 +2841,7 @@ parse_partial_symbols (objfile, section_offsets)
|
||||
add_psymbol_to_list (name, strlen (name),
|
||||
STRUCT_NAMESPACE, LOC_TYPEDEF,
|
||||
&objfile->static_psymbols,
|
||||
sh.value, 0,
|
||||
0, (CORE_ADDR) 0,
|
||||
psymtab_language, objfile);
|
||||
}
|
||||
handle_psymbol_enumerators (objfile, fh, sh.st, sh.value);
|
||||
@ -2879,8 +2879,8 @@ parse_partial_symbols (objfile, section_offsets)
|
||||
/* Use this gdb symbol */
|
||||
add_psymbol_to_list (name, strlen (name),
|
||||
VAR_NAMESPACE, class,
|
||||
&objfile->static_psymbols, sh.value,
|
||||
0, psymtab_language, objfile);
|
||||
&objfile->static_psymbols,
|
||||
0, sh.value, psymtab_language, objfile);
|
||||
skip:
|
||||
cur_sdx++; /* Go to next file symbol */
|
||||
}
|
||||
@ -3127,7 +3127,7 @@ handle_psymbol_enumerators (objfile, fh, stype, svalue)
|
||||
add_psymbol_to_list (name, strlen (name),
|
||||
VAR_NAMESPACE, LOC_CONST,
|
||||
&objfile->static_psymbols, 0,
|
||||
0, psymtab_language, objfile);
|
||||
(CORE_ADDR) 0, psymtab_language, objfile);
|
||||
ext_sym += external_sym_size;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user