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