diff options
author | Daniel Jacobowitz <drow@false.org> | 2007-06-18 15:46:38 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2007-06-18 15:46:38 +0000 |
commit | 31d99776c73d6fca13163da59c852b0fa99f89b8 (patch) | |
tree | 4dace09d40a34a22c8a02adcc688ae8c991973bb /gdb/symfile.h | |
parent | d856f2ddfa3d037987610ecc0edbf75f31296971 (diff) | |
download | gdb-31d99776c73d6fca13163da59c852b0fa99f89b8.zip gdb-31d99776c73d6fca13163da59c852b0fa99f89b8.tar.gz gdb-31d99776c73d6fca13163da59c852b0fa99f89b8.tar.bz2 |
* coffread.c (coff_sym_fns): Add default_symfile_segments.
* dbxread.c (start_psymtab): Check HAVE_ELF.
(aout_sym_fns): Likewise.
* elfread.c (elf_symfile_segments): New.
(elf_sym_fns): Add elf_symfile_segments.
* mipsread.c (ecoff_sym_fns): Add default_symfile_segments.
* remote.c (get_offsets): Use symfile_map_offsets_to_segments.
Skip if there is no symfile_objfile. Handle TextSeg and DataSeg.
* somread.c (som_sym_fns): Use default_symfile_segments.
* symfile.c (find_sym_fns): Take a BFD and return the sym_fns.
(init_objfile_sect_indices): Call symfile_find_segment_sections.
(default_symfile_segments): New function.
(syms_from_objfile): Update call to find_sym_fns.
(symfile_get_segment_data, free_symfile_segment_data): New.
(symfile_map_offsets_to_segments): New.
(symfile_find_segment_sections): New.
* symfile.h (struct symfile_segment_data): New.
(struct sym_fns): Add sym_segments.
(default_symfile_segments, symfile_get_segment_data)
(free_symfile_segment_data): New prototypes.
(symfile_map_offsets_to_segments): Likewise.
* xcoffread.c (xcoff_sym_fns): Add default_symfile_segments.
* Makefile.in (COMMON_OBS): Remove elfread.o.
(elf_internal_h): New.
(elfread.o): Update.
* configure.ac: Add elfread.o to COMMON_OBS if bfd/elf.o was
compiled.
* config.in, configure: Regenerated.
* NEWS: Mention qOffsets changes.
* gdb.texinfo (General Query Packets): Document qOffsets changes.
* Makefile.def: Add dependency from configure-gdb to all-bfd.
* Makefile.in: Regenerated.
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r-- | gdb/symfile.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h index b24acc1..4d08c71 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -85,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. */ @@ -131,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 @@ -146,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 *); @@ -313,6 +345,13 @@ extern void simple_overlay_update (struct obj_section *); extern bfd_byte *symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte * buf); +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 (struct objfile *); |