1999-04-16 09:35:26 +08:00
|
|
|
|
/* GDB routines for manipulating objfiles.
|
2002-07-12 23:23:10 +08:00
|
|
|
|
|
2007-01-10 01:59:20 +08:00
|
|
|
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
2009-01-03 13:58:08 +08:00
|
|
|
|
2002, 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
|
2002-07-12 23:23:10 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
Contributed by Cygnus Support, using pieces from other GDB modules.
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
This file is part of GDB.
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08: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
|
2007-08-24 02:08:50 +08:00
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
1999-07-08 04:19:36 +08:00
|
|
|
|
(at your option) any later version.
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08: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 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-08-24 02:08:50 +08:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
1999-04-16 09:35:26 +08: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 23:23:10 +08:00
|
|
|
|
#include "bcache.h"
|
2004-10-31 11:42:52 +08:00
|
|
|
|
#include "mdebugread.h"
|
2006-08-09 01:39:10 +08:00
|
|
|
|
#include "expression.h"
|
|
|
|
|
#include "parser-defs.h"
|
|
|
|
|
|
2003-08-22 06:35:33 +08:00
|
|
|
|
#include "gdb_assert.h"
|
1999-04-16 09:35:26 +08: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 06:55:26 +08:00
|
|
|
|
#include "gdb_obstack.h"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
#include "gdb_string.h"
|
2003-02-05 02:07:01 +08:00
|
|
|
|
#include "hashtab.h"
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-04-27 02:34:20 +08: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 08:01:07 +08: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 07:29:49 +08:00
|
|
|
|
#include "dictionary.h"
|
2006-01-07 00:23:35 +08:00
|
|
|
|
#include "source.h"
|
Support lexical blocks and function bodies that occupy
non-contiguous address ranges.
* addrmap.c, addrmap.h: New files.
* block.h (struct addrmap): New forward declaration.
(struct blockvector): New member, 'map'.
(BLOCKVECTOR_MAP): New accessor macro.
* block.c: #include "addrmap.h"
(blockvector_for_pc_sect): If the blockvector we've found has
an address map, use it instead of searching the blocks.
* buildsym.c: #include "addrmap.h"
(pending_addrmap_obstack, pending_addrmap_interesting): New static
variables.
(really_free_pendings): If we have a pending addrmap, free it too.
(record_block_range): New function.
(make_blockvector): If we have an interesting pending addrmap,
record it in the new blockvector.
(start_symtab, buildsym_init): Assert that there is no pending
addrmap now; we should have cleaned up any addrmaps we'd built
previously.
(end_symtab): If there is a pending addrmap left over that didn't
get included in the blockvector, free it.
* buildsym.h (struct addrmap): New forward declaration.
(record_block_range): New prototype.
* objfiles.c: #include "addrmap.h".
(objfile_relocate): Relocate the blockvector's address map, if
present.
* dwarf2read.c (dwarf2_record_block_ranges): New function.
(read_func_scope, read_lexical_block_scope): Call it.
* Makefile.in (SFILES): Add addrmap.c.
(addrmap_h): New header dependency variable.
(COMMON_OBS): Add addrmap.o.
(addrmap.o): New rule.l
(block.o, objfiles.o, buildsym.o): Depend on $(addrmap_h).
* block.c (blockvector_for_pc, blockvector_for_pc_sect): Return a
pointer to the block, not its index in the blockvector.
(block_for_pc_sect): Use the returned block, instead of looking it
up ourselves.
* block.h (blockvector_for_pc, blockvector_for_pc_sect): Update
declarations.
* breakpoint.c (resolve_sal_pc): Use returned block, instead of
looking it up ourselves.
* stack.c (print_frame_label_vars): Disable function, which
depends on the block's index.
* buildsym.c (finish_block): Return the block we've built.
* buildsym.h (finish_block): Update prototype.
* defs.h (CORE_ADDR_MAX): New constant.
2007-12-05 07:43:57 +08:00
|
|
|
|
#include "addrmap.h"
|
2008-03-26 22:53:28 +08:00
|
|
|
|
#include "arch-utils.h"
|
2008-05-04 02:04:02 +08:00
|
|
|
|
#include "exec.h"
|
2009-07-22 04:54:30 +08:00
|
|
|
|
#include "observer.h"
|
1999-04-27 02:34:20 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Prototypes for local functions */
|
|
|
|
|
|
2003-08-22 06:35:33 +08:00
|
|
|
|
static void objfile_alloc_data (struct objfile *objfile);
|
|
|
|
|
static void objfile_free_data (struct objfile *objfile);
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Externally visible variables that are owned by this module.
|
|
|
|
|
See declarations in objfile.h for more info. */
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct objfile *object_files; /* Linked list of all objfiles */
|
1999-04-16 09:35:26 +08: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 */
|
|
|
|
|
|
2009-07-22 04:54:30 +08:00
|
|
|
|
/* Records whether any objfiles appeared or disappeared since we last updated
|
|
|
|
|
address to obj section map. */
|
|
|
|
|
|
2009-07-23 03:21:31 +08:00
|
|
|
|
static int objfiles_changed_p;
|
2009-07-22 04:54:30 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* 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. */
|
|
|
|
|
|
1999-08-10 05:36:23 +08: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 09:35:26 +08:00
|
|
|
|
static void
|
2003-11-06 10:52:28 +08:00
|
|
|
|
add_to_objfile_sections (struct bfd *abfd, struct bfd_section *asect,
|
|
|
|
|
void *objfile_p_char)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile *objfile = (struct objfile *) objfile_p_char;
|
|
|
|
|
struct obj_section section;
|
|
|
|
|
flagword aflag;
|
|
|
|
|
|
|
|
|
|
aflag = bfd_get_section_flags (abfd, asect);
|
|
|
|
|
|
2008-07-31 05:53:07 +08:00
|
|
|
|
if (!(aflag & SEC_ALLOC))
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (0 == bfd_section_size (abfd, asect))
|
|
|
|
|
return;
|
|
|
|
|
section.objfile = objfile;
|
|
|
|
|
section.the_bfd_section = asect;
|
|
|
|
|
section.ovly_mapped = 0;
|
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-08 02:29:54 +08:00
|
|
|
|
obstack_grow (&objfile->objfile_obstack, (char *) §ion, sizeof (section));
|
2008-08-20 19:21:44 +08:00
|
|
|
|
objfile->sections_end
|
|
|
|
|
= (struct obj_section *) (((size_t) objfile->sections_end) + 1);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Builds a section table for OBJFILE.
|
|
|
|
|
Returns 0 if OK, 1 on error (in which case bfd_error contains the
|
1999-08-10 05:36:23 +08: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 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
int
|
2000-07-30 09:48:28 +08:00
|
|
|
|
build_objfile_section_table (struct objfile *objfile)
|
1999-04-16 09:35:26 +08: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-08 02:29:54 +08:00
|
|
|
|
can't free the old one (it's in the objfile_obstack). So we just
|
1999-04-16 09:35:26 +08:00
|
|
|
|
waste some memory. */
|
|
|
|
|
|
|
|
|
|
objfile->sections_end = 0;
|
2008-08-20 19:21:44 +08:00
|
|
|
|
bfd_map_over_sections (objfile->obfd,
|
|
|
|
|
add_to_objfile_sections, (void *) objfile);
|
|
|
|
|
objfile->sections = obstack_finish (&objfile->objfile_obstack);
|
|
|
|
|
objfile->sections_end = objfile->sections + (size_t) objfile->sections_end;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
return (0);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-10-12 12:37:53 +08: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 09:35:26 +08:00
|
|
|
|
|
1999-10-12 12:37:53 +08:00
|
|
|
|
The FLAGS word contains various bits (OBJF_*) that can be taken as
|
2004-01-20 03:56:02 +08:00
|
|
|
|
requests for specific operations. Other bits like OBJF_SHARED are
|
|
|
|
|
simply copied through to the new objfile flags member. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2003-02-05 05:55:26 +08: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 09:35:26 +08:00
|
|
|
|
struct objfile *
|
2000-07-30 09:48:28 +08:00
|
|
|
|
allocate_objfile (bfd *abfd, int flags)
|
1999-04-16 09:35:26 +08: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));
|
2002-07-12 23:23:10 +08:00
|
|
|
|
objfile->psymbol_cache = bcache_xmalloc ();
|
|
|
|
|
objfile->macro_cache = bcache_xmalloc ();
|
2004-02-10 07:50:55 +08: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-04 04:39:41 +08:00
|
|
|
|
terminate_minimal_symbol_table (objfile);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2003-08-22 06:35:33 +08:00
|
|
|
|
objfile_alloc_data (objfile);
|
|
|
|
|
|
1999-04-16 09:35:26 +08: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. */
|
|
|
|
|
|
2009-08-22 01:57:17 +08:00
|
|
|
|
objfile->obfd = gdb_bfd_ref (abfd);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (objfile->name != NULL)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2004-08-11 05:52:05 +08:00
|
|
|
|
xfree (objfile->name);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
if (abfd != NULL)
|
|
|
|
|
{
|
2008-03-26 22:53:28 +08:00
|
|
|
|
/* Look up the gdbarch associated with the BFD. */
|
|
|
|
|
objfile->gdbarch = gdbarch_from_bfd (abfd);
|
|
|
|
|
|
2004-10-01 03:57:54 +08:00
|
|
|
|
objfile->name = xstrdup (bfd_get_filename (abfd));
|
1999-07-08 04:19:36 +08:00
|
|
|
|
objfile->mtime = bfd_get_mtime (abfd);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Build section table. */
|
|
|
|
|
|
|
|
|
|
if (build_objfile_section_table (objfile))
|
|
|
|
|
{
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 12:06:14 +08:00
|
|
|
|
error (_("Can't find the file sections in `%s': %s"),
|
1999-07-08 04:19:36 +08:00
|
|
|
|
objfile->name, bfd_errmsg (bfd_get_error ()));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2003-02-05 05:55:26 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
2004-10-01 03:57:54 +08:00
|
|
|
|
objfile->name = xstrdup ("<<anonymous objfile>>");
|
2003-02-05 05:55:26 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08: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-05 00:52:34 +08: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-12 03:49:20 +08: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-05 00:52:34 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Add this file onto the tail of the linked list of other such files. */
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
objfile->next = NULL;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
if (object_files == NULL)
|
|
|
|
|
object_files = objfile;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (last_one = object_files;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
last_one->next;
|
|
|
|
|
last_one = last_one->next);
|
|
|
|
|
last_one->next = objfile;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-10-12 12:37:53 +08:00
|
|
|
|
/* Save passed in flag bits. */
|
|
|
|
|
objfile->flags |= flags;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-23 03:21:31 +08:00
|
|
|
|
objfiles_changed_p = 1; /* Rebuild section map next time we need it. */
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return (objfile);
|
|
|
|
|
}
|
|
|
|
|
|
2008-03-26 22:53:28 +08:00
|
|
|
|
/* Retrieve the gdbarch associated with OBJFILE. */
|
|
|
|
|
struct gdbarch *
|
|
|
|
|
get_objfile_arch (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
return objfile->gdbarch;
|
|
|
|
|
}
|
|
|
|
|
|
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 23:46:33 +08: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);
|
|
|
|
|
}
|
2008-05-03 04:35:39 +08:00
|
|
|
|
else if (bfd_get_file_flags (objfile->obfd) & DYNAMIC
|
|
|
|
|
&& bfd_get_start_address (objfile->obfd) != 0)
|
|
|
|
|
/* Some shared libraries may have entry points set and be
|
|
|
|
|
runnable. There's no clear way to indicate this, so just check
|
|
|
|
|
for values other than zero. */
|
|
|
|
|
objfile->ei.entry_point = bfd_get_start_address (objfile->obfd);
|
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 23:46:33 +08:00
|
|
|
|
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)
|
|
|
|
|
{
|
2009-07-29 00:39:06 +08:00
|
|
|
|
struct gdbarch *gdbarch;
|
|
|
|
|
CORE_ADDR entry_point;
|
|
|
|
|
|
|
|
|
|
if (symfile_objfile == NULL)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
gdbarch = get_objfile_arch (symfile_objfile);
|
|
|
|
|
|
|
|
|
|
entry_point = symfile_objfile->ei.entry_point;
|
|
|
|
|
|
|
|
|
|
/* Make certain that the address points at real code, and not a
|
|
|
|
|
function descriptor. */
|
|
|
|
|
entry_point = gdbarch_convert_from_func_ptr_addr (gdbarch, entry_point,
|
|
|
|
|
¤t_target);
|
|
|
|
|
|
|
|
|
|
/* Remove any ISA markers, so that this matches entries in the
|
|
|
|
|
symbol table. */
|
|
|
|
|
entry_point = gdbarch_addr_bits_remove (gdbarch, entry_point);
|
|
|
|
|
|
|
|
|
|
return entry_point;
|
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 23:46:33 +08:00
|
|
|
|
}
|
2003-02-04 04:39:41 +08: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 07:13:47 +08:00
|
|
|
|
OBJFILE->objfile_obstack; otherwise, just initialize
|
2003-02-04 04:39:41 +08: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 07:13:47 +08:00
|
|
|
|
obstack_alloc (&objfile->objfile_obstack,
|
2003-02-04 04:39:41 +08:00
|
|
|
|
sizeof (objfile->msymbols[0])));
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct minimal_symbol *m
|
|
|
|
|
= &objfile->msymbols[objfile->minimal_symbol_count];
|
|
|
|
|
|
|
|
|
|
memset (m, 0, sizeof (*m));
|
2004-02-18 03:37:37 +08:00
|
|
|
|
/* Don't rely on these enumeration values being 0's. */
|
|
|
|
|
MSYMBOL_TYPE (m) = mst_unknown;
|
2003-02-04 04:39:41 +08: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 07:03:32 +08: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__,
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up error_no_arg, query, perror_with_name, complaint, and
internal_error.
* breakpoint.c, cp-abi.c, cp-namespace.c, cp-support.c: Update.
* cris-tdep.c, dbxread.c, dictionary.c, dsrec.c: Update.
* dummy-frame.c, dve3900-rom.c, dwarf2-frame.c, dwarf2expr.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, event-loop.c: Update.
* exceptions.c, exec.c, f-lang.c, findvar.c, fork-child.c: Update.
* frame-unwind.c, frame.c, frv-linux-tdep.c, frv-tdep.c: Update.
* gdb_assert.h, gdbarch.c, gdbtypes.c, gnu-nat.c: Update.
* go32-nat.c, hppa-tdep.c, hppabsd-nat.c, hpread.c: Update.
* i386-linux-nat.c, i386-nat.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386fbsd-nat.c, inf-ptrace.c, inf-ttrace.c, infcall.c: Update.
* infcmd.c, inflow.c, infptrace.c, infrun.c, inftarg.c: Update.
* interps.c, language.c, linespec.c, linux-nat.c: Update.
* m32r-linux-nat.c, m68k-tdep.c, m68kbsd-nat.c: Update.
* m68klinux-nat.c, m88kbsd-nat.c, macroexp.c, macroscope.c: Update.
* macrotab.c, maint.c, mdebugread.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mips64obsd-nat.c: Update.
* mipsnbsd-nat.c, mn10300-tdep.c, monitor.c, nto-procfs.c: Update.
* objc-lang.c, objfiles.c, objfiles.h, ocd.c, osabi.c: Update.
* parse.c, ppc-bdm.c, ppc-linux-nat.c, ppc-sysv-tdep.c: Update.
* ppcnbsd-nat.c, ppcobsd-nat.c, printcmd.c, procfs.c: Update.
* regcache.c, reggroups.c, remote-e7000.c, remote-mips.c: Update.
* remote-rdp.c, remote-sds.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote.c, rs6000-nat.c, rs6000-tdep.c: Update.
* s390-nat.c, s390-tdep.c, sentinel-frame.c, serial.c: Update.
* sh-tdep.c, sh3-rom.c, sh64-tdep.c, shnbsd-nat.c: Update.
* solib-aix5.c, solib-svr4.c, solib.c, source.c: Update.
* sparc-nat.c, stabsread.c, stack.c, symfile.c, symtab.c: Update.
* symtab.h, target.c, tracepoint.c, ui-file.c, ui-out.c: Update.
* utils.c, valops.c, valprint.c, vax-nat.c, vaxbsd-nat.c: Update.
* win32-nat.c, xcoffread.c, xstormy16-tdep.c: Update.
* cli/cli-cmds.c, cli/cli-logging.c, cli/cli-script.c: Update.
* cli/cli-setshow.c, mi/mi-cmd-break.c, mi/mi-cmds.c: Update.
* mi/mi-console.c, mi/mi-getopt.c, mi/mi-out.c: Update.
* tui/tui-file.c, tui/tui-interp.c: Update.
2005-02-12 02:13:55 +08:00
|
|
|
|
_("put_objfile_before: before objfile not in list"));
|
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 07:03:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Put OBJFILE at the front of the list. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 09:48:28 +08:00
|
|
|
|
objfile_to_front (struct objfile *objfile)
|
1999-04-16 09:35:26 +08: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 09:48:28 +08:00
|
|
|
|
unlink_objfile (struct objfile *objfile)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct objfile **objpp;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
if (*objpp == objfile)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08: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-16 00:55:07 +08:00
|
|
|
|
return;
|
1999-04-16 09:35:26 +08: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-16 00:55:07 +08:00
|
|
|
|
|
2001-02-08 14:03:54 +08:00
|
|
|
|
internal_error (__FILE__, __LINE__,
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up error_no_arg, query, perror_with_name, complaint, and
internal_error.
* breakpoint.c, cp-abi.c, cp-namespace.c, cp-support.c: Update.
* cris-tdep.c, dbxread.c, dictionary.c, dsrec.c: Update.
* dummy-frame.c, dve3900-rom.c, dwarf2-frame.c, dwarf2expr.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, event-loop.c: Update.
* exceptions.c, exec.c, f-lang.c, findvar.c, fork-child.c: Update.
* frame-unwind.c, frame.c, frv-linux-tdep.c, frv-tdep.c: Update.
* gdb_assert.h, gdbarch.c, gdbtypes.c, gnu-nat.c: Update.
* go32-nat.c, hppa-tdep.c, hppabsd-nat.c, hpread.c: Update.
* i386-linux-nat.c, i386-nat.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386fbsd-nat.c, inf-ptrace.c, inf-ttrace.c, infcall.c: Update.
* infcmd.c, inflow.c, infptrace.c, infrun.c, inftarg.c: Update.
* interps.c, language.c, linespec.c, linux-nat.c: Update.
* m32r-linux-nat.c, m68k-tdep.c, m68kbsd-nat.c: Update.
* m68klinux-nat.c, m88kbsd-nat.c, macroexp.c, macroscope.c: Update.
* macrotab.c, maint.c, mdebugread.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mips64obsd-nat.c: Update.
* mipsnbsd-nat.c, mn10300-tdep.c, monitor.c, nto-procfs.c: Update.
* objc-lang.c, objfiles.c, objfiles.h, ocd.c, osabi.c: Update.
* parse.c, ppc-bdm.c, ppc-linux-nat.c, ppc-sysv-tdep.c: Update.
* ppcnbsd-nat.c, ppcobsd-nat.c, printcmd.c, procfs.c: Update.
* regcache.c, reggroups.c, remote-e7000.c, remote-mips.c: Update.
* remote-rdp.c, remote-sds.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote.c, rs6000-nat.c, rs6000-tdep.c: Update.
* s390-nat.c, s390-tdep.c, sentinel-frame.c, serial.c: Update.
* sh-tdep.c, sh3-rom.c, sh64-tdep.c, shnbsd-nat.c: Update.
* solib-aix5.c, solib-svr4.c, solib.c, source.c: Update.
* sparc-nat.c, stabsread.c, stack.c, symfile.c, symtab.c: Update.
* symtab.h, target.c, tracepoint.c, ui-file.c, ui-out.c: Update.
* utils.c, valops.c, valprint.c, vax-nat.c, vaxbsd-nat.c: Update.
* win32-nat.c, xcoffread.c, xstormy16-tdep.c: Update.
* cli/cli-cmds.c, cli/cli-logging.c, cli/cli-script.c: Update.
* cli/cli-setshow.c, mi/mi-cmd-break.c, mi/mi-cmds.c: Update.
* mi/mi-console.c, mi/mi-getopt.c, mi/mi-out.c: Update.
* tui/tui-file.c, tui/tui-interp.c: Update.
2005-02-12 02:13:55 +08:00
|
|
|
|
_("unlink_objfile: objfile already unlinked"));
|
1999-04-16 09:35:26 +08: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 07:13:47 +08:00
|
|
|
|
that as much as possible is allocated on the objfile_obstack
|
|
|
|
|
so that the memory can be efficiently freed.
|
1999-04-16 09:35:26 +08: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-08 04:19:36 +08:00
|
|
|
|
objfile -> sf
|
1999-04-16 09:35:26 +08: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 09:48:28 +08:00
|
|
|
|
free_objfile (struct objfile *objfile)
|
1999-04-16 09:35:26 +08: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 07:03:32 +08: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;
|
|
|
|
|
}
|
|
|
|
|
|
gdb/
* Makefile.in (gdbtypes_h, gdbtypes.o, utils.o): Update.
* defs.h (hashtab_obstack_allocate, dummy_obstack_deallocate): Add
prototypes.
* dwarf2read.c (read_subroutine_type): Use TYPE_ZALLOC.
(hashtab_obstack_allocate, dummy_obstack_deallocate): Moved to...
* utils.c (hashtab_obstack_allocate, dummy_obstack_deallocate):
...here.
* gdbtypes.c: Include "hashtab.h".
(build_gdbtypes): Remove extra prototype.
(struct type_pair, type_pair_hash, type_pair_eq)
(create_copied_types_hash, copy_type_recursive): New.
* gdbtypes.h: Include "hashtab.h".
(TYPE_ZALLOC): New.
(create_copied_types_hash, copy_type_recursive): New prototypes.
* objfiles.c (free_objfile): Call preserve_values.
* symfile.c (reread_symbols): Likewise.
(clear_symtab_users): Remove calls to clear_value_history and
clear_internalvars.
* value.c (clear_value_history, clear_internalvars): Removed.
(preserve_one_value, preserve_values): New functions.
* value.h (clear_value_history, clear_internalvars): Removed.
(preserve_values): New prototype.
* tracepoint.c (_initialize_tracepoint): Do not initialize convenience
variables here.
gdb/doc/
* gdb.texinfo (Files): Remove obsolete bits from the description
of "symbol-file".
2006-02-02 07:14:11 +08:00
|
|
|
|
/* Remove any references to this objfile in the global value
|
|
|
|
|
lists. */
|
|
|
|
|
preserve_values (objfile);
|
|
|
|
|
|
1999-04-16 09:35:26 +08: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-08 04:19:36 +08:00
|
|
|
|
if (objfile->sf != NULL)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
(*objfile->sf->sym_finish) (objfile);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2009-03-12 04:26:02 +08:00
|
|
|
|
/* Discard any data modules have associated with the objfile. */
|
|
|
|
|
objfile_free_data (objfile);
|
|
|
|
|
|
2009-08-05 02:46:05 +08:00
|
|
|
|
gdb_bfd_unref (objfile->obfd);
|
1999-04-16 09:35:26 +08: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-08 04:19:36 +08:00
|
|
|
|
|
2006-01-07 00:23:35 +08:00
|
|
|
|
/* Not all our callers call clear_symtab_users (objfile_purge_solibs,
|
|
|
|
|
for example), so we need to call this here. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
clear_pc_function_cache ();
|
|
|
|
|
|
2006-08-09 01:39:10 +08:00
|
|
|
|
/* Clear globals which might have pointed into a removed objfile.
|
|
|
|
|
FIXME: It's not clear which of these are supposed to persist
|
|
|
|
|
between expressions and which ought to be reset each time. */
|
|
|
|
|
expression_context_block = NULL;
|
|
|
|
|
innermost_block = NULL;
|
|
|
|
|
|
2006-01-07 00:23:35 +08:00
|
|
|
|
/* Check to see if the current_source_symtab belongs to this objfile,
|
|
|
|
|
and if so, call clear_current_source_symtab_and_line. */
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
|
|
|
|
|
struct symtab *s;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILE_SYMTABS (objfile, s)
|
|
|
|
|
{
|
|
|
|
|
if (s == cursal.symtab)
|
|
|
|
|
clear_current_source_symtab_and_line ();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-01-20 03:56:02 +08:00
|
|
|
|
/* The last thing we do is free the objfile struct itself. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2004-01-20 03:56:02 +08:00
|
|
|
|
if (objfile->name != NULL)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2004-08-11 05:52:05 +08:00
|
|
|
|
xfree (objfile->name);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2004-01-20 03:56:02 +08:00
|
|
|
|
if (objfile->global_psymbols.list)
|
2004-08-11 05:52:05 +08:00
|
|
|
|
xfree (objfile->global_psymbols.list);
|
2004-01-20 03:56:02 +08:00
|
|
|
|
if (objfile->static_psymbols.list)
|
2004-08-11 05:52:05 +08:00
|
|
|
|
xfree (objfile->static_psymbols.list);
|
2004-01-20 03:56:02 +08: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-08 00:57:55 +08:00
|
|
|
|
obstack_free (&objfile->objfile_obstack, 0);
|
2004-08-11 05:52:05 +08:00
|
|
|
|
xfree (objfile);
|
2004-01-20 03:56:02 +08:00
|
|
|
|
objfile = NULL;
|
2009-07-23 03:21:31 +08:00
|
|
|
|
objfiles_changed_p = 1; /* Rebuild section map next time we need it. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2000-05-22 17:02:23 +08: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 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
/* Free all the object files at once and clean up their users. */
|
|
|
|
|
|
|
|
|
|
void
|
2000-07-30 09:48:28 +08:00
|
|
|
|
free_all_objfiles (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile *objfile, *temp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES_SAFE (objfile, temp)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
|
|
|
|
free_objfile (objfile);
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
clear_symtab_users ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
|
|
|
|
|
entries in new_offsets. */
|
|
|
|
|
void
|
2000-07-30 09:48:28 +08:00
|
|
|
|
objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2008-05-04 02:04:02 +08:00
|
|
|
|
struct obj_section *s;
|
1999-09-09 08:02:17 +08:00
|
|
|
|
struct section_offsets *delta =
|
2003-06-07 07:33:00 +08:00
|
|
|
|
((struct section_offsets *)
|
|
|
|
|
alloca (SIZEOF_N_SECTION_OFFSETS (objfile->num_sections)));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
int something_changed = 0;
|
|
|
|
|
for (i = 0; i < objfile->num_sections; ++i)
|
|
|
|
|
{
|
2000-08-07 23:02:48 +08:00
|
|
|
|
delta->offsets[i] =
|
1999-04-16 09:35:26 +08: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-08 04:19:36 +08: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 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
/* Don't relocate a shared blockvector more than once. */
|
|
|
|
|
if (!s->primary)
|
|
|
|
|
continue;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
bv = BLOCKVECTOR (s);
|
2009-07-14 22:55:06 +08:00
|
|
|
|
if (BLOCKVECTOR_MAP (bv))
|
|
|
|
|
addrmap_relocate (BLOCKVECTOR_MAP (bv),
|
|
|
|
|
ANOFFSET (delta, s->block_line_section));
|
|
|
|
|
|
1999-07-08 04:19:36 +08:00
|
|
|
|
for (i = 0; i < BLOCKVECTOR_NBLOCKS (bv); ++i)
|
|
|
|
|
{
|
|
|
|
|
struct block *b;
|
2001-10-13 07:51:30 +08: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 07:29:49 +08:00
|
|
|
|
struct dict_iterator iter;
|
1999-07-08 04:19:36 +08: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 07:29:49 +08:00
|
|
|
|
ALL_BLOCK_SYMBOLS (b, iter, sym)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2000-08-05 07:13:50 +08:00
|
|
|
|
fixup_symbol_section (sym, objfile);
|
|
|
|
|
|
1999-07-08 04:19:36 +08: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-15 01:43:20 +08:00
|
|
|
|
any symbols in STRUCT_DOMAIN or UNDEF_DOMAIN.
|
1999-07-08 04:19:36 +08: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
|
2008-05-23 00:58:02 +08:00
|
|
|
|
|| SYMBOL_CLASS (sym) == LOC_STATIC)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
&& SYMBOL_SECTION (sym) >= 0)
|
|
|
|
|
{
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (sym) +=
|
|
|
|
|
ANOFFSET (delta, SYMBOL_SECTION (sym));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct partial_symtab *p;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILE_PSYMTABS (objfile, p)
|
1999-07-08 04:19:36 +08: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-05 00:52:34 +08:00
|
|
|
|
p->textlow += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
|
|
|
|
|
p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT (objfile));
|
1999-07-08 04:19:36 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct partial_symbol **psym;
|
|
|
|
|
|
|
|
|
|
for (psym = objfile->global_psymbols.list;
|
|
|
|
|
psym < objfile->global_psymbols.next;
|
|
|
|
|
psym++)
|
2000-08-05 07:13:50 +08:00
|
|
|
|
{
|
|
|
|
|
fixup_psymbol_section (*psym, objfile);
|
|
|
|
|
if (SYMBOL_SECTION (*psym) >= 0)
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
|
|
|
|
|
SYMBOL_SECTION (*psym));
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
for (psym = objfile->static_psymbols.list;
|
|
|
|
|
psym < objfile->static_psymbols.next;
|
|
|
|
|
psym++)
|
2000-08-05 07:13:50 +08:00
|
|
|
|
{
|
|
|
|
|
fixup_psymbol_section (*psym, objfile);
|
|
|
|
|
if (SYMBOL_SECTION (*psym) >= 0)
|
|
|
|
|
SYMBOL_VALUE_ADDRESS (*psym) += ANOFFSET (delta,
|
|
|
|
|
SYMBOL_SECTION (*psym));
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
struct minimal_symbol *msym;
|
|
|
|
|
ALL_OBJFILE_MSYMBOLS (objfile, msym)
|
|
|
|
|
if (SYMBOL_SECTION (msym) >= 0)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
/* Relocating different sections by different amounts may cause the symbols
|
|
|
|
|
to be out of order. */
|
|
|
|
|
msymbols_sort (objfile);
|
|
|
|
|
|
2000-11-04 03:00:06 +08: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));
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-17 19:16:13 +08:00
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for (i = 0; i < objfile->num_sections; ++i)
|
|
|
|
|
(objfile->section_offsets)->offsets[i] = ANOFFSET (new_offsets, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Rebuild section map next time we need it. */
|
|
|
|
|
objfiles_changed_p = 1;
|
|
|
|
|
|
2008-05-04 02:04:02 +08:00
|
|
|
|
/* Update the table in exec_ops, used to read memory. */
|
|
|
|
|
ALL_OBJFILE_OSECTIONS (objfile, s)
|
|
|
|
|
{
|
|
|
|
|
int idx = s->the_bfd_section->index;
|
|
|
|
|
|
|
|
|
|
exec_set_section_address (bfd_get_filename (objfile->obfd), idx,
|
2008-08-20 19:21:44 +08:00
|
|
|
|
obj_section_addr (s));
|
2008-05-04 02:04:02 +08:00
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* Relocate breakpoints as necessary, after things are relocated. */
|
2009-06-24 00:28:45 +08:00
|
|
|
|
breakpoint_re_set ();
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
2009-08-28 05:56:38 +08:00
|
|
|
|
/* Return non-zero if OBJFILE has partial symbols. */
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
objfile_has_partial_symbols (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
return objfile->psymtabs != NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Return non-zero if OBJFILE has full symbols. */
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
objfile_has_full_symbols (struct objfile *objfile)
|
|
|
|
|
{
|
|
|
|
|
return objfile->symtabs != NULL;
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
/* 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 09:48:28 +08:00
|
|
|
|
have_partial_symbols (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2009-08-28 05:56:38 +08:00
|
|
|
|
if (objfile_has_partial_symbols (ofp))
|
|
|
|
|
return 1;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08: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 09:48:28 +08:00
|
|
|
|
have_full_symbols (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2009-08-28 05:56:38 +08:00
|
|
|
|
if (objfile_has_full_symbols (ofp))
|
|
|
|
|
return 1;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
}
|
1999-04-16 09:35:26 +08: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-08 04:19:36 +08:00
|
|
|
|
*/
|
1999-04-16 09:35:26 +08:00
|
|
|
|
void
|
2000-07-30 09:48:28 +08:00
|
|
|
|
objfile_purge_solibs (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
1999-07-08 04:19:36 +08:00
|
|
|
|
struct objfile *objf;
|
|
|
|
|
struct objfile *temp;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
ALL_OBJFILES_SAFE (objf, temp)
|
|
|
|
|
{
|
|
|
|
|
/* We assume that the solib package has been purged already, or will
|
|
|
|
|
be soon.
|
1999-07-08 04:19:36 +08:00
|
|
|
|
*/
|
1999-10-12 12:37:53 +08:00
|
|
|
|
if (!(objf->flags & OBJF_USERLOADED) && (objf->flags & OBJF_SHARED))
|
1999-04-16 09:35:26 +08: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 09:48:28 +08:00
|
|
|
|
have_minimal_symbols (void)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile *ofp;
|
|
|
|
|
|
|
|
|
|
ALL_OBJFILES (ofp)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
2003-02-04 04:39:41 +08:00
|
|
|
|
if (ofp->minimal_symbol_count > 0)
|
1999-07-08 04:19:36 +08:00
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
1999-04-16 09:35:26 +08:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2009-07-22 04:54:30 +08:00
|
|
|
|
/* Qsort comparison function. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
qsort_cmp (const void *a, const void *b)
|
|
|
|
|
{
|
|
|
|
|
const struct obj_section *sect1 = *(const struct obj_section **) a;
|
|
|
|
|
const struct obj_section *sect2 = *(const struct obj_section **) b;
|
|
|
|
|
const CORE_ADDR sect1_addr = obj_section_addr (sect1);
|
|
|
|
|
const CORE_ADDR sect2_addr = obj_section_addr (sect2);
|
|
|
|
|
|
|
|
|
|
if (sect1_addr < sect2_addr)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (obj_section_endaddr (sect1) <= sect2_addr);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else if (sect1_addr > sect2_addr)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (sect1_addr >= obj_section_endaddr (sect2));
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2009-08-11 04:14:14 +08:00
|
|
|
|
/* Select "better" obj_section to keep. We prefer the one that came from
|
|
|
|
|
the real object, rather than the one from separate debuginfo.
|
|
|
|
|
Most of the time the two sections are exactly identical, but with
|
|
|
|
|
prelinking the .rel.dyn section in the real object may have different
|
|
|
|
|
size. */
|
|
|
|
|
|
|
|
|
|
static struct obj_section *
|
|
|
|
|
preferred_obj_section (struct obj_section *a, struct obj_section *b)
|
|
|
|
|
{
|
|
|
|
|
gdb_assert (obj_section_addr (a) == obj_section_addr (b));
|
|
|
|
|
gdb_assert ((a->objfile->separate_debug_objfile == b->objfile)
|
|
|
|
|
|| (b->objfile->separate_debug_objfile == a->objfile));
|
|
|
|
|
gdb_assert ((a->objfile->separate_debug_objfile_backlink == b->objfile)
|
|
|
|
|
|| (b->objfile->separate_debug_objfile_backlink == a->objfile));
|
|
|
|
|
|
|
|
|
|
if (a->objfile->separate_debug_objfile != NULL)
|
|
|
|
|
return a;
|
|
|
|
|
return b;
|
|
|
|
|
}
|
|
|
|
|
|
2009-07-22 04:54:30 +08:00
|
|
|
|
/* Update PMAP, PMAP_SIZE with non-TLS sections from all objfiles. */
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
update_section_map (struct obj_section ***pmap, int *pmap_size)
|
|
|
|
|
{
|
2009-08-11 04:14:14 +08:00
|
|
|
|
int map_size, i, j;
|
2009-07-22 04:54:30 +08:00
|
|
|
|
struct obj_section *s, **map;
|
|
|
|
|
struct objfile *objfile;
|
|
|
|
|
|
2009-07-23 03:21:31 +08:00
|
|
|
|
gdb_assert (objfiles_changed_p != 0);
|
2009-07-22 04:54:30 +08:00
|
|
|
|
|
|
|
|
|
map = *pmap;
|
|
|
|
|
xfree (map);
|
|
|
|
|
|
|
|
|
|
#define insert_p(objf, sec) \
|
|
|
|
|
((bfd_get_section_flags ((objf)->obfd, (sec)->the_bfd_section) \
|
|
|
|
|
& SEC_THREAD_LOCAL) == 0)
|
|
|
|
|
|
|
|
|
|
map_size = 0;
|
|
|
|
|
ALL_OBJSECTIONS (objfile, s)
|
|
|
|
|
if (insert_p (objfile, s))
|
|
|
|
|
map_size += 1;
|
|
|
|
|
|
|
|
|
|
map = xmalloc (map_size * sizeof (*map));
|
|
|
|
|
|
2009-08-11 04:14:14 +08:00
|
|
|
|
i = 0;
|
2009-07-22 04:54:30 +08:00
|
|
|
|
ALL_OBJSECTIONS (objfile, s)
|
|
|
|
|
if (insert_p (objfile, s))
|
2009-08-11 04:14:14 +08:00
|
|
|
|
map[i++] = s;
|
2009-07-22 04:54:30 +08:00
|
|
|
|
|
|
|
|
|
#undef insert_p
|
|
|
|
|
|
|
|
|
|
qsort (map, map_size, sizeof (*map), qsort_cmp);
|
|
|
|
|
|
2009-08-11 04:14:14 +08:00
|
|
|
|
/* With separate debuginfo files, we may have up to two (almost)
|
|
|
|
|
identical copies of some obj_sections in the map.
|
|
|
|
|
Filter out duplicates. */
|
|
|
|
|
for (i = 0, j = 0; i < map_size; ++i)
|
|
|
|
|
{
|
|
|
|
|
struct obj_section *sect1 = map[i];
|
|
|
|
|
struct obj_section *sect2 = (i + 1 < map_size) ? map[i + 1] : NULL;
|
|
|
|
|
|
|
|
|
|
if (sect2 == NULL
|
|
|
|
|
|| obj_section_addr (sect1) != obj_section_addr (sect2))
|
|
|
|
|
map[j++] = sect1;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
map[j++] = preferred_obj_section (sect1, sect2);
|
|
|
|
|
++i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (j < map_size)
|
|
|
|
|
{
|
|
|
|
|
/* Some duplicates were eliminated.
|
|
|
|
|
The new size shouldn't be less than half of the original. */
|
|
|
|
|
gdb_assert (map_size / 2 <= j);
|
|
|
|
|
map_size = j;
|
|
|
|
|
|
|
|
|
|
map = xrealloc (map, map_size * sizeof (*map)); /* Trim excess space. */
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
gdb_assert (j == map_size);
|
|
|
|
|
|
2009-07-22 04:54:30 +08:00
|
|
|
|
*pmap = map;
|
|
|
|
|
*pmap_size = map_size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Bsearch comparison function. */
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
bsearch_cmp (const void *key, const void *elt)
|
|
|
|
|
{
|
|
|
|
|
const CORE_ADDR pc = *(CORE_ADDR *) key;
|
|
|
|
|
const struct obj_section *section = *(const struct obj_section **) elt;
|
|
|
|
|
|
|
|
|
|
if (pc < obj_section_addr (section))
|
|
|
|
|
return -1;
|
|
|
|
|
if (pc < obj_section_endaddr (section))
|
|
|
|
|
return 0;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
* breakpoint.h (struct bp_location): Change type of section
member to "struct obj_section *".
* tracepoint.h (struct tracepoint): Likewise.
* symtab.h (struct general_symbol_info): Replace bfd_section
member with obj_section.
(struct symtab_and_line): Change type of section member to
"struct obj_section *".
(SYMBOL_BFD_SECTION): Remove macro, replace by ...
(SYMBOL_OBJ_SECTION): ... this.
* minsym.c (prim_record_minimal_symbol_and_info): Record symbol
section as obj_section instead of bfd_section.
* ada-lang.c (ada_decode_symbol): Use gsymbol->obj_section
directly instead of looking of obj_section from bfd_section.
* objfiles.h (find_pc_sect_section): Remove.
* objfiles.c (find_pc_sect_section): Remove.
(find_pc_section): Inline find_pc_sect_section code.
* symfile.h (find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(section_is_overlay, section_is_mapped): Change type of section
argument to struct obj_section *.
(pc_in_mapped_range, pc_in_unmapped_range): Likewise.
(overlay_mapped_address, overlay_unmapped_address): Likewise.
(symbol_overlayed_address): Likewise.
* symtab.h (symbol_overlayed_address): Likewise.
* symfile.c (overlay_is_mapped): Remove.
(section_is_mapped): Inline overlay_is_mapped code. Update.
(overlay_invalidate_all): Update.
(section_is_overlay): Change section argument to type
"struct obj_section *". Use bfd_ methods.
(pc_in_unmapped_range): Likewise. Handle relocated sections.
(pc_in_mapped_range): Likewise. Handle relocated sections.
(sections_overlap): Likewise.
(overlay_unmapped_address): Likewise.
(overlay_mapped_address): Likewise.
(symbol_overlayed_address): Likewise.
(find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(list_overlays_command): Update.
(map_overlay_command, unmap_overlay_command): Update.
(simple_overlay_update): Update.
* block.h (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* block.c (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* symtab.h (find_pc_sect_function, find_pc_sect_psymtab,
find_pc_sect_symtab, find_pc_sect_psymbol, find_pc_sect_line,
lookup_minimal_symbol_by_pc_section, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_sect_function): Likewise.
* breakpoint.c (describe_other_breakpoints): Likewise.
(breakpoint_has_pc, check_duplicates_for): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_minimal_symbol_by_pc_section): Likewise.
* symtab.c (find_pc_sect_psymtab_closer): Likewise.
(find_pc_sect_psymtab, find_pc_sect_psymbol, find_pc_sect_symtab,
find_pc_sect_line, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_partial_function): Update to section
type changes. No longer call find_pc_sect_section.
(cache_pc_function_section): Change to type "struct obj_section *".
* breakpoint.c (resolve_sal_pc): Update to section type changes.
* exec.c (xfer_memory): Likewise.
* findvar.c (read_var_value): Likewise.
* infcmd.c (jump_command): Likewise.
* linespec.c (minsym_found): Likewise.
* maint.c (maintenance_translate_address): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_solib_trampoline_symbol_by_pc): Likewise.
* parse.c (write_exp_msymbol): Likewise.
* printcmd.c (build_address_symbolic): Likewise.
(address_info, sym_info): Likewise.
* symmisc.c (dump_msymbols, print_symbol): Likewise.
* symtab.c (fixup_section): Likewise.
(fixup_symbol_section, fixup_psymbol_section): Likewise.
(find_pc_line, find_function_start_sal): Likewise.
* target.c (memory_xfer_partial): Likewise.
* hppa-hpux-tdep.c (hppa64_hpux_in_solib_call_trampoline): Likewise.
* spu-tdep.c (spu_overlay_update): Likewise.
2008-09-05 19:37:18 +08:00
|
|
|
|
/* Returns a section whose range includes PC or NULL if none found. */
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
|
|
|
|
struct obj_section *
|
* breakpoint.h (struct bp_location): Change type of section
member to "struct obj_section *".
* tracepoint.h (struct tracepoint): Likewise.
* symtab.h (struct general_symbol_info): Replace bfd_section
member with obj_section.
(struct symtab_and_line): Change type of section member to
"struct obj_section *".
(SYMBOL_BFD_SECTION): Remove macro, replace by ...
(SYMBOL_OBJ_SECTION): ... this.
* minsym.c (prim_record_minimal_symbol_and_info): Record symbol
section as obj_section instead of bfd_section.
* ada-lang.c (ada_decode_symbol): Use gsymbol->obj_section
directly instead of looking of obj_section from bfd_section.
* objfiles.h (find_pc_sect_section): Remove.
* objfiles.c (find_pc_sect_section): Remove.
(find_pc_section): Inline find_pc_sect_section code.
* symfile.h (find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(section_is_overlay, section_is_mapped): Change type of section
argument to struct obj_section *.
(pc_in_mapped_range, pc_in_unmapped_range): Likewise.
(overlay_mapped_address, overlay_unmapped_address): Likewise.
(symbol_overlayed_address): Likewise.
* symtab.h (symbol_overlayed_address): Likewise.
* symfile.c (overlay_is_mapped): Remove.
(section_is_mapped): Inline overlay_is_mapped code. Update.
(overlay_invalidate_all): Update.
(section_is_overlay): Change section argument to type
"struct obj_section *". Use bfd_ methods.
(pc_in_unmapped_range): Likewise. Handle relocated sections.
(pc_in_mapped_range): Likewise. Handle relocated sections.
(sections_overlap): Likewise.
(overlay_unmapped_address): Likewise.
(overlay_mapped_address): Likewise.
(symbol_overlayed_address): Likewise.
(find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(list_overlays_command): Update.
(map_overlay_command, unmap_overlay_command): Update.
(simple_overlay_update): Update.
* block.h (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* block.c (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* symtab.h (find_pc_sect_function, find_pc_sect_psymtab,
find_pc_sect_symtab, find_pc_sect_psymbol, find_pc_sect_line,
lookup_minimal_symbol_by_pc_section, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_sect_function): Likewise.
* breakpoint.c (describe_other_breakpoints): Likewise.
(breakpoint_has_pc, check_duplicates_for): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_minimal_symbol_by_pc_section): Likewise.
* symtab.c (find_pc_sect_psymtab_closer): Likewise.
(find_pc_sect_psymtab, find_pc_sect_psymbol, find_pc_sect_symtab,
find_pc_sect_line, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_partial_function): Update to section
type changes. No longer call find_pc_sect_section.
(cache_pc_function_section): Change to type "struct obj_section *".
* breakpoint.c (resolve_sal_pc): Update to section type changes.
* exec.c (xfer_memory): Likewise.
* findvar.c (read_var_value): Likewise.
* infcmd.c (jump_command): Likewise.
* linespec.c (minsym_found): Likewise.
* maint.c (maintenance_translate_address): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_solib_trampoline_symbol_by_pc): Likewise.
* parse.c (write_exp_msymbol): Likewise.
* printcmd.c (build_address_symbolic): Likewise.
(address_info, sym_info): Likewise.
* symmisc.c (dump_msymbols, print_symbol): Likewise.
* symtab.c (fixup_section): Likewise.
(fixup_symbol_section, fixup_psymbol_section): Likewise.
(find_pc_line, find_function_start_sal): Likewise.
* target.c (memory_xfer_partial): Likewise.
* hppa-hpux-tdep.c (hppa64_hpux_in_solib_call_trampoline): Likewise.
* spu-tdep.c (spu_overlay_update): Likewise.
2008-09-05 19:37:18 +08:00
|
|
|
|
find_pc_section (CORE_ADDR pc)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
2009-07-22 04:54:30 +08:00
|
|
|
|
static struct obj_section **sections;
|
|
|
|
|
static int num_sections;
|
|
|
|
|
|
|
|
|
|
struct obj_section *s, **sp;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
* breakpoint.h (struct bp_location): Change type of section
member to "struct obj_section *".
* tracepoint.h (struct tracepoint): Likewise.
* symtab.h (struct general_symbol_info): Replace bfd_section
member with obj_section.
(struct symtab_and_line): Change type of section member to
"struct obj_section *".
(SYMBOL_BFD_SECTION): Remove macro, replace by ...
(SYMBOL_OBJ_SECTION): ... this.
* minsym.c (prim_record_minimal_symbol_and_info): Record symbol
section as obj_section instead of bfd_section.
* ada-lang.c (ada_decode_symbol): Use gsymbol->obj_section
directly instead of looking of obj_section from bfd_section.
* objfiles.h (find_pc_sect_section): Remove.
* objfiles.c (find_pc_sect_section): Remove.
(find_pc_section): Inline find_pc_sect_section code.
* symfile.h (find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(section_is_overlay, section_is_mapped): Change type of section
argument to struct obj_section *.
(pc_in_mapped_range, pc_in_unmapped_range): Likewise.
(overlay_mapped_address, overlay_unmapped_address): Likewise.
(symbol_overlayed_address): Likewise.
* symtab.h (symbol_overlayed_address): Likewise.
* symfile.c (overlay_is_mapped): Remove.
(section_is_mapped): Inline overlay_is_mapped code. Update.
(overlay_invalidate_all): Update.
(section_is_overlay): Change section argument to type
"struct obj_section *". Use bfd_ methods.
(pc_in_unmapped_range): Likewise. Handle relocated sections.
(pc_in_mapped_range): Likewise. Handle relocated sections.
(sections_overlap): Likewise.
(overlay_unmapped_address): Likewise.
(overlay_mapped_address): Likewise.
(symbol_overlayed_address): Likewise.
(find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(list_overlays_command): Update.
(map_overlay_command, unmap_overlay_command): Update.
(simple_overlay_update): Update.
* block.h (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* block.c (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* symtab.h (find_pc_sect_function, find_pc_sect_psymtab,
find_pc_sect_symtab, find_pc_sect_psymbol, find_pc_sect_line,
lookup_minimal_symbol_by_pc_section, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_sect_function): Likewise.
* breakpoint.c (describe_other_breakpoints): Likewise.
(breakpoint_has_pc, check_duplicates_for): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_minimal_symbol_by_pc_section): Likewise.
* symtab.c (find_pc_sect_psymtab_closer): Likewise.
(find_pc_sect_psymtab, find_pc_sect_psymbol, find_pc_sect_symtab,
find_pc_sect_line, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_partial_function): Update to section
type changes. No longer call find_pc_sect_section.
(cache_pc_function_section): Change to type "struct obj_section *".
* breakpoint.c (resolve_sal_pc): Update to section type changes.
* exec.c (xfer_memory): Likewise.
* findvar.c (read_var_value): Likewise.
* infcmd.c (jump_command): Likewise.
* linespec.c (minsym_found): Likewise.
* maint.c (maintenance_translate_address): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_solib_trampoline_symbol_by_pc): Likewise.
* parse.c (write_exp_msymbol): Likewise.
* printcmd.c (build_address_symbolic): Likewise.
(address_info, sym_info): Likewise.
* symmisc.c (dump_msymbols, print_symbol): Likewise.
* symtab.c (fixup_section): Likewise.
(fixup_symbol_section, fixup_psymbol_section): Likewise.
(find_pc_line, find_function_start_sal): Likewise.
* target.c (memory_xfer_partial): Likewise.
* hppa-hpux-tdep.c (hppa64_hpux_in_solib_call_trampoline): Likewise.
* spu-tdep.c (spu_overlay_update): Likewise.
2008-09-05 19:37:18 +08:00
|
|
|
|
/* Check for mapped overlay section first. */
|
|
|
|
|
s = find_pc_mapped_section (pc);
|
|
|
|
|
if (s)
|
|
|
|
|
return s;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-23 03:21:31 +08:00
|
|
|
|
if (objfiles_changed_p != 0)
|
2009-07-22 04:54:30 +08:00
|
|
|
|
{
|
|
|
|
|
update_section_map (§ions, &num_sections);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
|
2009-07-22 04:54:30 +08:00
|
|
|
|
/* Don't need updates to section map until objfiles are added
|
|
|
|
|
or removed. */
|
2009-07-23 03:21:31 +08:00
|
|
|
|
objfiles_changed_p = 0;
|
2009-07-22 04:54:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sp = (struct obj_section **) bsearch (&pc, sections, num_sections,
|
|
|
|
|
sizeof (*sections), bsearch_cmp);
|
|
|
|
|
if (sp != NULL)
|
|
|
|
|
return *sp;
|
* breakpoint.h (struct bp_location): Change type of section
member to "struct obj_section *".
* tracepoint.h (struct tracepoint): Likewise.
* symtab.h (struct general_symbol_info): Replace bfd_section
member with obj_section.
(struct symtab_and_line): Change type of section member to
"struct obj_section *".
(SYMBOL_BFD_SECTION): Remove macro, replace by ...
(SYMBOL_OBJ_SECTION): ... this.
* minsym.c (prim_record_minimal_symbol_and_info): Record symbol
section as obj_section instead of bfd_section.
* ada-lang.c (ada_decode_symbol): Use gsymbol->obj_section
directly instead of looking of obj_section from bfd_section.
* objfiles.h (find_pc_sect_section): Remove.
* objfiles.c (find_pc_sect_section): Remove.
(find_pc_section): Inline find_pc_sect_section code.
* symfile.h (find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(section_is_overlay, section_is_mapped): Change type of section
argument to struct obj_section *.
(pc_in_mapped_range, pc_in_unmapped_range): Likewise.
(overlay_mapped_address, overlay_unmapped_address): Likewise.
(symbol_overlayed_address): Likewise.
* symtab.h (symbol_overlayed_address): Likewise.
* symfile.c (overlay_is_mapped): Remove.
(section_is_mapped): Inline overlay_is_mapped code. Update.
(overlay_invalidate_all): Update.
(section_is_overlay): Change section argument to type
"struct obj_section *". Use bfd_ methods.
(pc_in_unmapped_range): Likewise. Handle relocated sections.
(pc_in_mapped_range): Likewise. Handle relocated sections.
(sections_overlap): Likewise.
(overlay_unmapped_address): Likewise.
(overlay_mapped_address): Likewise.
(symbol_overlayed_address): Likewise.
(find_pc_overlay): Return struct obj_section *.
(find_pc_mapped_section): Likewise.
(list_overlays_command): Update.
(map_overlay_command, unmap_overlay_command): Update.
(simple_overlay_update): Update.
* block.h (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* block.c (blockvector_for_pc_sect): Change section argument
to type "struct obj_section *".
(block_for_pc_sect): Likewise.
* symtab.h (find_pc_sect_function, find_pc_sect_psymtab,
find_pc_sect_symtab, find_pc_sect_psymbol, find_pc_sect_line,
lookup_minimal_symbol_by_pc_section, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_sect_function): Likewise.
* breakpoint.c (describe_other_breakpoints): Likewise.
(breakpoint_has_pc, check_duplicates_for): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_minimal_symbol_by_pc_section): Likewise.
* symtab.c (find_pc_sect_psymtab_closer): Likewise.
(find_pc_sect_psymtab, find_pc_sect_psymbol, find_pc_sect_symtab,
find_pc_sect_line, find_function_start_pc): Likewise.
(matching_bfd_sections): Rename to ...
(matching_obj_sections): ... this. Update argument types.
* blockframe.c (find_pc_partial_function): Update to section
type changes. No longer call find_pc_sect_section.
(cache_pc_function_section): Change to type "struct obj_section *".
* breakpoint.c (resolve_sal_pc): Update to section type changes.
* exec.c (xfer_memory): Likewise.
* findvar.c (read_var_value): Likewise.
* infcmd.c (jump_command): Likewise.
* linespec.c (minsym_found): Likewise.
* maint.c (maintenance_translate_address): Likewise.
* minsyms.c (lookup_minimal_symbol_by_pc_section_1): Likewise.
(lookup_solib_trampoline_symbol_by_pc): Likewise.
* parse.c (write_exp_msymbol): Likewise.
* printcmd.c (build_address_symbolic): Likewise.
(address_info, sym_info): Likewise.
* symmisc.c (dump_msymbols, print_symbol): Likewise.
* symtab.c (fixup_section): Likewise.
(fixup_symbol_section, fixup_psymbol_section): Likewise.
(find_pc_line, find_function_start_sal): Likewise.
* target.c (memory_xfer_partial): Likewise.
* hppa-hpux-tdep.c (hppa64_hpux_in_solib_call_trampoline): Likewise.
* spu-tdep.c (spu_overlay_update): Likewise.
2008-09-05 19:37:18 +08:00
|
|
|
|
return NULL;
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
1999-04-16 09:35:26 +08: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 09:48:28 +08:00
|
|
|
|
in_plt_section (CORE_ADDR pc, char *name)
|
1999-04-16 09:35:26 +08:00
|
|
|
|
{
|
|
|
|
|
struct obj_section *s;
|
|
|
|
|
int retval = 0;
|
1999-07-08 04:19:36 +08:00
|
|
|
|
|
|
|
|
|
s = find_pc_section (pc);
|
|
|
|
|
|
1999-04-16 09:35:26 +08:00
|
|
|
|
retval = (s != NULL
|
|
|
|
|
&& s->the_bfd_section->name != NULL
|
2003-11-08 08:13:03 +08:00
|
|
|
|
&& strcmp (s->the_bfd_section->name, ".plt") == 0);
|
1999-07-08 04:19:36 +08:00
|
|
|
|
return (retval);
|
1999-04-16 09:35:26 +08:00
|
|
|
|
}
|
2003-08-22 06:35:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Keep a registry of per-objfile data-pointers required by other GDB
|
|
|
|
|
modules. */
|
|
|
|
|
|
|
|
|
|
struct objfile_data
|
|
|
|
|
{
|
|
|
|
|
unsigned index;
|
2008-05-03 04:38:16 +08:00
|
|
|
|
void (*cleanup) (struct objfile *, void *);
|
2003-08-22 06:35:33 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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 *
|
2008-05-03 04:38:16 +08:00
|
|
|
|
register_objfile_data_with_cleanup (void (*cleanup) (struct objfile *, void *))
|
2003-08-22 06:35:33 +08:00
|
|
|
|
{
|
|
|
|
|
struct objfile_data_registration **curr;
|
|
|
|
|
|
|
|
|
|
/* Append new registration. */
|
|
|
|
|
for (curr = &objfile_data_registry.registrations;
|
|
|
|
|
*curr != NULL; curr = &(*curr)->next);
|
1999-08-17 03:57:19 +08:00
|
|
|
|
|
2003-08-22 06:35:33 +08:00
|
|
|
|
*curr = XMALLOC (struct objfile_data_registration);
|
|
|
|
|
(*curr)->next = NULL;
|
|
|
|
|
(*curr)->data = XMALLOC (struct objfile_data);
|
|
|
|
|
(*curr)->data->index = objfile_data_registry.num_registrations++;
|
2008-05-03 04:38:16 +08:00
|
|
|
|
(*curr)->data->cleanup = cleanup;
|
2003-08-22 06:35:33 +08:00
|
|
|
|
|
|
|
|
|
return (*curr)->data;
|
|
|
|
|
}
|
|
|
|
|
|
2008-05-03 04:38:16 +08:00
|
|
|
|
const struct objfile_data *
|
|
|
|
|
register_objfile_data (void)
|
|
|
|
|
{
|
|
|
|
|
return register_objfile_data_with_cleanup (NULL);
|
|
|
|
|
}
|
|
|
|
|
|
2003-08-22 06:35:33 +08:00
|
|
|
|
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);
|
2008-05-03 04:38:16 +08:00
|
|
|
|
clear_objfile_data (objfile);
|
2003-08-22 06:35:33 +08:00
|
|
|
|
xfree (objfile->data);
|
|
|
|
|
objfile->data = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2003-10-30 02:29:07 +08:00
|
|
|
|
void
|
|
|
|
|
clear_objfile_data (struct objfile *objfile)
|
|
|
|
|
{
|
2008-05-03 04:38:16 +08:00
|
|
|
|
struct objfile_data_registration *registration;
|
|
|
|
|
int i;
|
|
|
|
|
|
2003-10-30 02:29:07 +08:00
|
|
|
|
gdb_assert (objfile->data != NULL);
|
2008-05-03 04:38:16 +08:00
|
|
|
|
|
|
|
|
|
for (registration = objfile_data_registry.registrations, i = 0;
|
|
|
|
|
i < objfile->num_data;
|
|
|
|
|
registration = registration->next, i++)
|
|
|
|
|
if (objfile->data[i] != NULL && registration->data->cleanup)
|
|
|
|
|
registration->data->cleanup (objfile, objfile->data[i]);
|
|
|
|
|
|
2003-10-30 02:29:07 +08:00
|
|
|
|
memset (objfile->data, 0, objfile->num_data * sizeof (void *));
|
|
|
|
|
}
|
|
|
|
|
|
2003-08-22 06:35:33 +08: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];
|
|
|
|
|
}
|
2009-07-22 04:54:30 +08:00
|
|
|
|
|
2009-07-23 03:21:31 +08:00
|
|
|
|
/* Set objfiles_changed_p so section map will be rebuilt next time it
|
|
|
|
|
is used. Called by reread_symbols. */
|
2009-07-22 04:54:30 +08:00
|
|
|
|
|
|
|
|
|
void
|
2009-07-23 03:21:31 +08:00
|
|
|
|
objfiles_changed (void)
|
2009-07-22 04:54:30 +08:00
|
|
|
|
{
|
2009-07-23 03:21:31 +08:00
|
|
|
|
objfiles_changed_p = 1; /* Rebuild section map next time we need it. */
|
2009-07-22 04:54:30 +08:00
|
|
|
|
}
|
2009-08-05 02:46:05 +08:00
|
|
|
|
|
2009-08-22 01:57:17 +08:00
|
|
|
|
/* Add reference to ABFD. Returns ABFD. */
|
|
|
|
|
struct bfd *
|
|
|
|
|
gdb_bfd_ref (struct bfd *abfd)
|
|
|
|
|
{
|
|
|
|
|
int *p_refcount = bfd_usrdata (abfd);
|
|
|
|
|
|
|
|
|
|
if (p_refcount != NULL)
|
|
|
|
|
{
|
|
|
|
|
*p_refcount += 1;
|
|
|
|
|
return abfd;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p_refcount = xmalloc (sizeof (*p_refcount));
|
|
|
|
|
*p_refcount = 1;
|
|
|
|
|
bfd_usrdata (abfd) = p_refcount;
|
|
|
|
|
|
|
|
|
|
return abfd;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Unreference and possibly close ABFD. */
|
2009-08-05 02:46:05 +08:00
|
|
|
|
void
|
|
|
|
|
gdb_bfd_unref (struct bfd *abfd)
|
|
|
|
|
{
|
|
|
|
|
int *p_refcount;
|
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
|
|
if (abfd == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
2009-08-11 06:09:22 +08:00
|
|
|
|
p_refcount = bfd_usrdata (abfd);
|
2009-08-05 02:46:05 +08:00
|
|
|
|
|
2009-08-22 01:57:17 +08:00
|
|
|
|
/* Valid range for p_refcount: a pointer to int counter, which has a
|
|
|
|
|
value of 1 (single owner) or 2 (shared). */
|
|
|
|
|
gdb_assert (*p_refcount == 1 || *p_refcount == 2);
|
|
|
|
|
|
|
|
|
|
*p_refcount -= 1;
|
|
|
|
|
if (*p_refcount > 0)
|
|
|
|
|
return;
|
2009-08-05 02:46:05 +08:00
|
|
|
|
|
|
|
|
|
xfree (p_refcount);
|
2009-08-11 06:09:22 +08:00
|
|
|
|
bfd_usrdata (abfd) = NULL; /* Paranoia. */
|
2009-08-05 02:46:05 +08:00
|
|
|
|
|
|
|
|
|
name = bfd_get_filename (abfd);
|
|
|
|
|
if (!bfd_close (abfd))
|
|
|
|
|
warning (_("cannot close \"%s\": %s"),
|
|
|
|
|
name, bfd_errmsg (bfd_get_error ()));
|
|
|
|
|
xfree (name);
|
|
|
|
|
}
|