2007-09-04 Michael Snyder <msnyder@access-company.com>
[deliverable/binutils-gdb.git] / gdb / symfile.h
index befc0b48ad8795aee7c064b5e4a72c3462b5b46a..49c12337b388a3f12fb282aaaca1ae0230f98806 100644 (file)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #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 +83,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 +151,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 +172,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 +191,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 *);
@@ -314,13 +337,18 @@ 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 */
 
This page took 0.025585 seconds and 4 git commands to generate.