X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsymfile.h;h=4d08c71ecc741e6bb2729de77c07caa256bd782e;hb=31d99776c73d6fca13163da59c852b0fa99f89b8;hp=baa353e494c30906ee8d78521cbeaaa052d8f672;hpb=9ab9195f183692346cff01bbe15e77774ef1d608;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symfile.h b/gdb/symfile.h index baa353e494..4d08c71ecc 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -1,7 +1,7 @@ /* Definitions for reading symbol files into GDB. - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of GDB. @@ -17,17 +17,19 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ #if !defined (SYMFILE_H) #define SYMFILE_H /* This file requires that you first include "bfd.h". */ +#include "symtab.h" /* Opaque declarations. */ struct section_table; struct objfile; +struct obj_section; struct obstack; struct block; @@ -83,6 +85,28 @@ struct section_addr_info } other[1]; }; +struct symfile_segment_data +{ + /* How many segments are present in this file. If there are + two, the text segment is the first one and the data segment + is the second one. */ + int num_segments; + + /* If NUM_SEGMENTS is greater than zero, the original base address + of each segment. */ + CORE_ADDR *segment_bases; + + /* If NUM_SEGMENTS is greater than zero, the memory size of each + segment. */ + CORE_ADDR *segment_sizes; + + /* If NUM_SEGMENTS is greater than zero, this is an array of entries + recording which segment contains each BFD section. It is + ordered by section index. A zero means that the section is not + in any segment. */ + int *segment_info; +}; + /* Structure to keep track of symbol reading functions for various object file types. */ @@ -129,6 +153,12 @@ struct sym_fns void (*sym_offsets) (struct objfile *, struct section_addr_info *); + /* This function produces a format-independent description of + the segments of ABFD. Each segment is a unit of the file + which may be relocated independently. */ + + struct symfile_segment_data *(*sym_segments) (bfd *abfd); + /* Finds the next struct sym_fns. They are allocated and initialized in whatever module implements the functions pointed to; an initializer calls add_symtab_fns to add them to the global @@ -144,6 +174,10 @@ struct sym_fns extern void default_symfile_offsets (struct objfile *objfile, struct section_addr_info *); +/* The default version of sym_fns.sym_segments for readers that don't + do anything special. */ + +extern struct symfile_segment_data *default_symfile_segments (bfd *abfd); extern void extend_psymbol_list (struct psymbol_allocation_list *, struct objfile *); @@ -159,15 +193,6 @@ struct partial_symbol *add_psymbol_to_list (char *, int, domain_enum, long, CORE_ADDR, enum language, struct objfile *); -extern void add_psymbol_with_dem_name_to_list (char *, int, char *, int, - domain_enum, - enum address_class, - struct psymbol_allocation_list - *, long, CORE_ADDR, - enum language, - struct objfile *); - - extern void init_psymbol_list (struct objfile *, int); extern void sort_pst_symbols (struct partial_symtab *); @@ -189,11 +214,20 @@ extern void new_symfile_objfile (struct objfile *, int, int); extern struct objfile *symbol_file_add (char *, int, struct section_addr_info *, int, int); +extern struct objfile *symbol_file_add_from_bfd (bfd *, int, + struct section_addr_info *, + int, int); + /* Create a new section_addr_info, with room for NUM_SECTIONS. */ extern struct section_addr_info *alloc_section_addr_info (size_t num_sections); +/* Return a freshly allocated copy of ADDRS. The section names, if + any, are also freshly allocated copies of those in ADDRS. */ +extern struct section_addr_info *(copy_section_addr_info + (struct section_addr_info *addrs)); + /* Build (allocate and populate) a section_addr_info struct from an existing section table. */ @@ -305,17 +339,22 @@ extern void symbol_file_add_main (char *args, int from_tty); /* Clear GDB symbol tables. */ extern void symbol_file_clear (int from_tty); +/* Default overlay update function. */ +extern void simple_overlay_update (struct obj_section *); + extern bfd_byte *symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte * buf); -/* From dwarfread.c */ - -extern void dwarf_build_psymtabs (struct objfile *, int, file_ptr, - unsigned int, file_ptr, unsigned int); +extern int symfile_map_offsets_to_segments (bfd *, + struct symfile_segment_data *, + struct section_offsets *, + int, const CORE_ADDR *); +struct symfile_segment_data *get_symfile_segment_data (bfd *abfd); +void free_symfile_segment_data (struct symfile_segment_data *data); /* From dwarf2read.c */ -extern int dwarf2_has_info (bfd *abfd); +extern int dwarf2_has_info (struct objfile *); extern void dwarf2_build_psymtabs (struct objfile *, int); extern void dwarf2_build_frame_info (struct objfile *);