GDB (API)
|
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