*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / objfiles.h
index e512e54723398086ba2e6f279e1c6ec421bfcd2b..7e39b07c5d3fb690cbda6d5d877f851efe95d78f 100644 (file)
@@ -1,13 +1,13 @@
 /* Definitions for symbol file management in GDB.
 
-   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-   2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+   2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    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,
@@ -16,9 +16,7 @@
    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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #if !defined (OBJFILES_H)
 #define OBJFILES_H
@@ -44,9 +42,8 @@ struct objfile_data;
    to the user executable's recorded entry point, as if the call had been made
    directly by the kernel.
 
-   The traditional gdb method of using this info is to use the
-   recorded entry point to set the variables
-   deprecated_entry_file_lowpc and deprecated_entry_file_highpc from
+   The traditional gdb method of using this info was to use the
+   recorded entry point to set the entry-file's lowpc and highpc from
    the debugging information, where these values are the starting
    address (inclusive) and ending address (exclusive) of the
    instruction space in the executable which correspond to the
@@ -57,7 +54,7 @@ struct objfile_data;
 
    NOTE: cagney/2003-09-09: It turns out that this "traditional"
    method doesn't work.  Corinna writes: ``It turns out that the call
-   to deprecated_inside_entry_file destroys a meaningful backtrace
+   to test for "inside entry file" destroys a meaningful backtrace
    under some conditions.  E. g. the backtrace tests in the asm-source
    testcase are broken for some targets.  In this test the functions
    are all implemented as part of one file and the testcase is not
@@ -111,32 +108,6 @@ struct entry_info
 
 #define INVALID_ENTRY_POINT (~0)       /* ~0 will not be in any file, we hope.  */
 
-    /* Start (inclusive) and end (exclusive) of function containing the
-       entry point. */
-
-    CORE_ADDR entry_func_lowpc;
-    CORE_ADDR entry_func_highpc;
-
-    /* Start (inclusive) and end (exclusive) of object file containing the
-       entry point. */
-
-    CORE_ADDR deprecated_entry_file_lowpc;
-    CORE_ADDR deprecated_entry_file_highpc;
-
-    /* Start (inclusive) and end (exclusive) of the user code main() function. */
-
-    CORE_ADDR main_func_lowpc;
-    CORE_ADDR main_func_highpc;
-
-/* Use these values when any of the above ranges is invalid.  */
-
-/* We use these values because it guarantees that there is no number that is
-   both >= LOWPC && < HIGHPC.  It is also highly unlikely that 3 is a valid
-   module or function start address (as opposed to 0).  */
-
-#define INVALID_ENTRY_LOWPC (3)
-#define INVALID_ENTRY_HIGHPC (1)
-
   };
 
 /* Sections in an objfile.
@@ -176,24 +147,6 @@ struct obj_section
     int ovly_mapped;
   };
 
-/* An import entry contains information about a symbol that
-   is used in this objfile but not defined in it, and so needs
-   to be imported from some other objfile */
-/* Currently we just store the name; no attributes. 1997-08-05 */
-typedef char *ImportEntry;
-
-
-/* An export entry contains information about a symbol that
-   is defined in this objfile and available for use in other
-   objfiles */
-typedef struct
-  {
-    char *name;                        /* name of exported symbol */
-    int address;               /* offset subject to relocation */
-    /* Currently no other attributes 1997-08-05 */
-  }
-ExportEntry;
-
 
 /* The "objstats" structure provides a place for gdb to record some
    interesting information about its internal state at runtime, on a
@@ -267,6 +220,13 @@ struct objfile
 
     struct partial_symtab *psymtabs;
 
+    /* Map addresses to the entries of PSYMTABS.  It would be more efficient to
+       have a map per the whole process but ADDRMAP cannot selectively remove
+       its items during FREE_OBJFILE.  This mapping is already present even for
+       PARTIAL_SYMTABs which still have no corresponding full SYMTABs read.  */
+
+    struct addrmap *psymtabs_addrmap;
+
     /* List of freed partial symtabs, available for re-use */
 
     struct partial_symtab *free_psymtabs;
