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