* coffread.c (coff_sym_fns): Add default_symfile_segments.
[deliverable/binutils-gdb.git] / gdb / symfile.h
index baa353e494c30906ee8d78521cbeaaa052d8f672..4d08c71ecc741e6bb2729de77c07caa256bd782e 100644 (file)
@@ -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.
 
 
    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 *);
This page took 0.027002 seconds and 4 git commands to generate.