@@ -276,6 +236,13 @@ struct objfile
 
     bfd *obfd;
 
+    /* The gdbarch associated with the BFD.  Note that this gdbarch is
+       determined solely from BFD information, without looking at target
+       information.  The gdbarch determined from a running target may
+       differ from this e.g. with respect to register types and names.  */
+
+    struct gdbarch *gdbarch;
+
     /* The modification timestamp of the object file, as of the last time
        we read its symbols.  */
 
@@ -284,18 +251,8 @@ struct objfile
     /* Obstack to hold objects that should be freed when we load a new symbol
        table from this object file. */
 
-    /* Note ezannoni 2004-02-05: this obstack will become the only
-       obstack per objfile instead of having 3 separate ones with the
-       same lifetime.  I am in the process of gradually migrating the
-       old obstacks to this one, so that it can be used more
-       freely. */
-
     struct obstack objfile_obstack; 
 
-    /* Obstacks to hold objects that should be freed when we load a new symbol
-       table from this object file. */
-    struct obstack symbol_obstack;     /* Full symbols */
-
     /* A byte cache where we can stash arbitrary "chunks" of bytes that
        will not change. */
 
@@ -322,7 +279,7 @@ struct objfile
        when passed a pointer to somewhere in the middle of it.  There is also
        a count of the number of symbols, which does not include the terminating
        null symbol.  The array itself, as well as all the data that it points
-       to, should be allocated on the symbol_obstack for this file. */
+       to, should be allocated on the objfile_obstack for this file. */
 
     struct minimal_symbol *msymbols;
     int minimal_symbol_count;
@@ -336,18 +293,6 @@ struct objfile
 
     struct minimal_symbol *msymbol_demangled_hash[MINIMAL_SYMBOL_HASH_SIZE];
 
-    /* For object file formats which don't specify fundamental types, gdb
-       can create such types.  For now, it maintains a vector of pointers
-       to these internally created fundamental types on a per objfile basis,
-       however it really should ultimately keep them on a per-compilation-unit
-       basis, to account for linkage-units that consist of a number of
-       compilation units that may have different fundamental types, such as
-       linking C modules with ADA modules, or linking C modules that are
-       compiled with 32-bit ints with C modules that are compiled with 64-bit
-       ints (not inherently evil with a smarter linker). */
-
-    struct type **fundamental_types;
-
     /* The mmalloc() malloc-descriptor for this objfile if we are using
        the memory mapped malloc() package to manage storage for this objfile's
        data.  NULL if we are not. */
@@ -375,26 +320,35 @@ struct objfile
 
     /* Information about stabs.  Will be filled in with a dbx_symfile_info
        struct by those readers that need it. */
+    /* NOTE: cagney/2004-10-23: This has been replaced by per-objfile
+       data points implemented using "data" and "num_data" below.  For
+       an example of how to use this replacement, see "objfile_data"
+       in "mips-tdep.c".  */
 
-    struct dbx_symfile_info *sym_stab_info;
+    struct dbx_symfile_info *deprecated_sym_stab_info;
 
     /* Hook for information for use by the symbol reader (currently used
        for information shared by sym_init and sym_read).  It is
        typically a pointer to malloc'd memory.  The symbol reader's finish
        function is responsible for freeing the memory thusly allocated.  */
+    /* NOTE: cagney/2004-10-23: This has been replaced by per-objfile
+       data points implemented using "data" and "num_data" below.  For
+       an example of how to use this replacement, see "objfile_data"
+       in "mips-tdep.c".  */
 
-    void *sym_private;
+    void *deprecated_sym_private;
 
     /* Hook for target-architecture-specific information.  This must
        point to memory allocated on one of the obstacks in this objfile,
        so that it gets freed automatically when reading a new object
        file. */
 
