summaryrefslogtreecommitdiff
path: root/gdb/symfile.h
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2007-06-18 15:46:38 +0000
committerDaniel Jacobowitz <dan@debian.org>2007-06-18 15:46:38 +0000
commitef54cb9f461d8752f427b5be763bfa4f1ffaf5d8 (patch)
tree83616f916c6d107d60c44db42533d4cf5a0d2428 /gdb/symfile.h
parentfa3c30d025801dfac6106da3e268b1c11ab2e486 (diff)
downloadgdb-ef54cb9f461d8752f427b5be763bfa4f1ffaf5d8.tar.gz
* 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.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h
index b24acc1c931..4d08c71ecc7 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 *);