1999-04-16 03:35:26 +02:00
|
|
|
|
/* GDB routines for manipulating objfiles.
|
2002-07-12 17:23:10 +02:00
|
|
|
|
|
|
|
|
|
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* objfiles.h (struct objfile): Add objfile_obstack field.
Remove type_obstack field.
* dwarf2read.c (dwarf2_add_field,dwarf2_add_member_fn,
read_structure_scope read_enumeration, new_symbol): Replace
type_obstack with objfile_obstack.
* dwarfread.c (struct_type, enum_type): Ditto.
* gdbtypes.c (alloc_type, alloc_type_instance, init_type)
(lookup_fundamental_type): Ditto.
* gdbtypes.h (TYPE_ALLOC): Ditto.
* hpread.c (hpread_read_enum_type, hpread_read_function_type)
(hpread_read_doc_function_type, hpread_read_struct_type)
(fix_static_member_physnames, hpread_read_array_type)
(hpread_read_subrange_type, hpread_type_lookup): Ditto.
* jv-lang.c (java_lookup_class, type_from_class, type_from_class)
(java_link_class_type): Ditto.
* mdebugread.c (parse_type): Ditto.
* objfiles.c (allocate_objfile, free_objfile): Ditto.
* solib-sunos.c (solib_add_common_symbols): Ditto.
* stabsread.c (define_symbol, read_type, read_member_functions,
read_cpp_abbrev, read_one_struct_field): Ditto.
* symfile.c (reread_symbols): Ditto.
* symmisc.c (print_objfile_statistics): Ditto.
2004-02-07 17:57:55 +01:00
|
|
|
|
2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
2002-07-12 17:23:10 +02:00
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
Contributed by Cygnus Support, using pieces from other GDB modules.
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
This file is part of GDB.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
(at your option) any later version.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330,
|
|
|
|
|
Boston, MA 02111-1307, USA. */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
/* This file contains support routines for creating, manipulating, and
|
|
|
|
|
destroying objfile structures. */
|
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
|
|
|
|
#include "bfd.h" /* Binary File Description */
|
|
|
|
|
#include "symtab.h"
|
|
|
|
|
#include "symfile.h"
|
|
|
|
|
#include "objfiles.h"
|
|
|
|
|
#include "gdb-stabs.h"
|
|
|
|
|
#include "target.h"
|
2002-07-12 17:23:10 +02:00
|
|
|
|
#include "bcache.h"
|
2004-10-31 04:42:52 +01:00
|
|
|
|
#include "mdebugread.h"
|
2003-08-22 00:35:33 +02:00
|
|
|
|
#include "gdb_assert.h"
|
1999-04-16 03:35:26 +02:00
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include "gdb_stat.h"
|
|
|
|
|
#include <fcntl.h>
|
2002-07-29 Andrew Cagney <ac131313@redhat.com>
* gdb_obstack.h: New file.
* symtab.h: Include "gdb_obstack.h" instead of "obstack.h".
(obstack_chunk_alloc, obstack_chunk_free): Delete macros.
* objfiles.h: Include "gdb_obstack.h".
* Makefile.in (gdb_obstack_h): Define.
(symtab_h): Add $(gdb_obstack_h).
(objfiles_h): Add $(gdb_obstack_h).
* objfiles.c: Include "gdb_obstack.h" instead of "obstack.h".
* macrotab.c, cp-valprint.c, dbxread.c: Ditto.
* ch-typeprint.c, ch-valprint.c, dstread.c: Ditto.
* macroexp.c, p-typeprint.c, stabsread.c: Ditto.
* symtab.c, f-typeprint.c, mdebugread.c: Ditto.
* p-valprint.c, symmisc.c, typeprint.c: Ditto.
* symfile.c, coffread.c, c-typeprint.c: Ditto.
* buildsym.c, bcache.c, ada-typeprint.c: Ditto.
* Makefile.in (bcache.o): Update dependencies.
(buildsym.o, c-typeprint.o, ch-typeprint.o): Ditto.
(ch-valprint.o, coffread.o, cp-valprint.o): Ditto.
(dbxread.o, dstread.o, f-typeprint.o): Ditto.
(objfiles.o, p-typeprint.o, p-valprint.o): Ditto.
(stabsread.o, symfile.o, symmisc.o): Ditto.
(symtab.o, typeprint.o, macroexp.o): Ditto.
(macrotab.o, mdebugread.o): Ditto.
(f_lang_h, coff_sym_h, coff_symconst_h): Define.
(coff_ecoff_h, aout_aout64_h): Define.
(aout_stabs_gnu_h, libaout_h): Define.
2002-07-30 00:55:26 +02:00
|
|
|
|
#include "gdb_obstack.h"
|
1999-04-16 03:35:26 +02:00
|
|
|
|
#include "gdb_string.h"
|
2003-02-04 19:07:01 +01:00
|
|
|
|
#include "hashtab.h"
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-04-26 20:34:20 +02:00
|
|
|
|
#include "breakpoint.h"
|
2003-02-19 David Carlton <carlton@math.stanford.edu>
* Makefile.in (SFILES): Add block.c.
(block_h): New.
(COMMON_OBS): Add block.o.
(block.o): New.
(x86-64-tdep.o): Add $(block_h).
(values.o, valops.o, tracepoint.o, symtab.o, symmisc.o, symfile.o)
(stack.o, printcmd.o, p-exp.tab.o, parse.o, objfiles.o)
(objc-exp.tab.o, objc-lang.o, nlmread.o, mips-tdep.o, mdebugread.o)
(m2-exp.tab.o, linespec.o, jv-lang.o, jv-exp.tab.o, infcmd.o)
(f-valprint.o, findvar.o, f-exp.tab.o, expprint.o, coffread.o)
(c-exp.tab.o, buildsym.o, breakpoint.o, blockframe.o, ax-gdb.o)
(alpha-tdep.o, ada-lang.o, ada-exp.tab.o, mi-cmd-stack.o): Ditto.
* value.h: Add opaque declaration for struct block.
* parser-defs.h, objc-lang.h, buildsym.h, breakpoint.h: Ditto.
* ada-lang.h: Ditto.
* x86-64-tdep.c: #include "block.h"
* values.c, valops.c, tracepoint.c, symtab.c, symmisc.c: Ditto.
* symfile.c, stack.c, printcmd.c, p-exp.y, parse.c: Ditto.
* objfiles.c, objc-exp.y, objc-lang.c, nlmread.c: Ditto.
* mips-tdep.c, mdebugread.c, m2-exp.y, linespec.c: Ditto.
* jv-lang.c, jv-exp.y, infcmd.c, f-valprint.c: Ditto.
* findvar.c, f-exp.y, expprint.c, coffread.c, c-exp.y: Ditto.
* buildsym.c, breakpoint.c, blockframe.c, ax-gdb.c: Ditto.
* alpha-tdep.c, ada-lang.c, ada-exp.y: Ditto.
* blockframe.c (blockvector_for_pc_sect): Move to "block.c".
(blockvector_for_pc, block_for_pc_sect, block_for_pc): Ditto.
* symtab.c (block_function): Ditto.
(contained_in): Ditto.
* frame.h: Move block_for_pc and block_for_pc_sect declarations to
block.h. Add opaque declaration for struct block.
* symtab.h: Move block_function and contained_in declarations to
block.h. Add opaque declarations for struct block, struct
blockvector.
(struct block): Move to block.h.
(struct blockvector): Ditto.
(BLOCK_START, BLOCK_END, BLOCK_FUNCTION, BLOCK_SUPERBLOCK)
(BLOCK_GCC_COMPILED, BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM)
(BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE)
(ALL_BLOCK_SYMBOLS, BLOCK_SHOULD_SORT, BLOCKVECTOR_NBLOCKS)
(BLOCKVECTOR_BLOCK, GLOBAL_BLOCK, STATIC_BLOCK, FIRST_LOCAL_BLOCK):
Ditto.
* block.c: New file.
* block.h: New file.
2003-02-19 David Carlton <carlton@math.stanford.edu>
* mi-cmd-stack.c: #include "block.h"
2003-02-20 01:01:07 +01:00
|
|
|
|
#include "block.h"
|
2003-06-11 David Carlton <carlton@bactrian.org>
* dictionary.h: New.
* dictionary.c: New.
* block.h: Add opaque declaration for struct dictionary.
(struct block): Add 'dict' member; delete 'hashtable', 'nsyms',
'sym' members.
(BLOCK_DICT): New macro.
Delete macros BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM,
BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE,
BLOCK_SHOULD_SORT.
(ALL_BLOCK_SYMBOLS): Update definition.
* Makefile.in (SFILES): Add dictionary.c.
(dictionary_h): New.
(COMMON_OBS): Add dictionary.o.
(dictionary.o): New.
(ada-lang.o): Depend on dictionary_h.
(buildsym.o, coffread.o, jv-lang.o, mdebugread.o, objfiles.o)
(stack.o, symmisc.o, symtab.o, tracepoint.o, valops.o)
(mi-cmd-stack.o): Ditto.
(gdbtk-cmds.o): Update dependencies.
(gdbtk-stack.o): Ditto.
* ada-lang.c: Include dictionary.h.
(symtab_for_sym): Update uses of ALL_BLOCK_SYMBOLS.
(fill_in_ada_prototype, debug_print_block): Ditto.
(ada_add_block_symbols): Update uses of ALL_BLOCK_SYMBOLS; replace
explicit iteration by use of ALL_BLOCK_SYMBOLS. Delete variable
'is_sorted'.
* mdebugread.c: Include dictionary.h.
(struct parse_stack): Delete 'maxsyms' member.
(parse_symbol): Update calls to new_block. Delete calls to
shrink_block. Use dictionary methods.
(psymtab_to_symtab_1): Delete calls to sort_symtab_syms.
Update calls to new_symtab. Don't maintain maxsyms data.
(mylookup_symbol): Update use of ALL_BLOCK_SYMBOLS.
(add_symbol): Just call dict_add_symbol.
(new_symtab): Delete 'maxsyms' argument.
(new_symtab): Update calls to new_block.
(new_block): Delete 'maxsyms' argument; add 'function' argument.
(shrink_block): Delete function.
(fixup_sigtramp): Update call to new_block. Add symbol via
dict_add_symbol.
* jv-lang.c: Include dictionary.h.
(get_java_class_symtab): Set the BLOCK_DICT of the blocks
appropriately. Set class_symtab->free_func. Make sure the
blockvector is big enough to hold two blocks.
(add_class_symtab_symbol): Use dictionary methods.
(free_class_block): New function.
(type_from_class): Replace explicit iteration by
ALL_BLOCK_SYMBOLS.
* symtab.h (struct symtab): Replace 'free_ptr' method by
'free_func'.
* dwarf2read.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* dwarfread.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* coffread.c (coff_symfile_read): Delete call to sort_symtab_syms.
Include dictionary.h.
(patch_opaque_types): Update use of ALL_BLOCK_SYMBOLS.
* dbxread.c (dbx_psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* objfiles.c: Include dictionary.h.
(objfile_relocate): Update use of ALL_BLOCK_SYMBOLS.
* buildsym.c: Include dictionary.h.
(finish_block): Use dictionary methods.
(end_symtab): Set free_func to NULL, not free_ptr.
* tracepoint.c: Include dictionary.h.
(add_local_symbols): Update use of ALL_BLOCK_SYMBOLS.
(scope_info): Ditto.
* stack.c: Include dictionary.h.
(print_block_frame_locals): Update use of ALL_BLOCK_SYMBOLS.
(print_block_frame_labels, print_frame_arg_vars)
(print_frame_args): Ditto.
* symmisc.c (free_symtab_block): Use dictionary methods.
(dump_symtab): Ditto.
(free_symtab): Replace use of 'free_ptr' by 'free_func'.
Include dictionary.h.
* symfile.h: Delete declarations of sort_block_syms,
sort_symtab_syms.
* symfile.c (sort_block_syms): Delete.
(sort_symtab_syms): Delete.
* symtab.c: Include dictionary.h.
(lookup_block_symbol): Use dictionary iterators.
(find_pc_sect_symtab): Update use of ALL_BLOCK_SYMBOLS.
(search_symbols, make_symbol_completion_list): Ditto.
(make_symbol_overload_list): Ditto.
* valops.c (value_of_local): Use dict_empty.
Include dictionary.h.
2003-06-11 David Carlton <carlton@bactrian.org>
* generic/gdbtk-stack.c: Include dictionary.h.
(gdb_block_vars): Update use of ALL_BLOCK_SYMBOLS.
(gdb_get_blocks, gdb_get_vars_command): Ditto.
* generic/gdbtk-cmds.c: Include dictionary.h.
(gdb_listfuncs): Update use of ALL_BLOCK_SYMBOLS.
2003-06-11 David Carlton <carlton@bactrian.org>
* mi-cmd-stack.c: Include dictionary.h.
(list_args_or_locals): Update use of ALL_BLOCK_SYMBOLS.
2003-06-12 01:29:49 +02:00
|
|
|
|
#include "dictionary.h"
|
1999-04-26 20:34:20 +02:00
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* Prototypes for local functions */
|
|
|
|
|
|
2003-08-22 00:35:33 +02:00
|
|
|
|
static void objfile_alloc_data (struct objfile *objfile);
|
|
|
|
|
static void objfile_free_data (struct objfile *objfile);
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* Externally visible variables that are owned by this module.
|
|
|
|
|
See declarations in objfile.h for more info. */
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
struct objfile *object_files; /* Linked list of all objfiles */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
struct objfile *current_objfile; /* For symbol file being read in */
|
|
|
|
|
struct objfile *symfile_objfile; /* Main symbol table loaded from */
|
|
|
|
|
struct objfile *rt_common_objfile; /* For runtime common symbols */
|
|
|
|
|
|
|
|
|
|
/* Locate all mappable sections of a BFD file.
|
|
|
|
|
objfile_p_char is a char * to get it through
|
|
|
|
|
bfd_map_over_sections; we cast it back to its proper type. */
|
|
|
|
|
|
|
|
|
|
#ifndef TARGET_KEEP_SECTION
|
|
|
|
|
#define TARGET_KEEP_SECTION(ASECT) 0
|
|
|
|
|
#endif
|
|
|
|
|
|
1999-08-09 23:36:23 +02:00
|
|
|
|
/* Called via bfd_map_over_sections to build up the section table that
|
|
|
|
|
the objfile references. The objfile contains pointers to the start
|
|
|
|
|
of the table (objfile->sections) and to the first location after
|
|
|
|
|
the end of the table (objfile->sections_end). */
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
static void
|
2003-11-06 03:52:28 +01:00
|
|
|
|
add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
|
|
|
|
|
void *objfile_p_char)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *objfile = (struct objfile *) objfile_p_char;
|
|
|
|
|
struct obj_section section;
|
|
|
|
|
flagword aflag;
|
|
|
|
|
|
|
|
|
|
aflag = bfd_get_section_flags (abfd, asect);
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if (!(aflag & SEC_ALLOC) && !(TARGET_KEEP_SECTION (asect)))
|
1999-04-16 03:35:26 +02:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (0 == bfd_section_size (abfd, asect))
|
|
|
|
|
return;
|
|
|
|
|
section.offset = 0;
|
|
|
|
|
section.objfile = objfile;
|
|
|
|
|
section.the_bfd_section = asect;
|
|
|
|
|
section.ovly_mapped = 0;
|
|
|
|
|
section.addr = bfd_section_vma (abfd, asect);
|
|
|
|
|
section.endaddr = section.addr + bfd_section_size (abfd, asect);
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* dbxread.c (dbx_symfile_init, start_psymtab, end_psymtab,
coffstab_build_psymtabs, elfstab_build_psymtabs)
(stabsect_build_psymtabs): Replace psymbol_obstack with
objfile_obstack.
* dwarf2-frame.c (decode_frame_entry_1): Ditto.
* dwarf2read.c (dwarf2_build_psymtabs_hard, dwarf2_read_section):
Ditto.
* dwarfread.c (scan_compilation_units): Ditto.
* elfread.c (elfstab_offset_sections): Ditto.
* hppa-tdep.c (read_unwind_info): Ditto.
* hpread.c (hpread_build_psymtabs, hpread_start_psymtab)
(hpread_end_psymtab): Ditto.
* mdebugread.c (mdebug_build_psymtabs, add_pending)
(parse_partial_symbols, new_psymtab, elfmdebug_build_psymtabs):
Ditto.
* mips-tdep.c (non_heuristic_proc_desc): Ditto.
* objfiles.c (add_to_objfile_sections)
(build_objfile_section_table): Ditto.
(allocate_objfile): Remove init of psymbol_obstack.
(free_objfile): Remove freeing of psymbol_obstack.
* objfiles.h (struct objfile): Remove field
psymbol_obstack. Update comments.
* pa64solib.c (pa64_solib_add_solib_objfile): Replace
psymbol_obstack with objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
psymbol_obstack.
* somread.c (som_symfile_offsets, init_import_symbols)
(init_export_symbols): Replace psymbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add_solib_objfile): Ditto.
* symfile.c (default_symfile_offsets, syms_from_objfile)
(reread_symbols): Remove freeing and init of psymbol_obstack.
(cashier_psymtab): Update comment.
* symmisc.c (print_objfile_statistics): Don't report stats for
psymbol obstack.
* symtab.h (struct general_symbol_info, struct partial_symtab):
Update comments.
* xcoffread.c (xcoff_start_psymtab, xcoff_end_psymtab, swap_sym)
(xcoff_symfile_offsets): Replace psymbol_obstack with
objfile_obstack.
2004-02-07 19:29:54 +01:00
|
|
|
|
obstack_grow (&objfile->objfile_obstack, (char *) §ion, sizeof (section));
|
1999-04-16 03:35:26 +02:00
|
|
|
|
objfile->sections_end = (struct obj_section *) (((unsigned long) objfile->sections_end) + 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Builds a section table for OBJFILE.
|
|
|
|
|
Returns 0 if OK, 1 on error (in which case bfd_error contains the
|
1999-08-09 23:36:23 +02:00
|
|
|
|
error).
|
|
|
|
|
|
|
|
|
|
Note that while we are building the table, which goes into the
|
|
|
|
|
psymbol obstack, we hijack the sections_end pointer to instead hold
|
|
|
|
|
a count of the number of sections. When bfd_map_over_sections
|
|
|
|
|
returns, this count is used to compute the pointer to the end of
|
|
|
|
|
the sections table, which then overwrites the count.
|
|
|
|
|
|
|
|
|
|
Also note that the OFFSET and OVLY_MAPPED in each table entry
|
|
|
|
|
are initialized to zero.
|
|
|
|
|
|
|
|
|
|
Also note that if anything else writes to the psymbol obstack while
|
|
|
|
|
we are building the table, we're pretty much hosed. */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
build_objfile_section_table (struct objfile *objfile)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
/* objfile->sections can be already set when reading a mapped symbol
|
|
|
|
|
file. I believe that we do need to rebuild the section table in
|
|
|
|
|
this case (we rebuild other things derived from the bfd), but we
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* dbxread.c (dbx_symfile_init, start_psymtab, end_psymtab,
coffstab_build_psymtabs, elfstab_build_psymtabs)
(stabsect_build_psymtabs): Replace psymbol_obstack with
objfile_obstack.
* dwarf2-frame.c (decode_frame_entry_1): Ditto.
* dwarf2read.c (dwarf2_build_psymtabs_hard, dwarf2_read_section):
Ditto.
* dwarfread.c (scan_compilation_units): Ditto.
* elfread.c (elfstab_offset_sections): Ditto.
* hppa-tdep.c (read_unwind_info): Ditto.
* hpread.c (hpread_build_psymtabs, hpread_start_psymtab)
(hpread_end_psymtab): Ditto.
* mdebugread.c (mdebug_build_psymtabs, add_pending)
(parse_partial_symbols, new_psymtab, elfmdebug_build_psymtabs):
Ditto.
* mips-tdep.c (non_heuristic_proc_desc): Ditto.
* objfiles.c (add_to_objfile_sections)
(build_objfile_section_table): Ditto.
(allocate_objfile): Remove init of psymbol_obstack.
(free_objfile): Remove freeing of psymbol_obstack.
* objfiles.h (struct objfile): Remove field
psymbol_obstack. Update comments.
* pa64solib.c (pa64_solib_add_solib_objfile): Replace
psymbol_obstack with objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
psymbol_obstack.
* somread.c (som_symfile_offsets, init_import_symbols)
(init_export_symbols): Replace psymbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add_solib_objfile): Ditto.
* symfile.c (default_symfile_offsets, syms_from_objfile)
(reread_symbols): Remove freeing and init of psymbol_obstack.
(cashier_psymtab): Update comment.
* symmisc.c (print_objfile_statistics): Don't report stats for
psymbol obstack.
* symtab.h (struct general_symbol_info, struct partial_symtab):
Update comments.
* xcoffread.c (xcoff_start_psymtab, xcoff_end_psymtab, swap_sym)
(xcoff_symfile_offsets): Replace psymbol_obstack with
objfile_obstack.
2004-02-07 19:29:54 +01:00
|
|
|
|
can't free the old one (it's in the objfile_obstack). So we just
|
1999-04-16 03:35:26 +02:00
|
|
|
|
waste some memory. */
|
|
|
|
|
|
|
|
|
|
objfile->sections_end = 0;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
bfd_map_over_sections (objfile->obfd, add_to_objfile_sections, (char *) objfile);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
objfile->sections = (struct obj_section *)
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* dbxread.c (dbx_symfile_init, start_psymtab, end_psymtab,
coffstab_build_psymtabs, elfstab_build_psymtabs)
(stabsect_build_psymtabs): Replace psymbol_obstack with
objfile_obstack.
* dwarf2-frame.c (decode_frame_entry_1): Ditto.
* dwarf2read.c (dwarf2_build_psymtabs_hard, dwarf2_read_section):
Ditto.
* dwarfread.c (scan_compilation_units): Ditto.
* elfread.c (elfstab_offset_sections): Ditto.
* hppa-tdep.c (read_unwind_info): Ditto.
* hpread.c (hpread_build_psymtabs, hpread_start_psymtab)
(hpread_end_psymtab): Ditto.
* mdebugread.c (mdebug_build_psymtabs, add_pending)
(parse_partial_symbols, new_psymtab, elfmdebug_build_psymtabs):
Ditto.
* mips-tdep.c (non_heuristic_proc_desc): Ditto.
* objfiles.c (add_to_objfile_sections)
(build_objfile_section_table): Ditto.
(allocate_objfile): Remove init of psymbol_obstack.
(free_objfile): Remove freeing of psymbol_obstack.
* objfiles.h (struct objfile): Remove field
psymbol_obstack. Update comments.
* pa64solib.c (pa64_solib_add_solib_objfile): Replace
psymbol_obstack with objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
psymbol_obstack.
* somread.c (som_symfile_offsets, init_import_symbols)
(init_export_symbols): Replace psymbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add_solib_objfile): Ditto.
* symfile.c (default_symfile_offsets, syms_from_objfile)
(reread_symbols): Remove freeing and init of psymbol_obstack.
(cashier_psymtab): Update comment.
* symmisc.c (print_objfile_statistics): Don't report stats for
psymbol obstack.
* symtab.h (struct general_symbol_info, struct partial_symtab):
Update comments.
* xcoffread.c (xcoff_start_psymtab, xcoff_end_psymtab, swap_sym)
(xcoff_symfile_offsets): Replace psymbol_obstack with
objfile_obstack.
2004-02-07 19:29:54 +01:00
|
|
|
|
obstack_finish (&objfile->objfile_obstack);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
objfile->sections_end = objfile->sections + (unsigned long) objfile->sections_end;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
return (0);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
1999-10-12 06:37:53 +02:00
|
|
|
|
/* Given a pointer to an initialized bfd (ABFD) and some flag bits
|
|
|
|
|
allocate a new objfile struct, fill it in as best we can, link it
|
|
|
|
|
into the list of all known objfiles, and return a pointer to the
|
|
|
|
|
new objfile struct.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-10-12 06:37:53 +02:00
|
|
|
|
The FLAGS word contains various bits (OBJF_*) that can be taken as
|
2004-01-19 20:56:02 +01:00
|
|
|
|
requests for specific operations. Other bits like OBJF_SHARED are
|
|
|
|
|
simply copied through to the new objfile flags member. */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
2003-02-04 22:55:26 +01:00
|
|
|
|
/* NOTE: carlton/2003-02-04: This function is called with args NULL, 0
|
|
|
|
|
by jv-lang.c, to create an artificial objfile used to hold
|
|
|
|
|
information about dynamically-loaded Java classes. Unfortunately,
|
|
|
|
|
that branch of this function doesn't get tested very frequently, so
|
|
|
|
|
it's prone to breakage. (E.g. at one time the name was set to NULL
|
|
|
|
|
in that situation, which broke a loop over all names in the dynamic
|
|
|
|
|
library loader.) If you change this function, please try to leave
|
|
|
|
|
things in a consistent state even if abfd is NULL. */
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
struct objfile *
|
2000-07-30 03:48:28 +02:00
|
|
|
|
allocate_objfile (bfd *abfd, int flags)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *objfile = NULL;
|
|
|
|
|
struct objfile *last_one = NULL;
|
|
|
|
|
|
|
|
|
|
/* If we don't support mapped symbol files, didn't ask for the file to be
|
|
|
|
|
mapped, or failed to open the mapped file for some reason, then revert
|
|
|
|
|
back to an unmapped objfile. */
|
|
|
|
|
|
|
|
|
|
if (objfile == NULL)
|
|
|
|
|
{
|
|
|
|
|
objfile = (struct objfile *) xmalloc (sizeof (struct objfile));
|
|
|
|
|
memset (objfile, 0, sizeof (struct objfile));
|
1999-07-07 22:19:36 +02:00
|
|
|
|
objfile->md = NULL;
|
2002-07-12 17:23:10 +02:00
|
|
|
|
objfile->psymbol_cache = bcache_xmalloc ();
|
|
|
|
|
objfile->macro_cache = bcache_xmalloc ();
|
2004-02-10 00:50:55 +01:00
|
|
|
|
/* We could use obstack_specify_allocation here instead, but
|
|
|
|
|
gdb_obstack.h specifies the alloc/dealloc functions. */
|
|
|
|
|
obstack_init (&objfile->objfile_obstack);
|
2003-02-03 21:39:41 +01:00
|
|
|
|
terminate_minimal_symbol_table (objfile);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
2003-08-22 00:35:33 +02:00
|
|
|
|
objfile_alloc_data (objfile);
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* Update the per-objfile information that comes from the bfd, ensuring
|
|
|
|
|
that any data that is reference is saved in the per-objfile data
|
|
|
|
|
region. */
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
objfile->obfd = abfd;
|
|
|
|
|
if (objfile->name != NULL)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
2004-08-10 23:52:05 +02:00
|
|
|
|
xfree (objfile->name);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
if (abfd != NULL)
|
|
|
|
|
{
|
2004-09-30 21:57:54 +02:00
|
|
|
|
objfile->name = xstrdup (bfd_get_filename (abfd));
|
1999-07-07 22:19:36 +02:00
|
|
|
|
objfile->mtime = bfd_get_mtime (abfd);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
/* Build section table. */
|
|
|
|
|
|
|
|
|
|
if (build_objfile_section_table (objfile))
|
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
error ("Can't find the file sections in `%s': %s",
|
|
|
|
|
objfile->name, bfd_errmsg (bfd_get_error ()));
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2003-02-04 22:55:26 +01:00
|
|
|
|
else
|
|
|
|
|
{
|
2004-09-30 21:57:54 +02:00
|
|
|
|
objfile->name = xstrdup ("<<anonymous objfile>>");
|
2003-02-04 22:55:26 +01:00
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* objfiles.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Define as functions of OBJFILE. Add
sect_index_text, sect_index_data, sect_index_rodata,
sect_index_bss to objfile structure.
* gdb-stabs.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Remove.
* objfiles.c (allocate_objfile): Initialize
sect_index_{text,data,bss,rodata} to -1, for error detection.
* symfile.c (default_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata} from bfd information.
* xcoffread.c (xcoff_symfile_offsets): Ditto.
* somread.c (som_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata}.
* coffread.c, dbxread.c, elfread.c, hp-psymtab-read.c,
hp-symtab-read.c, hpread.c, mdebugread.c, minsyms.c,
mipsread.c, objfiles.c, os9kread.c, pa64solib.c, partial-stab.h,
remote-os9k.c, remote-vx.c, remote.c, rs6000-nat.c, somsolib.c,
stabsread.c, symfile.c, xcoffread.c:
Update use of SECT_OFF_{TEXT,DATA,BSS,RODATA} to depend on the
current objfile.
* xcoffread.c: Add new field objfile to find_targ_sec_arg.
2000-05-04 18:52:34 +02:00
|
|
|
|
/* Initialize the section indexes for this objfile, so that we can
|
|
|
|
|
later detect if they are used w/o being properly assigned to. */
|
|
|
|
|
|
2003-09-11 David Carlton <carlton@kealia.com>
* gdbtypes.h: Add TYPE_CODE_NAMESPACE.
* gdbtypes.c (init_type): Handle TYPE_CODE_NAMESPACE.
(recursive_dump_type): Ditto.
* printcmd.c (print_formatted): Ditto.
* typeprint.c (print_type_scalar): Ditto.
* c-typeprint.c (c_type_print_varspec_prefix): Ditto.
(c_type_print_varspec_suffix, c_type_print_base): Ditto.
* cp-support.h: Declare cp_check_possible_namespace_symbols,
maint_cplus_cmd_list.
* cp-support.c: Make maint_cplus_cmd_list extern.
* cp-namespace.c: Include objfiles.h, gdbtypes.h, dictionary.h,
command.h.
(lookup_symbol_file): Look in possible namespace blocks when
appropriate.
(initialize_namespace_symtab): New.
(get_possible_namespace_block, free_namespace_block)
(check_possible_namespace_symbols)
(check_possible_namespace_symbols_loop)
(check_one_possible_namespace_symbol)
(lookup_possible_namespace_symbol, maintenance_cplus_namespace)
(_initialize_cp_namespace): Ditto.
* block.h: Declare allocate_block.
* block.c (allocate_block): New.
* jv-lang.c (get_java_class_symtab): Allocate blocks via
allocate_block.
* symfile.h: Update declaration of add_psymbol_to_list.
* symfile.c (add_psymbol_to_list): Return the partial symbol in
question.
* dwarf2read.c (dwarf2_build_psymtabs_hard): Add argument to
scan_partial_symbols_call.
(scan_partial_symbols): Add NAMESPACE argument; update calls to
helper functions.
(add_partial_symbol): If necessary, scan mangled names for names
of namespaces.
(add_partial_namespace): Add NAMESPACE argument; generate partial
symbols associated to namespaces.
(add_partial_enumeration): Add NAMESPACE argument.
(new_symbol): Allow namespace syms.
(read_namespace): Generate namespace syms.
* objfiles.h: Add opaque declaration of struct symtab.
(struct objfile): Add cp_namespace_symtab member.
* objfiles.c (allocate_objfile): Set
objfile->cp_namespace_symtab.
* Makefile.in (cp-namespace.o): Depend on objfiles_h, gdbtypes_h,
dictionary_h, command_h.
2003-09-11 David Carlton <carlton@kealia.com>
* gdb.c++/namespace.exp: Add tests for namespace types.
* gdb.c++/maint.exp (test_help): Test 'help maint cp namespace'.
(test_namespace): New.
2003-09-11 21:49:20 +02:00
|
|
|
|
objfile->sect_index_text = -1;
|
|
|
|
|
objfile->sect_index_data = -1;
|
|
|
|
|
objfile->sect_index_bss = -1;
|
|
|
|
|
objfile->sect_index_rodata = -1;
|
|
|
|
|
|
|
|
|
|
/* We don't yet have a C++-specific namespace symtab. */
|
|
|
|
|
|
|
|
|
|
objfile->cp_namespace_symtab = NULL;
|
Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* objfiles.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Define as functions of OBJFILE. Add
sect_index_text, sect_index_data, sect_index_rodata,
sect_index_bss to objfile structure.
* gdb-stabs.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Remove.
* objfiles.c (allocate_objfile): Initialize
sect_index_{text,data,bss,rodata} to -1, for error detection.
* symfile.c (default_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata} from bfd information.
* xcoffread.c (xcoff_symfile_offsets): Ditto.
* somread.c (som_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata}.
* coffread.c, dbxread.c, elfread.c, hp-psymtab-read.c,
hp-symtab-read.c, hpread.c, mdebugread.c, minsyms.c,
mipsread.c, objfiles.c, os9kread.c, pa64solib.c, partial-stab.h,
remote-os9k.c, remote-vx.c, remote.c, rs6000-nat.c, somsolib.c,
stabsread.c, symfile.c, xcoffread.c:
Update use of SECT_OFF_{TEXT,DATA,BSS,RODATA} to depend on the
current objfile.
* xcoffread.c: Add new field objfile to find_targ_sec_arg.
2000-05-04 18:52:34 +02:00
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* Add this file onto the tail of the linked list of other such files. */
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
objfile->next = NULL;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
if (object_files == NULL)
|
|
|
|
|
object_files = objfile;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (last_one = object_files;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
last_one->next;
|
|
|
|
|
last_one = last_one->next);
|
|
|
|
|
last_one->next = objfile;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
1999-10-12 06:37:53 +02:00
|
|
|
|
/* Save passed in flag bits. */
|
|
|
|
|
objfile->flags |= flags;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
return (objfile);
|
|
|
|
|
}
|
|
|
|
|
|
2004-02-14 Elena Zannoni <ezannoni@redhat.com>
* symfile.c (init_entry_point_info, entry_point_address): Move
from here...
* objfiles.c (init_entry_point_info, entry_point_address):..to
here.
* symfile.h (init_entry_point_info, entry_point_address): Remove
prototypes.
* objfiles.h (init_entry_point_info, entry_point_address):Add
prototypes.
* cris-tdep.c: Remove include of symfile.h. Add include of
objfiles.h.
* infcall.c: Ditto.
* mcore-tdep.c: Ditto.
* mn10300-tdep.c: Ditto.
* sh64-tdep.c: Ditto.
* v850-tdep.c: Ditto.
* arm-tdep.c: Remove include of symfile.h.
* blockframe.c: Ditto.
* coffread.c: Ditto.
* dbxread.c: Ditto.
* dwarf2read.c: Ditto.
* dwarfread.c: Ditto.
* frv-tdep.c: Ditto.
* ia64-tdep.c: Ditto.
* mdebugread.c: Ditto.
* mipsread.c: Ditto.
* rs6000-tdep.c: Ditto.
* s390-tdep.c: Ditto.
* sh-tdep.c: Ditto.
* xstormy16-tdep.c: Ditto.
* gdbarch.sh: Remove include of symfile.h.
* gdbarch.c: Regenerate.
* solib-irix.c (enable_break): Use entry_point_address().
Add comment about include file.
* xcoffread.c: Add comment about include file.
* Makefile.in (arm-tdep.o, blockframe.o, coffread.o, cris-tdep.o)
(dbxread.o, dwarf2read.o, dwarfread.o, frv-tdep.o, gdbarch.o)
(ia64-tdep.o, infcall.o, mcore-tdep.o, mdebugread.o, mipsread.o)
(mn10300-tdep.o, rs6000-nat.o, s390-tdep.o, sh64-tdep.o)
(sh-tdep.o, v850-tdep.o, xstormy16-tdep.o): Update dependencies.
2004-02-14 16:46:33 +01:00
|
|
|
|
/* Initialize entry point information for this objfile. */
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
init_entry_point_info (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
/* Save startup file's range of PC addresses to help blockframe.c
|
|
|
|
|
decide where the bottom of the stack is. */
|
|
|
|
|
|
|
|
|
|
if (bfd_get_file_flags (objfile->obfd) & EXEC_P)
|
|
|
|
|
{
|
|
|
|
|
/* Executable file -- record its entry point so we'll recognize
|
|
|
|
|
the startup file because it contains the entry point. */
|
|
|
|
|
objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
/* Examination of non-executable.o files. Short-circuit this stuff. */
|
|
|
|
|
objfile->ei.entry_point = INVALID_ENTRY_POINT;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Get current entry point address. */
|
|
|
|
|
|
|
|
|
|
CORE_ADDR
|
|
|
|
|
entry_point_address (void)
|
|
|
|
|
{
|
|
|
|
|
return symfile_objfile ? symfile_objfile->ei.entry_point : 0;
|
|
|
|
|
}
|
2003-02-03 21:39:41 +01:00
|
|
|
|
|
|
|
|
|
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
|
|
|
|
If OBJFILE->msymbols is zero, allocate a single entry from
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* buildsym.c (free_pending_blocks, finish_block)
(record_pending_block, make_blockvector, end_symtab): Replace
symbol_obstack with objfile_obstack.
* coffread.c (process_coff_symbol, coff_read_struct_type)
(coff_read_enum_type): Ditto.
* cp-namespace.c (initialize_namespace_symtab)
(check_one_possible_namespace_symbol): Ditto.
* dwarf2read.c (new_symbol, dwarf2_const_value, macro_start_file)
(dwarf2_symbol_mark_computed): Ditto.
* dwarfread.c (enum_type, new_symbol, synthesize_typedef): Ditto.
* elfread.c (elf_symtab_read): Ditto.
* hpread.c (hpread_symfile_init, hpread_symfile_init)
(hpread_read_enum_type, hpread_read_function_type)
(hpread_read_doc_function_type, hpread_process_one_debug_symbol):
Ditto.
* jv-lang.c (get_java_class_symtab, add_class_symbol)
(java_link_class_type): Ditto.
* mdebugread.c (parse_symbol, psymtab_to_symtab_1, new_symtab)
(new_symbol): Ditto.
* minsyms.c (install_minimal_symbols): Ditto.
* objfiles.c (allocate_objfile): Remove init of symbol_obstack.
(terminate_minimal_symbol_table): Replace symbol_obstack with
objfile_obstack.
(free_objfile): Remove freeing of symbol_obstack.
* objfiles.h: Remove symbol_obstack field.
* pa64solib.c (add_to_solist): Replace symbol_obstack with
objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
symbol_obstack.
(solib_add_common_symbols): Replace symbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add): Ditto.
* stabsread.c (patch_block_stabs, define_symbol, read_enum_type)
(common_block_start, common_block_end): Ditto.
* symfile.c (reread_symbols): Remove freeing and init of
symbol_obstack.
(allocate_symtab): Rename symbol_obstack to objfile_obstack.
* symfile.h: Update comment.
* symmisc.c (print_objfile_statistics): Remove symbol_obstack
stats printing.
* symtab.c (symbol_set_names): Replace symbol_obstack with
objfile_obstack.
* symtab.h (struct general_symbol_info, struct minimal_symbol):
Update comments.
* xcoffread.c (read_xcoff_symtab, SYMBOL_DUP, SYMNAME_ALLOC)
(init_stringtab, xcoff_initial_scan): Replace symbol_obstack with
objfile_obstack.
2004-02-08 00:13:47 +01:00
|
|
|
|
OBJFILE->objfile_obstack; otherwise, just initialize
|
2003-02-03 21:39:41 +01:00
|
|
|
|
OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */
|
|
|
|
|
void
|
|
|
|
|
terminate_minimal_symbol_table (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
if (! objfile->msymbols)
|
|
|
|
|
objfile->msymbols = ((struct minimal_symbol *)
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* buildsym.c (free_pending_blocks, finish_block)
(record_pending_block, make_blockvector, end_symtab): Replace
symbol_obstack with objfile_obstack.
* coffread.c (process_coff_symbol, coff_read_struct_type)
(coff_read_enum_type): Ditto.
* cp-namespace.c (initialize_namespace_symtab)
(check_one_possible_namespace_symbol): Ditto.
* dwarf2read.c (new_symbol, dwarf2_const_value, macro_start_file)
(dwarf2_symbol_mark_computed): Ditto.
* dwarfread.c (enum_type, new_symbol, synthesize_typedef): Ditto.
* elfread.c (elf_symtab_read): Ditto.
* hpread.c (hpread_symfile_init, hpread_symfile_init)
(hpread_read_enum_type, hpread_read_function_type)
(hpread_read_doc_function_type, hpread_process_one_debug_symbol):
Ditto.
* jv-lang.c (get_java_class_symtab, add_class_symbol)
(java_link_class_type): Ditto.
* mdebugread.c (parse_symbol, psymtab_to_symtab_1, new_symtab)
(new_symbol): Ditto.
* minsyms.c (install_minimal_symbols): Ditto.
* objfiles.c (allocate_objfile): Remove init of symbol_obstack.
(terminate_minimal_symbol_table): Replace symbol_obstack with
objfile_obstack.
(free_objfile): Remove freeing of symbol_obstack.
* objfiles.h: Remove symbol_obstack field.
* pa64solib.c (add_to_solist): Replace symbol_obstack with
objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
symbol_obstack.
(solib_add_common_symbols): Replace symbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add): Ditto.
* stabsread.c (patch_block_stabs, define_symbol, read_enum_type)
(common_block_start, common_block_end): Ditto.
* symfile.c (reread_symbols): Remove freeing and init of
symbol_obstack.
(allocate_symtab): Rename symbol_obstack to objfile_obstack.
* symfile.h: Update comment.
* symmisc.c (print_objfile_statistics): Remove symbol_obstack
stats printing.
* symtab.c (symbol_set_names): Replace symbol_obstack with
objfile_obstack.
* symtab.h (struct general_symbol_info, struct minimal_symbol):
Update comments.
* xcoffread.c (read_xcoff_symtab, SYMBOL_DUP, SYMNAME_ALLOC)
(init_stringtab, xcoff_initial_scan): Replace symbol_obstack with
objfile_obstack.
2004-02-08 00:13:47 +01:00
|
|
|
|
obstack_alloc (&objfile->objfile_obstack,
|
2003-02-03 21:39:41 +01:00
|
|
|
|
sizeof (objfile->msymbols[0])));
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct minimal_symbol *m
|
|
|
|
|
= &objfile->msymbols[objfile->minimal_symbol_count];
|
|
|
|
|
|
|
|
|
|
memset (m, 0, sizeof (*m));
|
2004-02-17 20:37:37 +01:00
|
|
|
|
/* Don't rely on these enumeration values being 0's. */
|
|
|
|
|
MSYMBOL_TYPE (m) = mst_unknown;
|
2003-02-03 21:39:41 +01:00
|
|
|
|
SYMBOL_INIT_LANGUAGE_SPECIFIC (m, language_unknown);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
gdb/ChangeLog:
2003-01-23 Alexander Larsson <alexl@redhat.com>
Jim Blandy <jimb@redhat.com>
Add support for executables whose debug info has been separated
out into a separate file, leaving only a link behind.
* objfiles.h (struct objfile): New fields: separate_debug_objfile
and separate_debug_objfile_backlink.
(put_objfile_before): New declaration.
* symfile.c: #include "filenames.h".
(symbol_file_add_with_addrs_or_offsets): If this objfile has its
debug info in a separate file, read that, too. Save the addrs
argument, so we can use it again to read the separated debug info;
syms_from_objfile modifies the table we pass it.
(reread_symbols): After re-reading an objfile, call
reread_separate_symbols to refresh its separate debug info
objfile, if it has one.
(reread_separate_symbols, find_separate_debug_file,
get_debug_link_info, separate_debug_file_exists): New functions.
(debug_file_directory): New global var.
(_initialize_symfile): Initialize debug_file_directory, and
provide the new `set debug-file-directory' command to let the user
change it.
* objfiles.c (free_objfile): If this objfile has its debug info in
a separate objfile, free that one too. If this is itself a
separate debug info objfile, clear our parent's backlink.
(put_objfile_before): New function.
* utils.c (gnu_debuglink_crc32): New function.
* defs.h (gnu_debuglink_crc32): New declaration.
* Makefile.in (symfile.o): Note dependency on "filenames.h".
* configure.in: Handle --with-separate-debug-dir config option.
* acinclude.m4 (AC_DEFINE_DIR): New macro.
* acconfig.h (DEBUGDIR): New macro.
* configure, aclocal.m4, config.in: Regenerated.
gdb/doc/ChangeLog:
2003-01-23 Jim Blandy <jimb@redhat.com>
* gdb.texinfo (Separate Debug Files): New section.
2003-01-24 00:03:32 +01:00
|
|
|
|
/* Put one object file before a specified on in the global list.
|
|
|
|
|
This can be used to make sure an object file is destroyed before
|
|
|
|
|
another when using ALL_OBJFILES_SAFE to free all objfiles. */
|
|
|
|
|
void
|
|
|
|
|
put_objfile_before (struct objfile *objfile, struct objfile *before_this)
|
|
|
|
|
{
|
|
|
|
|
struct objfile **objp;
|
|
|
|
|
|
|
|
|
|
unlink_objfile (objfile);
|
|
|
|
|
|
|
|
|
|
for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
|
|
|
|
|
{
|
|
|
|
|
if (*objp == before_this)
|
|
|
|
|
{
|
|
|
|
|
objfile->next = *objp;
|
|
|
|
|
*objp = objfile;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal_error (__FILE__, __LINE__,
|
|
|
|
|
"put_objfile_before: before objfile not in list");
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* Put OBJFILE at the front of the list. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
objfile_to_front (struct objfile *objfile)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile **objp;
|
|
|
|
|
for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
|
|
|
|
|
{
|
|
|
|
|
if (*objp == objfile)
|
|
|
|
|
{
|
|
|
|
|
/* Unhook it from where it is. */
|
|
|
|
|
*objp = objfile->next;
|
|
|
|
|
/* Put it in the front. */
|
|
|
|
|
objfile->next = object_files;
|
|
|
|
|
object_files = objfile;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Unlink OBJFILE from the list of known objfiles, if it is found in the
|
|
|
|
|
list.
|
|
|
|
|
|
|
|
|
|
It is not a bug, or error, to call this function if OBJFILE is not known
|
|
|
|
|
to be in the current list. This is done in the case of mapped objfiles,
|
|
|
|
|
for example, just to ensure that the mapped objfile doesn't appear twice
|
|
|
|
|
in the list. Since the list is threaded, linking in a mapped objfile
|
|
|
|
|
twice would create a circular list.
|
|
|
|
|
|
|
|
|
|
If OBJFILE turns out to be in the list, we zap it's NEXT pointer after
|
|
|
|
|
unlinking it, just to ensure that we have completely severed any linkages
|
|
|
|
|
between the OBJFILE and the list. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
unlink_objfile (struct objfile *objfile)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
struct objfile **objpp;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if (*objpp == objfile)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
*objpp = (*objpp)->next;
|
|
|
|
|
objfile->next = NULL;
|
Deal with the inferior unloading shared objects.
* solib.c (current_sos): New function, replacing find_solib.
(find_solib): Deleted.
(free_so): New function.
(clear_solib): Call free_so, instead of writing it out.
(solib_add): Rewritten: compare the inferior's current list of
shared objects with GDB's list, and do the required loads and
unloads.
(info_sharedlibrary_command, solib_address): Don't use find_solib
to walk the list of shared libraries: call solib_add, and then
walk the list at so_list_head normally.
* objfiles.c (free_objfile): Don't call CLEAR_SOLIB, and don't
detach the core target. These tasks are taken care of elsewhere.
* target.c (remove_target_sections): New function.
* target.h (remove_target_sections): New declaration.
* solib.c (symbol_add_stub): Check whether we've already created
an objfile for this shared object first, before doing all that
work to compute section addresses, etc.
* objfiles.c (unlink_objfile): Report an internal error if objfile
doesn't occur in the object_files list.
* solib.c (special_symbol_handling): Delete argument; it's not
used.
* solib.c (SOLIB_EXTRACT_ADDRESS): New macro to extract addresses
from solib structures. Use it throughout solib.c, get rid of all
CORE_ADDR casts.
(struct so_list): Change type of lmaddr to CORE_ADDR.
(first_link_map_member): Change return value type to CORE_ADDR,
update callers.
(solib_add_common_symbols): Change parameter type to CORE_ADDR,
update callers.
(open_symbol_file_object, find_solib): Change type of lm variable
to CORE_ADDR.
2000-03-15 17:55:07 +01:00
|
|
|
|
return;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
Deal with the inferior unloading shared objects.
* solib.c (current_sos): New function, replacing find_solib.
(find_solib): Deleted.
(free_so): New function.
(clear_solib): Call free_so, instead of writing it out.
(solib_add): Rewritten: compare the inferior's current list of
shared objects with GDB's list, and do the required loads and
unloads.
(info_sharedlibrary_command, solib_address): Don't use find_solib
to walk the list of shared libraries: call solib_add, and then
walk the list at so_list_head normally.
* objfiles.c (free_objfile): Don't call CLEAR_SOLIB, and don't
detach the core target. These tasks are taken care of elsewhere.
* target.c (remove_target_sections): New function.
* target.h (remove_target_sections): New declaration.
* solib.c (symbol_add_stub): Check whether we've already created
an objfile for this shared object first, before doing all that
work to compute section addresses, etc.
* objfiles.c (unlink_objfile): Report an internal error if objfile
doesn't occur in the object_files list.
* solib.c (special_symbol_handling): Delete argument; it's not
used.
* solib.c (SOLIB_EXTRACT_ADDRESS): New macro to extract addresses
from solib structures. Use it throughout solib.c, get rid of all
CORE_ADDR casts.
(struct so_list): Change type of lmaddr to CORE_ADDR.
(first_link_map_member): Change return value type to CORE_ADDR,
update callers.
(solib_add_common_symbols): Change parameter type to CORE_ADDR,
update callers.
(open_symbol_file_object, find_solib): Change type of lm variable
to CORE_ADDR.
2000-03-15 17:55:07 +01:00
|
|
|
|
|
2001-02-08 07:03:54 +01:00
|
|
|
|
internal_error (__FILE__, __LINE__,
|
|
|
|
|
"unlink_objfile: objfile already unlinked");
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Destroy an objfile and all the symtabs and psymtabs under it. Note
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* buildsym.c (free_pending_blocks, finish_block)
(record_pending_block, make_blockvector, end_symtab): Replace
symbol_obstack with objfile_obstack.
* coffread.c (process_coff_symbol, coff_read_struct_type)
(coff_read_enum_type): Ditto.
* cp-namespace.c (initialize_namespace_symtab)
(check_one_possible_namespace_symbol): Ditto.
* dwarf2read.c (new_symbol, dwarf2_const_value, macro_start_file)
(dwarf2_symbol_mark_computed): Ditto.
* dwarfread.c (enum_type, new_symbol, synthesize_typedef): Ditto.
* elfread.c (elf_symtab_read): Ditto.
* hpread.c (hpread_symfile_init, hpread_symfile_init)
(hpread_read_enum_type, hpread_read_function_type)
(hpread_read_doc_function_type, hpread_process_one_debug_symbol):
Ditto.
* jv-lang.c (get_java_class_symtab, add_class_symbol)
(java_link_class_type): Ditto.
* mdebugread.c (parse_symbol, psymtab_to_symtab_1, new_symtab)
(new_symbol): Ditto.
* minsyms.c (install_minimal_symbols): Ditto.
* objfiles.c (allocate_objfile): Remove init of symbol_obstack.
(terminate_minimal_symbol_table): Replace symbol_obstack with
objfile_obstack.
(free_objfile): Remove freeing of symbol_obstack.
* objfiles.h: Remove symbol_obstack field.
* pa64solib.c (add_to_solist): Replace symbol_obstack with
objfile_obstack.
* solib-sunos.c (allocate_rt_common_objfile): Remove init of
symbol_obstack.
(solib_add_common_symbols): Replace symbol_obstack with
objfile_obstack.
* somsolib.c (som_solib_add): Ditto.
* stabsread.c (patch_block_stabs, define_symbol, read_enum_type)
(common_block_start, common_block_end): Ditto.
* symfile.c (reread_symbols): Remove freeing and init of
symbol_obstack.
(allocate_symtab): Rename symbol_obstack to objfile_obstack.
* symfile.h: Update comment.
* symmisc.c (print_objfile_statistics): Remove symbol_obstack
stats printing.
* symtab.c (symbol_set_names): Replace symbol_obstack with
objfile_obstack.
* symtab.h (struct general_symbol_info, struct minimal_symbol):
Update comments.
* xcoffread.c (read_xcoff_symtab, SYMBOL_DUP, SYMNAME_ALLOC)
(init_stringtab, xcoff_initial_scan): Replace symbol_obstack with
objfile_obstack.
2004-02-08 00:13:47 +01:00
|
|
|
|
that as much as possible is allocated on the objfile_obstack
|
|
|
|
|
so that the memory can be efficiently freed.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
Things which we do NOT free because they are not in malloc'd memory
|
|
|
|
|
or not in memory specific to the objfile include:
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
objfile -> sf
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
FIXME: If the objfile is using reusable symbol information (via mmalloc),
|
|
|
|
|
then we need to take into account the fact that more than one process
|
|
|
|
|
may be using the symbol information at the same time (when mmalloc is
|
|
|
|
|
extended to support cooperative locking). When more than one process
|
|
|
|
|
is using the mapped symbol info, we need to be more careful about when
|
|
|
|
|
we free objects in the reusable area. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
free_objfile (struct objfile *objfile)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
gdb/ChangeLog:
2003-01-23 Alexander Larsson <alexl@redhat.com>
Jim Blandy <jimb@redhat.com>
Add support for executables whose debug info has been separated
out into a separate file, leaving only a link behind.
* objfiles.h (struct objfile): New fields: separate_debug_objfile
and separate_debug_objfile_backlink.
(put_objfile_before): New declaration.
* symfile.c: #include "filenames.h".
(symbol_file_add_with_addrs_or_offsets): If this objfile has its
debug info in a separate file, read that, too. Save the addrs
argument, so we can use it again to read the separated debug info;
syms_from_objfile modifies the table we pass it.
(reread_symbols): After re-reading an objfile, call
reread_separate_symbols to refresh its separate debug info
objfile, if it has one.
(reread_separate_symbols, find_separate_debug_file,
get_debug_link_info, separate_debug_file_exists): New functions.
(debug_file_directory): New global var.
(_initialize_symfile): Initialize debug_file_directory, and
provide the new `set debug-file-directory' command to let the user
change it.
* objfiles.c (free_objfile): If this objfile has its debug info in
a separate objfile, free that one too. If this is itself a
separate debug info objfile, clear our parent's backlink.
(put_objfile_before): New function.
* utils.c (gnu_debuglink_crc32): New function.
* defs.h (gnu_debuglink_crc32): New declaration.
* Makefile.in (symfile.o): Note dependency on "filenames.h".
* configure.in: Handle --with-separate-debug-dir config option.
* acinclude.m4 (AC_DEFINE_DIR): New macro.
* acconfig.h (DEBUGDIR): New macro.
* configure, aclocal.m4, config.in: Regenerated.
gdb/doc/ChangeLog:
2003-01-23 Jim Blandy <jimb@redhat.com>
* gdb.texinfo (Separate Debug Files): New section.
2003-01-24 00:03:32 +01:00
|
|
|
|
if (objfile->separate_debug_objfile)
|
|
|
|
|
{
|
|
|
|
|
free_objfile (objfile->separate_debug_objfile);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (objfile->separate_debug_objfile_backlink)
|
|
|
|
|
{
|
|
|
|
|
/* We freed the separate debug file, make sure the base objfile
|
|
|
|
|
doesn't reference it. */
|
|
|
|
|
objfile->separate_debug_objfile_backlink->separate_debug_objfile = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* First do any symbol file specific actions required when we are
|
|
|
|
|
finished with a particular symbol file. Note that if the objfile
|
|
|
|
|
is using reusable symbol information (via mmalloc) then each of
|
|
|
|
|
these routines is responsible for doing the correct thing, either
|
|
|
|
|
freeing things which are valid only during this particular gdb
|
|
|
|
|
execution, or leaving them to be reused during the next one. */
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if (objfile->sf != NULL)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
(*objfile->sf->sym_finish) (objfile);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* We always close the bfd. */
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if (objfile->obfd != NULL)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
char *name = bfd_get_filename (objfile->obfd);
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if (!bfd_close (objfile->obfd))
|
1999-04-16 03:35:26 +02:00
|
|
|
|
warning ("cannot close \"%s\": %s",
|
|
|
|
|
name, bfd_errmsg (bfd_get_error ()));
|
2000-12-15 02:01:51 +01:00
|
|
|
|
xfree (name);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Remove it from the chain of all objfiles. */
|
|
|
|
|
|
|
|
|
|
unlink_objfile (objfile);
|
|
|
|
|
|
|
|
|
|
/* If we are going to free the runtime common objfile, mark it
|
|
|
|
|
as unallocated. */
|
|
|
|
|
|
|
|
|
|
if (objfile == rt_common_objfile)
|
|
|
|
|
rt_common_objfile = NULL;
|
|
|
|
|
|
|
|
|
|
/* Before the symbol table code was redone to make it easier to
|
|
|
|
|
selectively load and remove information particular to a specific
|
|
|
|
|
linkage unit, gdb used to do these things whenever the monolithic
|
|
|
|
|
symbol table was blown away. How much still needs to be done
|
|
|
|
|
is unknown, but we play it safe for now and keep each action until
|
|
|
|
|
it is shown to be no longer needed. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
/* I *think* all our callers call clear_symtab_users. If so, no need
|
|
|
|
|
to call this here. */
|
|
|
|
|
clear_pc_function_cache ();
|
|
|
|
|
|
2004-01-19 20:56:02 +01:00
|
|
|
|
/* The last thing we do is free the objfile struct itself. */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
2004-01-19 20:56:02 +01:00
|
|
|
|
objfile_free_data (objfile);
|
|
|
|
|
if (objfile->name != NULL)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
2004-08-10 23:52:05 +02:00
|
|
|
|
xfree (objfile->name);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
2004-01-19 20:56:02 +01:00
|
|
|
|
if (objfile->global_psymbols.list)
|
2004-08-10 23:52:05 +02:00
|
|
|
|
xfree (objfile->global_psymbols.list);
|
2004-01-19 20:56:02 +01:00
|
|
|
|
if (objfile->static_psymbols.list)
|
2004-08-10 23:52:05 +02:00
|
|
|
|
xfree (objfile->static_psymbols.list);
|
2004-01-19 20:56:02 +01:00
|
|
|
|
/* Free the obstacks for non-reusable objfiles */
|
|
|
|
|
bcache_xfree (objfile->psymbol_cache);
|
|
|
|
|
bcache_xfree (objfile->macro_cache);
|
|
|
|
|
if (objfile->demangled_names_hash)
|
|
|
|
|
htab_delete (objfile->demangled_names_hash);
|
2004-02-07 Elena Zannoni <ezannoni@redhat.com>
* objfiles.h (struct objfile): Add objfile_obstack field.
Remove type_obstack field.
* dwarf2read.c (dwarf2_add_field,dwarf2_add_member_fn,
read_structure_scope read_enumeration, new_symbol): Replace
type_obstack with objfile_obstack.
* dwarfread.c (struct_type, enum_type): Ditto.
* gdbtypes.c (alloc_type, alloc_type_instance, init_type)
(lookup_fundamental_type): Ditto.
* gdbtypes.h (TYPE_ALLOC): Ditto.
* hpread.c (hpread_read_enum_type, hpread_read_function_type)
(hpread_read_doc_function_type, hpread_read_struct_type)
(fix_static_member_physnames, hpread_read_array_type)
(hpread_read_subrange_type, hpread_type_lookup): Ditto.
* jv-lang.c (java_lookup_class, type_from_class, type_from_class)
(java_link_class_type): Ditto.
* mdebugread.c (parse_type): Ditto.
* objfiles.c (allocate_objfile, free_objfile): Ditto.
* solib-sunos.c (solib_add_common_symbols): Ditto.
* stabsread.c (define_symbol, read_type, read_member_functions,
read_cpp_abbrev, read_one_struct_field): Ditto.
* symfile.c (reread_symbols): Ditto.
* symmisc.c (print_objfile_statistics): Ditto.
2004-02-07 17:57:55 +01:00
|
|
|
|
obstack_free (&objfile->objfile_obstack, 0);
|
2004-08-10 23:52:05 +02:00
|
|
|
|
xfree (objfile);
|
2004-01-19 20:56:02 +01:00
|
|
|
|
objfile = NULL;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
2000-05-22 11:02:23 +02:00
|
|
|
|
static void
|
|
|
|
|
do_free_objfile_cleanup (void *obj)
|
|
|
|
|
{
|
|
|
|
|
free_objfile (obj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct cleanup *
|
|
|
|
|
make_cleanup_free_objfile (struct objfile *obj)
|
|
|
|
|
{
|
|
|
|
|
return make_cleanup (do_free_objfile_cleanup, obj);
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
/* Free all the object files at once and clean up their users. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
free_all_objfiles (void)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *objfile, *temp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES_SAFE (objfile, temp)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
|
|
|
|
free_objfile (objfile);
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
clear_symtab_users ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
|
|
|
|
|
entries in new_offsets. */
|
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-09-09 02:02:17 +02:00
|
|
|
|
struct section_offsets *delta =
|
2003-06-07 01:33:00 +02:00
|
|
|
|
((struct section_offsets *)
|
|
|
|
|
alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
int something_changed = 0;
|
|
|
|
|
for (i = 0; i < objfile->num_sections; ++i)
|
|
|
|
|
{
|
2000-08-07 17:02:48 +02:00
|
|
|
|
delta->offsets[i] =
|
1999-04-16 03:35:26 +02:00
|
|
|
|
ANOFFSET (new_offsets, i) - ANOFFSET (objfile->section_offsets, i);
|
|
|
|
|
if (ANOFFSET (delta, i) != 0)
|
|
|
|
|
something_changed = 1;
|
|
|
|
|
}
|
|
|
|
|
if (!something_changed)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* OK, get all the symtabs. */
|
|
|
|
|
{
|
|
|
|
|
struct symtab *s;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILE_SYMTABS (objfile, s)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
|
|
|
|
struct linetable *l;
|
|
|
|
|
struct blockvector *bv;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
/* First the line table. */
|
|
|
|
|
l = LINETABLE (s);
|
|
|
|
|
if (l)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < l->nitems; ++i)
|
|
|
|
|
l->item[i].pc += ANOFFSET (delta, s->block_line_section);
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
/* Don't relocate a shared blockvector more than once. */
|
|
|
|
|
if (!s->primary)
|
|
|
|
|
continue;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
bv = BLOCKVECTOR (s);
|
|
|
|
|
for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
|
|
|
|
|
{
|
|
|
|
|
struct block *b;
|
2001-10-13 01:51:30 +02:00
|
|
|
|
struct symbol *sym;
|
2003-06-11 David Carlton <carlton@bactrian.org>
* dictionary.h: New.
* dictionary.c: New.
* block.h: Add opaque declaration for struct dictionary.
(struct block): Add 'dict' member; delete 'hashtable', 'nsyms',
'sym' members.
(BLOCK_DICT): New macro.
Delete macros BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM,
BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE,
BLOCK_SHOULD_SORT.
(ALL_BLOCK_SYMBOLS): Update definition.
* Makefile.in (SFILES): Add dictionary.c.
(dictionary_h): New.
(COMMON_OBS): Add dictionary.o.
(dictionary.o): New.
(ada-lang.o): Depend on dictionary_h.
(buildsym.o, coffread.o, jv-lang.o, mdebugread.o, objfiles.o)
(stack.o, symmisc.o, symtab.o, tracepoint.o, valops.o)
(mi-cmd-stack.o): Ditto.
(gdbtk-cmds.o): Update dependencies.
(gdbtk-stack.o): Ditto.
* ada-lang.c: Include dictionary.h.
(symtab_for_sym): Update uses of ALL_BLOCK_SYMBOLS.
(fill_in_ada_prototype, debug_print_block): Ditto.
(ada_add_block_symbols): Update uses of ALL_BLOCK_SYMBOLS; replace
explicit iteration by use of ALL_BLOCK_SYMBOLS. Delete variable
'is_sorted'.
* mdebugread.c: Include dictionary.h.
(struct parse_stack): Delete 'maxsyms' member.
(parse_symbol): Update calls to new_block. Delete calls to
shrink_block. Use dictionary methods.
(psymtab_to_symtab_1): Delete calls to sort_symtab_syms.
Update calls to new_symtab. Don't maintain maxsyms data.
(mylookup_symbol): Update use of ALL_BLOCK_SYMBOLS.
(add_symbol): Just call dict_add_symbol.
(new_symtab): Delete 'maxsyms' argument.
(new_symtab): Update calls to new_block.
(new_block): Delete 'maxsyms' argument; add 'function' argument.
(shrink_block): Delete function.
(fixup_sigtramp): Update call to new_block. Add symbol via
dict_add_symbol.
* jv-lang.c: Include dictionary.h.
(get_java_class_symtab): Set the BLOCK_DICT of the blocks
appropriately. Set class_symtab->free_func. Make sure the
blockvector is big enough to hold two blocks.
(add_class_symtab_symbol): Use dictionary methods.
(free_class_block): New function.
(type_from_class): Replace explicit iteration by
ALL_BLOCK_SYMBOLS.
* symtab.h (struct symtab): Replace 'free_ptr' method by
'free_func'.
* dwarf2read.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* dwarfread.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* coffread.c (coff_symfile_read): Delete call to sort_symtab_syms.
Include dictionary.h.
(patch_opaque_types): Update use of ALL_BLOCK_SYMBOLS.
* dbxread.c (dbx_psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* objfiles.c: Include dictionary.h.
(objfile_relocate): Update use of ALL_BLOCK_SYMBOLS.
* buildsym.c: Include dictionary.h.
(finish_block): Use dictionary methods.
(end_symtab): Set free_func to NULL, not free_ptr.
* tracepoint.c: Include dictionary.h.
(add_local_symbols): Update use of ALL_BLOCK_SYMBOLS.
(scope_info): Ditto.
* stack.c: Include dictionary.h.
(print_block_frame_locals): Update use of ALL_BLOCK_SYMBOLS.
(print_block_frame_labels, print_frame_arg_vars)
(print_frame_args): Ditto.
* symmisc.c (free_symtab_block): Use dictionary methods.
(dump_symtab): Ditto.
(free_symtab): Replace use of 'free_ptr' by 'free_func'.
Include dictionary.h.
* symfile.h: Delete declarations of sort_block_syms,
sort_symtab_syms.
* symfile.c (sort_block_syms): Delete.
(sort_symtab_syms): Delete.
* symtab.c: Include dictionary.h.
(lookup_block_symbol): Use dictionary iterators.
(find_pc_sect_symtab): Update use of ALL_BLOCK_SYMBOLS.
(search_symbols, make_symbol_completion_list): Ditto.
(make_symbol_overload_list): Ditto.
* valops.c (value_of_local): Use dict_empty.
Include dictionary.h.
2003-06-11 David Carlton <carlton@bactrian.org>
* generic/gdbtk-stack.c: Include dictionary.h.
(gdb_block_vars): Update use of ALL_BLOCK_SYMBOLS.
(gdb_get_blocks, gdb_get_vars_command): Ditto.
* generic/gdbtk-cmds.c: Include dictionary.h.
(gdb_listfuncs): Update use of ALL_BLOCK_SYMBOLS.
2003-06-11 David Carlton <carlton@bactrian.org>
* mi-cmd-stack.c: Include dictionary.h.
(list_args_or_locals): Update use of ALL_BLOCK_SYMBOLS.
2003-06-12 01:29:49 +02:00
|
|
|
|
struct dict_iterator iter;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
|
|
|
|
b = BLOCKVECTOR_BLOCK (bv, i);
|
|
|
|
|
BLOCK_START (b) += ANOFFSET (delta, s->block_line_section);
|
|
|
|
|
BLOCK_END (b) += ANOFFSET (delta, s->block_line_section);
|
|
|
|
|
|
2003-06-11 David Carlton <carlton@bactrian.org>
* dictionary.h: New.
* dictionary.c: New.
* block.h: Add opaque declaration for struct dictionary.
(struct block): Add 'dict' member; delete 'hashtable', 'nsyms',
'sym' members.
(BLOCK_DICT): New macro.
Delete macros BLOCK_HASHTABLE, BLOCK_NSYMS, BLOCK_SYM,
BLOCK_BUCKETS, BLOCK_BUCKET, BLOCK_HASHTABLE_SIZE,
BLOCK_SHOULD_SORT.
(ALL_BLOCK_SYMBOLS): Update definition.
* Makefile.in (SFILES): Add dictionary.c.
(dictionary_h): New.
(COMMON_OBS): Add dictionary.o.
(dictionary.o): New.
(ada-lang.o): Depend on dictionary_h.
(buildsym.o, coffread.o, jv-lang.o, mdebugread.o, objfiles.o)
(stack.o, symmisc.o, symtab.o, tracepoint.o, valops.o)
(mi-cmd-stack.o): Ditto.
(gdbtk-cmds.o): Update dependencies.
(gdbtk-stack.o): Ditto.
* ada-lang.c: Include dictionary.h.
(symtab_for_sym): Update uses of ALL_BLOCK_SYMBOLS.
(fill_in_ada_prototype, debug_print_block): Ditto.
(ada_add_block_symbols): Update uses of ALL_BLOCK_SYMBOLS; replace
explicit iteration by use of ALL_BLOCK_SYMBOLS. Delete variable
'is_sorted'.
* mdebugread.c: Include dictionary.h.
(struct parse_stack): Delete 'maxsyms' member.
(parse_symbol): Update calls to new_block. Delete calls to
shrink_block. Use dictionary methods.
(psymtab_to_symtab_1): Delete calls to sort_symtab_syms.
Update calls to new_symtab. Don't maintain maxsyms data.
(mylookup_symbol): Update use of ALL_BLOCK_SYMBOLS.
(add_symbol): Just call dict_add_symbol.
(new_symtab): Delete 'maxsyms' argument.
(new_symtab): Update calls to new_block.
(new_block): Delete 'maxsyms' argument; add 'function' argument.
(shrink_block): Delete function.
(fixup_sigtramp): Update call to new_block. Add symbol via
dict_add_symbol.
* jv-lang.c: Include dictionary.h.
(get_java_class_symtab): Set the BLOCK_DICT of the blocks
appropriately. Set class_symtab->free_func. Make sure the
blockvector is big enough to hold two blocks.
(add_class_symtab_symbol): Use dictionary methods.
(free_class_block): New function.
(type_from_class): Replace explicit iteration by
ALL_BLOCK_SYMBOLS.
* symtab.h (struct symtab): Replace 'free_ptr' method by
'free_func'.
* dwarf2read.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* dwarfread.c (psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* coffread.c (coff_symfile_read): Delete call to sort_symtab_syms.
Include dictionary.h.
(patch_opaque_types): Update use of ALL_BLOCK_SYMBOLS.
* dbxread.c (dbx_psymtab_to_symtab_1): Delete call to
sort_symtab_syms.
* objfiles.c: Include dictionary.h.
(objfile_relocate): Update use of ALL_BLOCK_SYMBOLS.
* buildsym.c: Include dictionary.h.
(finish_block): Use dictionary methods.
(end_symtab): Set free_func to NULL, not free_ptr.
* tracepoint.c: Include dictionary.h.
(add_local_symbols): Update use of ALL_BLOCK_SYMBOLS.
(scope_info): Ditto.
* stack.c: Include dictionary.h.
(print_block_frame_locals): Update use of ALL_BLOCK_SYMBOLS.
(print_block_frame_labels, print_frame_arg_vars)
(print_frame_args): Ditto.
* symmisc.c (free_symtab_block): Use dictionary methods.
(dump_symtab): Ditto.
(free_symtab): Replace use of 'free_ptr' by 'free_func'.
Include dictionary.h.
* symfile.h: Delete declarations of sort_block_syms,
sort_symtab_syms.
* symfile.c (sort_block_syms): Delete.
(sort_symtab_syms): Delete.
* symtab.c: Include dictionary.h.
(lookup_block_symbol): Use dictionary iterators.
(find_pc_sect_symtab): Update use of ALL_BLOCK_SYMBOLS.
(search_symbols, make_symbol_completion_list): Ditto.
(make_symbol_overload_list): Ditto.
* valops.c (value_of_local): Use dict_empty.
Include dictionary.h.
2003-06-11 David Carlton <carlton@bactrian.org>
* generic/gdbtk-stack.c: Include dictionary.h.
(gdb_block_vars): Update use of ALL_BLOCK_SYMBOLS.
(gdb_get_blocks, gdb_get_vars_command): Ditto.
* generic/gdbtk-cmds.c: Include dictionary.h.
(gdb_listfuncs): Update use of ALL_BLOCK_SYMBOLS.
2003-06-11 David Carlton <carlton@bactrian.org>
* mi-cmd-stack.c: Include dictionary.h.
(list_args_or_locals): Update use of ALL_BLOCK_SYMBOLS.
2003-06-12 01:29:49 +02:00
|
|
|
|
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
2000-08-05 01:13:50 +02:00
|
|
|
|
fixup_symbol_section (sym, objfile);
|
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
/* The RS6000 code from which this was taken skipped
|
2003-05-14 Elena Zannoni <ezannoni@redhat.com>
* symtab.h (enum domain_enum): Rename from namespace_enum.
(UNDEF_DOMAIN, VAR_DOMAIN, STRUCT_DOMAIN, LABEL_DOMAIN,
VARIABLES_DOMAIN, FUNCTIONS_DOMAIN, TYPES_DOMAIN, METHODS_DOMAIN):
Rename from UNDEF_NAMESPACE, VAR_NAMESPACE, STRUCT_NAMESPACE,
LABEL_NAMESPACE, VARIABLES_NAMESPACE, FUNCTIONS_NAMESPACE,
TYPES_NAMESPACE, METHODS_NAMESPACE.
(SYMBOL_NAMESPACE): Rename to SYMBOL_DOMAIN.
(struct symbol, struct partial_symbol): Rename field
'namespace_enum namespace' to 'domain_enum domain'.
(PSYMBOL_NAMESPACE): Rename to PSYMBOL_DOMAIN.
Delete old define kludge for namespace.
* ada-exp.y, ada-lang.c, ada-lang.h, alpha-tdep.c, arm-tdep.c,
blockframe.c, c-exp.y, c-valprint.c, coffread.c, dbxread.c,
dwarf2read.c, dwarfread.c, f-exp.y, gdbtypes.c, gdbtypes.h,
gnu-v3-abi.c, hppa-tdep.c, hpread.c, jv-exp.y, jv-lang.c,
language.c, linespec.c, m2-exp.y, m3-nat.c, mdebugread.c,
mips-tdep.c, nlmread.c, objc-exp.y, objc-lang.c, objfiles.c,
p-exp.y, p-valprint.c, parse.c, printcmd.c, scm-lang.c, source.c,
stabsread.c, stack.c, symfile.c, symfile.h, symmisc.c, symtab.c,
valops.c, values.c, xcoffread.c, xstormy16-tdep.c: Replace all
occurrences of the above.
2003-05-12 Elena Zannoni <ezannoni@redhat.com>
* mi-mi-cmd-stack.c (list_args_or_locals): Rename VAR_NAMESPACE to
VAR_DOMAIN.
2003-05-14 19:43:20 +02:00
|
|
|
|
any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
|
1999-07-07 22:19:36 +02:00
|
|
|
|
But I'm leaving out that test, on the theory that
|
|
|
|
|
they can't possibly pass the tests below. */
|
|
|
|
|
if ((SYMBOL_CLASS (sym) == LOC_LABEL
|
|
|
|
|
|| SYMBOL_CLASS (sym) == LOC_STATIC
|
|
|
|
|
|| SYMBOL_CLASS (sym) == LOC_INDIRECT)
|
|
|
|
|
&& SYMBOL_SECTION (sym) >= 0)
|
|
|
|
|
{
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (sym) +=
|
|
|
|
|
ANOFFSET (delta, SYMBOL_SECTION (sym));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct partial_symtab *p;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILE_PSYMTABS (objfile, p)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* objfiles.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Define as functions of OBJFILE. Add
sect_index_text, sect_index_data, sect_index_rodata,
sect_index_bss to objfile structure.
* gdb-stabs.h (SECT_OFF_DATA, SECT_OFF_TEXT, SECT_OFF_BSS,
SECT_OFF_RODATA): Remove.
* objfiles.c (allocate_objfile): Initialize
sect_index_{text,data,bss,rodata} to -1, for error detection.
* symfile.c (default_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata} from bfd information.
* xcoffread.c (xcoff_symfile_offsets): Ditto.
* somread.c (som_symfile_offsets): Initialize
sect_index_{text,data,bss,rodata}.
* coffread.c, dbxread.c, elfread.c, hp-psymtab-read.c,
hp-symtab-read.c, hpread.c, mdebugread.c, minsyms.c,
mipsread.c, objfiles.c, os9kread.c, pa64solib.c, partial-stab.h,
remote-os9k.c, remote-vx.c, remote.c, rs6000-nat.c, somsolib.c,
stabsread.c, symfile.c, xcoffread.c:
Update use of SECT_OFF_{TEXT,DATA,BSS,RODATA} to depend on the
current objfile.
* xcoffread.c: Add new field objfile to find_targ_sec_arg.
2000-05-04 18:52:34 +02:00
|
|
|
|
p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
|
|
|
|
|
p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
|
1999-07-07 22:19:36 +02:00
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct partial_symbol **psym;
|
|
|
|
|
|
|
|
|
|
for (psym = objfile->global_psymbols.list;
|
|
|
|
|
psym < objfile->global_psymbols.next;
|
|
|
|
|
psym++)
|
2000-08-05 01:13:50 +02:00
|
|
|
|
{
|
|
|
|
|
fixup_psymbol_section (*psym, objfile);
|
|
|
|
|
if (SYMBOL_SECTION (*psym) >= 0)
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
|
|
|
|
|
SYMBOL_SECTION (*psym));
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
for (psym = objfile->static_psymbols.list;
|
|
|
|
|
psym < objfile->static_psymbols.next;
|
|
|
|
|
psym++)
|
2000-08-05 01:13:50 +02:00
|
|
|
|
{
|
|
|
|
|
fixup_psymbol_section (*psym, objfile);
|
|
|
|
|
if (SYMBOL_SECTION (*psym) >= 0)
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
|
|
|
|
|
SYMBOL_SECTION (*psym));
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct minimal_symbol *msym;
|
|
|
|
|
ALL_OBJFILE_MSYMBOLS (objfile, msym)
|
|
|
|
|
if (SYMBOL_SECTION (msym) >= 0)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
/* Relocating different sections by different amounts may cause the symbols
|
|
|
|
|
to be out of order. */
|
|
|
|
|
msymbols_sort (objfile);
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for (i = 0; i < objfile->num_sections; ++i)
|
2000-08-07 17:02:48 +02:00
|
|
|
|
(objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
2000-11-03 20:00:06 +01:00
|
|
|
|
if (objfile->ei.entry_point != ~(CORE_ADDR) 0)
|
|
|
|
|
{
|
|
|
|
|
/* Relocate ei.entry_point with its section offset, use SECT_OFF_TEXT
|
|
|
|
|
only as a fallback. */
|
|
|
|
|
struct obj_section *s;
|
|
|
|
|
s = find_pc_section (objfile->ei.entry_point);
|
|
|
|
|
if (s)
|
|
|
|
|
objfile->ei.entry_point += ANOFFSET (delta, s->the_bfd_section->index);
|
|
|
|
|
else
|
|
|
|
|
objfile->ei.entry_point += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct obj_section *s;
|
|
|
|
|
bfd *abfd;
|
|
|
|
|
|
|
|
|
|
abfd = objfile->obfd;
|
|
|
|
|
|
1999-08-09 23:36:23 +02:00
|
|
|
|
ALL_OBJFILE_OSECTIONS (objfile, s)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
2000-09-13 03:47:16 +02:00
|
|
|
|
int idx = s->the_bfd_section->index;
|
|
|
|
|
|
|
|
|
|
s->addr += ANOFFSET (delta, idx);
|
|
|
|
|
s->endaddr += ANOFFSET (delta, idx);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Relocate breakpoints as necessary, after things are relocated. */
|
|
|
|
|
breakpoint_re_set ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Many places in gdb want to test just to see if we have any partial
|
|
|
|
|
symbols available. This function returns zero if none are currently
|
|
|
|
|
available, nonzero otherwise. */
|
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
have_partial_symbols (void)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
|
|
|
|
if (ofp->psymtabs != NULL)
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Many places in gdb want to test just to see if we have any full
|
|
|
|
|
symbols available. This function returns zero if none are currently
|
|
|
|
|
available, nonzero otherwise. */
|
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
have_full_symbols (void)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
|
|
|
|
if (ofp->symtabs != NULL)
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* This operations deletes all objfile entries that represent solibs that
|
|
|
|
|
weren't explicitly loaded by the user, via e.g., the add-symbol-file
|
|
|
|
|
command.
|
1999-07-07 22:19:36 +02:00
|
|
|
|
*/
|
1999-04-16 03:35:26 +02:00
|
|
|
|
void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
objfile_purge_solibs (void)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
1999-07-07 22:19:36 +02:00
|
|
|
|
struct objfile *objf;
|
|
|
|
|
struct objfile *temp;
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
ALL_OBJFILES_SAFE (objf, temp)
|
|
|
|
|
{
|
|
|
|
|
/* We assume that the solib package has been purged already, or will
|
|
|
|
|
be soon.
|
1999-07-07 22:19:36 +02:00
|
|
|
|
*/
|
1999-10-12 06:37:53 +02:00
|
|
|
|
if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
|
1999-04-16 03:35:26 +02:00
|
|
|
|
free_objfile (objf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Many places in gdb want to test just to see if we have any minimal
|
|
|
|
|
symbols available. This function returns zero if none are currently
|
|
|
|
|
available, nonzero otherwise. */
|
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
have_minimal_symbols (void)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
2003-02-03 21:39:41 +01:00
|
|
|
|
if (ofp->minimal_symbol_count > 0)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2003-10-19 Andrew Cagney <cagney@redhat.com>
* targets.c: Replace "struct sec" with "struct bfd_section"
* syms.c, sparclynx.c, section.c, opncls.c: Ditto.
* libcoff-in.h, libbfd-in.h, elfxx-target.h: Ditto.
* elf.c, coffgen.c, bfd.c, bfd-in.h, aoutf1.h: Ditto.
* aout-tic30.c, aout-target.h:
* bfd-in2.h, libcoff.h, libbfd.h: Regenerate.
Index: binutils/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* coffgrok.h (coff_section): Replace 'struct sec" with "struct
bfd_section".
Index: gdb/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* symtab.c: Replace "struct sec" with "struct bfd_section".
* objfiles.c, linespec.c, blockframe.c, block.c: Ditto.
Index: ld/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* pe-dll.c: Replace "struct sec" with "struct bfd_section".
Index: sim/common/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* sim-base.h: Replace "struct sec" with "struct bfd_section".
2003-10-20 16:38:46 +02:00
|
|
|
|
/* Returns a section whose range includes PC and SECTION, or NULL if
|
|
|
|
|
none found. Note the distinction between the return type, struct
|
|
|
|
|
obj_section (which is defined in gdb), and the input type "struct
|
|
|
|
|
bfd_section" (which is a bfd-defined data type). The obj_section
|
|
|
|
|
contains a pointer to the "struct bfd_section". */
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
struct obj_section *
|
2003-10-19 Andrew Cagney <cagney@redhat.com>
* targets.c: Replace "struct sec" with "struct bfd_section"
* syms.c, sparclynx.c, section.c, opncls.c: Ditto.
* libcoff-in.h, libbfd-in.h, elfxx-target.h: Ditto.
* elf.c, coffgen.c, bfd.c, bfd-in.h, aoutf1.h: Ditto.
* aout-tic30.c, aout-target.h:
* bfd-in2.h, libcoff.h, libbfd.h: Regenerate.
Index: binutils/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* coffgrok.h (coff_section): Replace 'struct sec" with "struct
bfd_section".
Index: gdb/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* symtab.c: Replace "struct sec" with "struct bfd_section".
* objfiles.c, linespec.c, blockframe.c, block.c: Ditto.
Index: ld/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* pe-dll.c: Replace "struct sec" with "struct bfd_section".
Index: sim/common/ChangeLog
2003-10-19 Andrew Cagney <cagney@redhat.com>
* sim-base.h: Replace "struct sec" with "struct bfd_section".
2003-10-20 16:38:46 +02:00
|
|
|
|
find_pc_sect_section (CORE_ADDR pc, struct bfd_section *section)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct obj_section *s;
|
|
|
|
|
struct objfile *objfile;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
1999-08-09 23:36:23 +02:00
|
|
|
|
ALL_OBJSECTIONS (objfile, s)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
if ((section == 0 || section == s->the_bfd_section) &&
|
|
|
|
|
s->addr <= pc && pc < s->endaddr)
|
|
|
|
|
return (s);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
1999-07-07 22:19:36 +02:00
|
|
|
|
return (NULL);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Returns a section whose range includes PC or NULL if none found.
|
|
|
|
|
Backward compatibility, no section. */
|
|
|
|
|
|
|
|
|
|
struct obj_section *
|
2000-07-30 03:48:28 +02:00
|
|
|
|
find_pc_section (CORE_ADDR pc)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
return find_pc_sect_section (pc, find_pc_mapped_section (pc));
|
|
|
|
|
}
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
|
|
/* In SVR4, we recognize a trampoline by it's section name.
|
|
|
|
|
That is, if the pc is in a section named ".plt" then we are in
|
|
|
|
|
a trampoline. */
|
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
in_plt_section (CORE_ADDR pc, char *name)
|
1999-04-16 03:35:26 +02:00
|
|
|
|
{
|
|
|
|
|
struct obj_section *s;
|
|
|
|
|
int retval = 0;
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
|
|
|
|
s = find_pc_section (pc);
|
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
retval = (s != NULL
|
|
|
|
|
&& s->the_bfd_section->name != NULL
|
2003-11-08 01:13:03 +01:00
|
|
|
|
&& strcmp (s->the_bfd_section->name, ".plt") == 0);
|
1999-07-07 22:19:36 +02:00
|
|
|
|
return (retval);
|
1999-04-16 03:35:26 +02:00
|
|
|
|
}
|
1999-08-16 21:57:19 +02:00
|
|
|
|
|
|
|
|
|
/* Return nonzero if NAME is in the import list of OBJFILE. Else
|
|
|
|
|
return zero. */
|
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 03:48:28 +02:00
|
|
|
|
is_in_import_list (char *name, struct objfile *objfile)
|
1999-08-16 21:57:19 +02:00
|
|
|
|
{
|
2003-09-14 Andrew Cagney <cagney@redhat.com>
* alpha-nat.c: Remove some occurances of "register".
* alpha-tdep.c, arm-tdep.c, blockframe.c, breakpoint.c: Ditto.
* buildsym.c, c-typeprint.c, c-valprint.c, coffread.c: Ditto.
* corefile.c, cp-support.c, cp-valprint.c, cris-tdep.c: Ditto.
* dbxread.c, dcache.c, dwarf2read.c, elfread.c: Ditto.
* environ.c, eval.c, event-top.c, f-typeprint.c: Ditto.
* f-valprint.c, findvar.c, frame.c, gdbtypes.c: Ditto.
* h8300-tdep.c, hppa-tdep.c, hppab-nat.c, hppah-nat.c: Ditto.
* hppam3-nat.c, hpread.c, ia64-aix-nat.c, ia64-linux-nat.c: Ditto.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Ditto.
* infttrace.c, irix5-nat.c, jv-typeprint.c: Ditto.
* jv-valprint.c, m68k-tdep.c, m68klinux-nat.c, main.c: Ditto.
* mdebugread.c, minsyms.c, mips-linux-tdep.c: Ditto.
* mips-nat.c, mips-tdep.c, mipsread.c, mipsv4-nat.c: Ditto.
* ns32k-tdep.c, objfiles.c, p-typeprint.c: Ditto.
* p-valprint.c, ppc-linux-nat.c, printcmd.c: Ditto.
* remote-mips.c, remote-vx.c, rs6000-nat.c: Ditto.
* rs6000-tdep.c, scm-exp.c, sh-tdep.c, sh64-tdep.c: Ditto.
* solib.c, somread.c, source.c, sparc-tdep.c: Ditto.
* stabsread.c, stack.c, standalone.c, symfile.c: Ditto.
* symmisc.c, symtab.c, top.c, tracepoint.c: Ditto.
* typeprint.c, utils.c, valarith.c, valops.c: Ditto.
* values.c, vax-tdep.c, xcoffread.c: Ditto.
2003-09-14 18:32:14 +02:00
|
|
|
|
int i;
|
1999-08-16 21:57:19 +02:00
|
|
|
|
|
|
|
|
|
if (!objfile || !name || !*name)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < objfile->import_list_size; i++)
|
2003-11-23 Andrew Cagney <cagney@redhat.com>
* symfile.c (symbol_file_command): Replace STREQ with strcmp.
* defs.h (DEPRECATED_STREQN): Rename STREQN.
(DEPRECATED_STREQ): Rename STREQ.
* ada-exp.y, ada-lang.c, ada-lex.l, coffread.c: Update.
* config/mips/tm-irix5.h, config/mips/tm-irix6.h: Update.
* config/mips/tm-mipsv4.h, config/sparc/tm-sun4sol2.h: Update.
* dbxread.c, dwarf2read.c, dwarfread.c, environ.c: Update.
* eval.c, exec.c, f-lang.c, hppa-tdep.c, hpread.c: Update.
* jv-exp.y, language.c, m2-exp.y, mcore-rom.c: Update.
* mdebugread.c, mipsread.c, objc-exp.y, objfiles.c: Update.
* p-exp.y, p-typeprint.c, p-valprint.c, rs6000-nat.c: Update.
* source.c, sparc-tdep.c, stack.c, target.c: Update.
2003-11-23 21:41:17 +01:00
|
|
|
|
if (objfile->import_list[i] && DEPRECATED_STREQ (name, objfile->import_list[i]))
|
1999-08-16 21:57:19 +02:00
|
|
|
|
return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2003-08-22 00:35:33 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Keep a registry of per-objfile data-pointers required by other GDB
|
|
|
|
|
modules. */
|
|
|
|
|
|
|
|
|
|
struct objfile_data
|
|
|
|
|
{
|
|
|
|
|
unsigned index;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct objfile_data_registration
|
|
|
|
|
{
|
|
|
|
|
struct objfile_data *data;
|
|
|
|
|
struct objfile_data_registration *next;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct objfile_data_registry
|
|
|
|
|
{
|
|
|
|
|
struct objfile_data_registration *registrations;
|
|
|
|
|
unsigned num_registrations;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct objfile_data_registry objfile_data_registry = { NULL, 0 };
|
|
|
|
|
|
|
|
|
|
const struct objfile_data *
|
|
|
|
|
register_objfile_data (void)
|
|
|
|
|
{
|
|
|
|
|
struct objfile_data_registration **curr;
|
|
|
|
|
|
|
|
|
|
/* Append new registration. */
|
|
|
|
|
for (curr = &objfile_data_registry.registrations;
|
|
|
|
|
*curr != NULL; curr = &(*curr)->next);
|
1999-08-16 21:57:19 +02:00
|
|
|
|
|
2003-08-22 00:35:33 +02:00
|
|
|
|
*curr = XMALLOC (struct objfile_data_registration);
|
|
|
|
|
(*curr)->next = NULL;
|
|
|
|
|
(*curr)->data = XMALLOC (struct objfile_data);
|
|
|
|
|
(*curr)->data->index = objfile_data_registry.num_registrations++;
|
|
|
|
|
|
|
|
|
|
return (*curr)->data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
objfile_alloc_data (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (objfile->data == NULL);
|
|
|
|
|
objfile->num_data = objfile_data_registry.num_registrations;
|
|
|
|
|
objfile->data = XCALLOC (objfile->num_data, void *);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
objfile_free_data (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (objfile->data != NULL);
|
|
|
|
|
xfree (objfile->data);
|
|
|
|
|
objfile->data = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2003-10-29 19:29:07 +01:00
|
|
|
|
void
|
|
|
|
|
clear_objfile_data (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (objfile->data != NULL);
|
|
|
|
|
memset (objfile->data, 0, objfile->num_data * sizeof (void *));
|
|
|
|
|
}
|
|
|
|
|
|
2003-08-22 00:35:33 +02:00
|
|
|
|
void
|
|
|
|
|
set_objfile_data (struct objfile *objfile, const struct objfile_data *data,
|
|
|
|
|
void *value)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (data->index < objfile->num_data);
|
|
|
|
|
objfile->data[data->index] = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void *
|
|
|
|
|
objfile_data (struct objfile *objfile, const struct objfile_data *data)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (data->index < objfile->num_data);
|
|
|
|
|
return objfile->data[data->index];
|
|
|
|
|
}
|