* target-descriptions.h (struct type): Do not declare.
[deliverable/binutils-gdb.git] / gdb / buildsym.h
CommitLineData
c906108c 1/* Build symbol tables in GDB's internal format.
197e01b6 2 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1996,
0fb0cc75 3 1997, 1998, 1999, 2000, 2002, 2003, 2007, 2008, 2009
9b254dd1 4 Free Software Foundation, Inc.
c906108c 5
c5aa993b
JM
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
20
21#if !defined (BUILDSYM_H)
22#define BUILDSYM_H 1
23
da3331ec
AC
24struct objfile;
25struct symbol;
801e3a5b 26struct addrmap;
da3331ec 27
c906108c
SS
28/* This module provides definitions used for creating and adding to
29 the symbol table. These routines are called from various symbol-
30 file-reading routines.
31
32 They originated in dbxread.c of gdb-4.2, and were split out to
33 make xcoffread.c more maintainable by sharing code.
34
35 Variables declared in this file can be defined by #define-ing the
36 name EXTERN to null. It is used to declare variables that are
37 normally extern, but which get defined in a single module using
38 this technique. */
39
fe898f56
DC
40struct block;
41
c906108c
SS
42#ifndef EXTERN
43#define EXTERN extern
44#endif
45
46#define HASHSIZE 127 /* Size of things hashed via
47 hashname() */
48
49/* Name of source file whose symbol data we are now processing. This
92b5c263
DE
50 comes from a symbol of type N_SO for stabs. For Dwarf it comes from the
51 DW_AT_name attribute of a DW_TAG_compile_unit DIE. */
c906108c
SS
52
53EXTERN char *last_source_file;
54
55/* Core address of start of text of current source file. This too
92b5c263
DE
56 comes from the N_SO symbol. For Dwarf it typically comes from the
57 DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */
c906108c
SS
58
59EXTERN CORE_ADDR last_source_start_addr;
60
61/* The list of sub-source-files within the current individual
62 compilation. Each file gets its own symtab with its own linetable
63 and associated info, but they all share one blockvector. */
64
65struct subfile
66 {
67 struct subfile *next;
68 char *name;
69 char *dirname;
70 struct linetable *line_vector;
71 int line_vector_length;
72 enum language language;
303b6f5d 73 char *producer;
c906108c 74 char *debugformat;
cb1df416 75 struct symtab *symtab;
c906108c
SS
76 };
77
c906108c
SS
78EXTERN struct subfile *current_subfile;
79
80/* Global variable which, when set, indicates that we are processing a
81 .o file compiled with gcc */
82
83EXTERN unsigned char processing_gcc_compilation;
84
85/* When set, we are processing a .o file compiled by sun acc. This is
86 misnamed; it refers to all stabs-in-elf implementations which use
87 N_UNDF the way Sun does, including Solaris gcc. Hopefully all
88 stabs-in-elf implementations ever invented will choose to be
89 compatible. */
90
91EXTERN unsigned char processing_acc_compilation;
92
c906108c
SS
93/* Count symbols as they are processed, for error messages. */
94
95EXTERN unsigned int symnum;
96
97/* Record the symbols defined for each context in a list. We don't
98 create a struct block for the context until we know how long to
99 make it. */
100
101#define PENDINGSIZE 100
102
103struct pending
104 {
105 struct pending *next;
106 int nsyms;
107 struct symbol *symbol[PENDINGSIZE];
108 };
109
110/* Here are the three lists that symbols are put on. */
111
112/* static at top level, and types */
113
114EXTERN struct pending *file_symbols;
115
116/* global functions and variables */
117
118EXTERN struct pending *global_symbols;
119
120/* everything local to lexical context */
121
122EXTERN struct pending *local_symbols;
123
124/* func params local to lexical context */
125
126EXTERN struct pending *param_symbols;
127
128/* Stack representing unclosed lexical contexts (that will become
129 blocks, eventually). */
130
131struct context_stack
132 {
133 /* Outer locals at the time we entered */
134
135 struct pending *locals;
136
137 /* Pending func params at the time we entered */
138
139 struct pending *params;
140
141 /* Pointer into blocklist as of entry */
142
143 struct pending_block *old_blocks;
144
145 /* Name of function, if any, defining context */
146
147 struct symbol *name;
148
149 /* PC where this context starts */
150
151 CORE_ADDR start_addr;
152
153 /* Temp slot for exception handling. */
154
155 CORE_ADDR end_addr;
156
157 /* For error-checking matching push/pop */
158
159 int depth;
160
161 };
162
163EXTERN struct context_stack *context_stack;
164
165/* Index of first unused entry in context stack. */
166
167EXTERN int context_stack_depth;
168
169/* Currently allocated size of context stack. */
170
171EXTERN int context_stack_size;
172
921e78cf
JB
173/* Non-zero if the context stack is empty. */
174#define outermost_context_p() (context_stack_depth == 0)
175
c906108c
SS
176/* Nonzero if within a function (so symbols should be local, if
177 nothing says specifically). */
178
179EXTERN int within_function;
180
181/* List of blocks already made (lexical contexts already closed).
182 This is used at the end to make the blockvector. */
183
184struct pending_block
185 {
186 struct pending_block *next;
187 struct block *block;
188 };
189
190/* Pointer to the head of a linked list of symbol blocks which have
191 already been finalized (lexical contexts already closed) and which
192 are just waiting to be built into a blockvector when finalizing the
193 associated symtab. */
194
195EXTERN struct pending_block *pending_blocks;
196\f
197
198struct subfile_stack
199 {
200 struct subfile_stack *next;
201 char *name;
202 };
203
204EXTERN struct subfile_stack *subfile_stack;
205
206#define next_symbol_text(objfile) (*next_symbol_text_func)(objfile)
207
208/* Function to invoke get the next symbol. Return the symbol name. */
209
210EXTERN char *(*next_symbol_text_func) (struct objfile *);
211
212/* Vector of types defined so far, indexed by their type numbers.
213 Used for both stabs and coff. (In newer sun systems, dbx uses a
214 pair of numbers in parens, as in "(SUBFILENUM,NUMWITHINSUBFILE)".
215 Then these numbers must be translated through the type_translations
216 hash table to get the index into the type vector.) */
217
218EXTERN struct type **type_vector;
219
220/* Number of elements allocated for type_vector currently. */
221
222EXTERN int type_vector_length;
223
224/* Initial size of type vector. Is realloc'd larger if needed, and
225 realloc'd down to the size actually used, when completed. */
226
227#define INITIAL_TYPE_VECTOR_LENGTH 160
228
59527da0
JB
229extern void add_free_pendings (struct pending *list);
230
c906108c
SS
231extern void add_symbol_to_list (struct symbol *symbol,
232 struct pending **listhead);
233
234extern struct symbol *find_symbol_in_list (struct pending *list,
235 char *name, int length);
236
801e3a5b
JB
237extern struct block *finish_block (struct symbol *symbol,
238 struct pending **listhead,
239 struct pending_block *old_blocks,
240 CORE_ADDR start, CORE_ADDR end,
241 struct objfile *objfile);
242
243extern void record_block_range (struct block *,
244 CORE_ADDR start, CORE_ADDR end_inclusive);
c906108c 245
bde58177 246extern void really_free_pendings (void *dummy);
c906108c
SS
247
248extern void start_subfile (char *name, char *dirname);
249
250extern void patch_subfile_names (struct subfile *subfile, char *name);
251
252extern void push_subfile (void);
253
254extern char *pop_subfile (void);
255
256extern struct symtab *end_symtab (CORE_ADDR end_addr,
257 struct objfile *objfile, int section);
258
259/* Defined in stabsread.c. */
260
261extern void scan_file_globals (struct objfile *objfile);
262
263extern void buildsym_new_init (void);
264
265extern void buildsym_init (void);
266
267extern struct context_stack *push_context (int desc, CORE_ADDR valu);
268
0c5e171a
KD
269extern struct context_stack *pop_context (void);
270
c906108c
SS
271extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
272
273extern void start_symtab (char *name, char *dirname, CORE_ADDR start_addr);
274
275extern int hashname (char *name);
276
277extern void free_pending_blocks (void);
278
c906108c
SS
279/* FIXME: Note that this is used only in buildsym.c and dstread.c,
280 which should be fixed to not need direct access to
281 record_pending_block. */
282
283extern void record_pending_block (struct objfile *objfile,
284 struct block *block,
285 struct pending_block *opblock);
286
287extern void record_debugformat (char *format);
288
303b6f5d
DJ
289extern void record_producer (const char *producer);
290
c906108c
SS
291extern void merge_symbol_lists (struct pending **srclist,
292 struct pending **targetlist);
293
99d9066e
JB
294/* The macro table for the compilation unit whose symbols we're
295 currently reading. All the symtabs for this CU will point to this. */
296EXTERN struct macro_table *pending_macros;
297
c906108c
SS
298#undef EXTERN
299
300#endif /* defined (BUILDSYM_H) */
This page took 0.685398 seconds and 4 git commands to generate.