-    void *obj_private;
+    void *deprecated_obj_private;
 
     /* Per objfile data-pointers required by other GDB modules.  */
     /* FIXME: kettenis/20030711: This mechanism could replace
-       sym_stab_info, sym_private and obj_private entirely.  */
+       deprecated_sym_stab_info, deprecated_sym_private and
+       deprecated_obj_private entirely.  */
 
     void **data;
     unsigned num_data;
@@ -434,17 +388,6 @@ struct objfile
     struct obj_section
      *sections, *sections_end;
 
-    /* two auxiliary fields, used to hold the fp of separate symbol files */
-    FILE *auxf1, *auxf2;
-
-    /* Imported symbols */
-    ImportEntry *import_list;
-    int import_list_size;
-
-    /* Exported symbols */
-    ExportEntry *export_list;
-    int export_list_size;
-
     /* Link to objfile that contains the debug symbols for this one.
        One is loaded if this file has an debug link to an existing
        debug file with the right checksum */
@@ -541,6 +484,12 @@ extern struct objfile *object_files;
 
 extern struct objfile *allocate_objfile (bfd *, int);
 
+extern struct gdbarch *get_objfile_arch (struct objfile *);
+
+extern void init_entry_point_info (struct objfile *);
+
+extern CORE_ADDR entry_point_address (void);
+
 extern int build_objfile_section_table (struct objfile *);
 
 extern void terminate_minimal_symbol_table (struct objfile *objfile);
@@ -581,12 +530,12 @@ extern struct obj_section *find_pc_sect_section (CORE_ADDR pc,
 
 extern int in_plt_section (CORE_ADDR, char *);
 
-extern int is_in_import_list (char *, struct objfile *);
-
 /* Keep a registry of per-objfile data-pointers required by other GDB
    modules.  */
 
 extern const struct objfile_data *register_objfile_data (void);
+extern const struct objfile_data *register_objfile_data_with_cleanup
+  (void (*cleanup) (struct objfile *, void *));
 extern void clear_objfile_data (struct objfile *objfile);
 extern void set_objfile_data (struct objfile *objfile,
                              const struct objfile_data *data, void *value);
@@ -626,6 +575,14 @@ extern void *objfile_data (struct objfile *objfile,
   ALL_OBJFILES (objfile)        \
     ALL_OBJFILE_SYMTABS (objfile, s)
 
+/* Traverse all symtabs in all objfiles, skipping included files
+   (which share a blockvector with their primary symtab).  */
+
+#define ALL_PRIMARY_SYMTABS(objfile, s) \
+  ALL_OBJFILES (objfile)               \
+    ALL_OBJFILE_SYMTABS (objfile, s)   \
+      if ((s)->primary)
+
 /* Traverse all psymtabs in all objfiles.  */
 
 #define        ALL_PSYMTABS(objfile, p) \
@@ -647,17 +604,17 @@ extern void *objfile_data (struct objfile *objfile,
 
 #define SECT_OFF_DATA(objfile) \
      ((objfile->sect_index_data == -1) \
-      ? (internal_error (__FILE__, __LINE__, "sect_index_data not initialized"), -1) \
+      ? (internal_error (__FILE__, __LINE__, _("sect_index_data not initialized")), -1) \
       : objfile->sect_index_data)
 
 #define SECT_OFF_RODATA(objfile) \
      ((objfile->sect_index_rodata == -1) \
-      ? (internal_error (__FILE__, __LINE__, "sect_index_rodata not initialized"), -1) \
+      ? (internal_error (__FILE__, __LINE__, _("sect_index_rodata not initialized")), -1) \
       : objfile->sect_index_rodata)
 
 #define SECT_OFF_TEXT(objfile) \
      ((objfile->sect_index_text == -1) \
-      ? (internal_error (__FILE__, __LINE__, "sect_index_text not initialized"), -1) \
+      ? (internal_error (__FILE__, __LINE__, _("sect_index_text not initialized")), -1) \
       : objfile->sect_index_text)
 
 /* Sometimes the .bss section is missing from the objfile, so we don't
This page took 0.047512 seconds and 4 git commands to generate.