GDB (API)
/home/stan/gdb/src/gdb/stabsread.h
Go to the documentation of this file.
00001 /* Include file for stabs debugging format support functions.
00002    Copyright (C) 1986-2013 Free Software Foundation, Inc.
00003 
00004    This file is part of GDB.
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 3 of the License, or
00009    (at your option) any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License
00017    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00018 
00019 struct objfile;
00020 
00021 /* Definitions, prototypes, etc for stabs debugging format support
00022    functions.
00023 
00024    Variables declared in this file can be defined by #define-ing
00025    the name EXTERN to null.  It is used to declare variables that
00026    are normally extern, but which get defined in a single module
00027    using this technique.  */
00028 
00029 #ifndef EXTERN
00030 #define EXTERN extern
00031 #endif
00032 
00033 /* Hash table of global symbols whose values are not known yet.
00034    They are chained thru the SYMBOL_VALUE_CHAIN, since we don't
00035    have the correct data for that slot yet.
00036 
00037    The use of the LOC_BLOCK code in this chain is nonstandard--
00038    it refers to a FORTRAN common block rather than the usual meaning, and
00039    the such LOC_BLOCK symbols use their fields in nonstandard ways.  */
00040 
00041 EXTERN struct symbol *global_sym_chain[HASHSIZE];
00042 
00043 extern void common_block_start (char *, struct objfile *);
00044 extern void common_block_end (struct objfile *);
00045 
00046 /* Kludge for xcoffread.c */
00047 
00048 struct pending_stabs
00049   {
00050     int count;
00051     int length;
00052     char *stab[1];
00053   };
00054 
00055 EXTERN struct pending_stabs *global_stabs;
00056 
00057 /* The type code that process_one_symbol saw on its previous invocation.
00058    Used to detect pairs of N_SO symbols.  */
00059 
00060 EXTERN int previous_stab_code;
00061 
00062 /* Support for Sun changes to dbx symbol format.  */
00063 
00064 /* For each identified header file, we have a table of types defined
00065    in that header file.
00066 
00067    header_files maps header file names to their type tables.
00068    It is a vector of n_header_files elements.
00069    Each element describes one header file.
00070    It contains a vector of types.
00071 
00072    Sometimes it can happen that the same header file produces
00073    different results when included in different places.
00074    This can result from conditionals or from different
00075    things done before including the file.
00076    When this happens, there are multiple entries for the file in this table,
00077    one entry for each distinct set of results.
00078    The entries are distinguished by the INSTANCE field.
00079    The INSTANCE field appears in the N_BINCL and N_EXCL symbol table and is
00080    used to match header-file references to their corresponding data.  */
00081 
00082 struct header_file
00083   {
00084 
00085     /* Name of header file */
00086 
00087     char *name;
00088 
00089     /* Numeric code distinguishing instances of one header file that
00090        produced different results when included.  It comes from the
00091        N_BINCL or N_EXCL.  */
00092 
00093     int instance;
00094 
00095     /* Pointer to vector of types */
00096 
00097     struct type **vector;
00098 
00099     /* Allocated length (# elts) of that vector */
00100 
00101     int length;
00102 
00103   };
00104 
00105 /* The table of header_files of this OBJFILE.  */
00106 #define HEADER_FILES(OBJFILE) (DBX_SYMFILE_INFO (OBJFILE)->header_files)
00107 
00108 /* The actual length of HEADER_FILES.  */
00109 #define N_HEADER_FILES(OBJFILE) (DBX_SYMFILE_INFO (OBJFILE)->n_header_files)
00110 
00111 /* The allocated lengh of HEADER_FILES.  */
00112 #define N_ALLOCATED_HEADER_FILES(OBJFILE) \
00113   (DBX_SYMFILE_INFO (OBJFILE)->n_allocated_header_files)
00114 
00115 /* Within each object file, various header files are assigned numbers.
00116    A type is defined or referred to with a pair of numbers
00117    (FILENUM,TYPENUM) where FILENUM is the number of the header file
00118    and TYPENUM is the number within that header file.
00119    TYPENUM is the index within the vector of types for that header file.
00120 
00121    FILENUM == 0 is special; it refers to the main source of the object file,
00122    and not to any header file.  FILENUM != 1 is interpreted by looking it up
00123    in the following table, which contains indices in header_files.  */
00124 
00125 EXTERN int *this_object_header_files;
00126 
00127 EXTERN int n_this_object_header_files;
00128 
00129 EXTERN int n_allocated_this_object_header_files;
00130 
00131 extern void cleanup_undefined_stabs_types (struct objfile *);
00132 
00133 extern long read_number (char **, int);
00134 
00135 extern struct symbol *define_symbol (CORE_ADDR, char *, int, int,
00136                                      struct objfile *);
00137 
00138 extern void stabsread_init (void);
00139 
00140 extern void stabsread_new_init (void);
00141 
00142 extern void start_stabs (void);
00143 
00144 extern void end_stabs (void);
00145 
00146 extern void finish_global_stabs (struct objfile *objfile);
00147 
00148 /* COFF files can have multiple .stab sections, if they are linked
00149    using --split-by-reloc.  This linked list is used to pass the
00150    information into the functions in dbxread.c.  */
00151 struct stab_section_list
00152   {
00153     /* Next in list.  */
00154     struct stab_section_list *next;
00155 
00156     /* Stab section.  */
00157     asection *section;
00158   };
00159 
00160 /* Functions exported by dbxread.c.  These are not in stabsread.c because
00161    they are only used by some stabs readers.  */
00162 
00163 extern struct partial_symtab *end_psymtab (struct objfile *objfile,
00164                                            struct partial_symtab *pst,
00165                                            const char **include_list,
00166                                            int num_includes,
00167                                            int capping_symbol_offset,
00168                                            CORE_ADDR capping_text,
00169                                            struct partial_symtab
00170                                            **dependency_list,
00171                                            int number_dependencies,
00172                                            int textlow_not_set);
00173 
00174 extern void process_one_symbol (int, int, CORE_ADDR, char *,
00175                                 const struct section_offsets *,
00176                                 struct objfile *);
00177 
00178 extern void elfstab_build_psymtabs (struct objfile *objfile,
00179                                     asection *stabsect,
00180                                     file_ptr stabstroffset,
00181                                     unsigned int stabstrsize);
00182 
00183 extern void coffstab_build_psymtabs
00184   (struct objfile *objfile,
00185    CORE_ADDR textaddr, unsigned int textsize,
00186    struct stab_section_list *stabs,
00187    file_ptr stabstroffset, unsigned int stabstrsize);
00188 
00189 extern void stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
00190                                      char *stabstr_name, char *text_name);
00191 
00192 extern void elfstab_offset_sections (struct objfile *,
00193                                      struct partial_symtab *);
00194 extern int symbol_reference_defined (char **);
00195 
00196 extern void ref_add (int, struct symbol *, char *, CORE_ADDR);
00197 
00198 extern struct symbol *ref_search (int);
00199 
00200 extern void free_header_files (void);
00201 
00202 extern void init_header_files (void);
00203 
00204 #undef EXTERN
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines