Target FP: Merge doublest.c and dfp.c into target-float.c
[deliverable/binutils-gdb.git] / gdb / buildsym.h
CommitLineData
c906108c 1/* Build symbol tables in GDB's internal format.
61baf725 2 Copyright (C) 1986-2017 Free Software Foundation, Inc.
c906108c 3
c5aa993b
JM
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5aa993b
JM
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
18
19#if !defined (BUILDSYM_H)
20#define BUILDSYM_H 1
21
da3331ec
AC
22struct objfile;
23struct symbol;
801e3a5b 24struct addrmap;
43f3e411 25struct compunit_symtab;
da3331ec 26
c906108c
SS
27/* This module provides definitions used for creating and adding to
28 the symbol table. These routines are called from various symbol-
29 file-reading routines.
30
31 They originated in dbxread.c of gdb-4.2, and were split out to
32 make xcoffread.c more maintainable by sharing code.
33
34 Variables declared in this file can be defined by #define-ing the
35 name EXTERN to null. It is used to declare variables that are
36 normally extern, but which get defined in a single module using
37 this technique. */
38
fe898f56 39struct block;
93eed41f 40struct pending_block;
fe898f56 41
63e43d3a
PMR
42struct dynamic_prop;
43
c906108c
SS
44#ifndef EXTERN
45#define EXTERN extern
46#endif
47
48#define HASHSIZE 127 /* Size of things hashed via
0e2de366 49 hashname(). */
c906108c 50
c906108c 51/* Core address of start of text of current source file. This too
92b5c263
DE
52 comes from the N_SO symbol. For Dwarf it typically comes from the
53 DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */
c906108c
SS
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
43f3e411
DE
62{
63 struct subfile *next;
64 /* Space for this is malloc'd. */
65 char *name;
66 /* Space for this is malloc'd. */
67 struct linetable *line_vector;
68 int line_vector_length;
69 /* The "containing" compunit. */
70 struct buildsym_compunit *buildsym_compunit;
71 enum language language;
72 struct symtab *symtab;
73};
c906108c 74
c906108c
SS
75EXTERN struct subfile *current_subfile;
76
77/* Global variable which, when set, indicates that we are processing a
78 .o file compiled with gcc */
79
80EXTERN unsigned char processing_gcc_compilation;
81
82/* When set, we are processing a .o file compiled by sun acc. This is
83 misnamed; it refers to all stabs-in-elf implementations which use
84 N_UNDF the way Sun does, including Solaris gcc. Hopefully all
85 stabs-in-elf implementations ever invented will choose to be
86 compatible. */
87
88EXTERN unsigned char processing_acc_compilation;
89
c906108c
SS
90/* Count symbols as they are processed, for error messages. */
91
92EXTERN unsigned int symnum;
93
94/* Record the symbols defined for each context in a list. We don't
95 create a struct block for the context until we know how long to
96 make it. */
97
98#define PENDINGSIZE 100
99
100struct pending
101 {
102 struct pending *next;
103 int nsyms;
104 struct symbol *symbol[PENDINGSIZE];
105 };
106
107/* Here are the three lists that symbols are put on. */
108
109/* static at top level, and types */
110
111EXTERN struct pending *file_symbols;
112
113/* global functions and variables */
114
115EXTERN struct pending *global_symbols;
116
117/* everything local to lexical context */
118
119EXTERN struct pending *local_symbols;
120
27aa8d6a
SW
121/* "using" directives local to lexical context. */
122
22cee43f
PMR
123EXTERN struct using_direct *local_using_directives;
124
125/* global "using" directives. */
126
127EXTERN struct using_direct *global_using_directives;
27aa8d6a 128
c906108c
SS
129/* Stack representing unclosed lexical contexts (that will become
130 blocks, eventually). */
131
132struct context_stack
133 {
134 /* Outer locals at the time we entered */
135
136 struct pending *locals;
137
27aa8d6a
SW
138 /* Pending using directives at the time we entered. */
139
22cee43f 140 struct using_direct *local_using_directives;
27aa8d6a 141
c906108c
SS
142 /* Pointer into blocklist as of entry */
143
144 struct pending_block *old_blocks;
145
146 /* Name of function, if any, defining context */
147
148 struct symbol *name;
149
63e43d3a
PMR
150 /* Expression that computes the frame base of the lexically enclosing
151 function, if any. NULL otherwise. */
152
153 struct dynamic_prop *static_link;
154
c906108c
SS
155 /* PC where this context starts */
156
157 CORE_ADDR start_addr;
158
0e2de366 159 /* Temp slot for exception handling. */
c906108c
SS
160
161 CORE_ADDR end_addr;
162
163 /* For error-checking matching push/pop */
164
165 int depth;
166
167 };
168
169EXTERN struct context_stack *context_stack;
170
171/* Index of first unused entry in context stack. */
172
173EXTERN int context_stack_depth;
174
175/* Currently allocated size of context stack. */
176
177EXTERN int context_stack_size;
178
921e78cf
JB
179/* Non-zero if the context stack is empty. */
180#define outermost_context_p() (context_stack_depth == 0)
181
c906108c
SS
182/* Nonzero if within a function (so symbols should be local, if
183 nothing says specifically). */
184
185EXTERN int within_function;
186
252a6764
DE
187/* The type of the record_line function. */
188typedef void (record_line_ftype) (struct subfile *subfile, int line,
189 CORE_ADDR pc);
190
c906108c
SS
191\f
192
c906108c
SS
193#define next_symbol_text(objfile) (*next_symbol_text_func)(objfile)
194
0e2de366 195/* Function to invoke get the next symbol. Return the symbol name. */
c906108c 196
a121b7c1 197EXTERN const char *(*next_symbol_text_func) (struct objfile *);
c906108c 198
c906108c
SS
199extern void add_symbol_to_list (struct symbol *symbol,
200 struct pending **listhead);
201
202extern struct symbol *find_symbol_in_list (struct pending *list,
203 char *name, int length);
204
801e3a5b 205extern struct block *finish_block (struct symbol *symbol,
63e43d3a
PMR
206 struct pending **listhead,
207 struct pending_block *old_blocks,
208 const struct dynamic_prop *static_link,
209 CORE_ADDR start,
210 CORE_ADDR end);
801e3a5b
JB
211
212extern void record_block_range (struct block *,
213 CORE_ADDR start, CORE_ADDR end_inclusive);
c906108c 214
33c7c59d
TT
215class scoped_free_pendings
216{
217public:
218
219 scoped_free_pendings () = default;
220 ~scoped_free_pendings ();
221
222 DISABLE_COPY_AND_ASSIGN (scoped_free_pendings);
223};
c906108c 224
4d663531 225extern void start_subfile (const char *name);
c906108c 226
a121b7c1 227extern void patch_subfile_names (struct subfile *subfile, const char *name);
c906108c
SS
228
229extern void push_subfile (void);
230
231extern char *pop_subfile (void);
232
4359dff1 233extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
36586728
TT
234 int expandable,
235 int required);
4359dff1 236
43f3e411
DE
237extern struct compunit_symtab *
238 end_symtab_from_static_block (struct block *static_block,
239 int section, int expandable);
4359dff1 240
43f3e411 241extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
c906108c 242
43f3e411
DE
243extern struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr,
244 int section);
6d30eef8 245
0ab9ce85 246extern void augment_type_symtab (void);
6d30eef8 247
c906108c
SS
248/* Defined in stabsread.c. */
249
250extern void scan_file_globals (struct objfile *objfile);
251
252extern void buildsym_new_init (void);
253
254extern void buildsym_init (void);
255
256extern struct context_stack *push_context (int desc, CORE_ADDR valu);
257
0c5e171a
KD
258extern struct context_stack *pop_context (void);
259
252a6764 260extern record_line_ftype record_line;
c906108c 261
43f3e411
DE
262extern struct compunit_symtab *start_symtab (struct objfile *objfile,
263 const char *name,
264 const char *comp_dir,
265 CORE_ADDR start_addr);
c906108c 266
0ab9ce85
DE
267extern void restart_symtab (struct compunit_symtab *cust,
268 const char *name, CORE_ADDR start_addr);
6d30eef8 269
0d5cff50 270extern int hashname (const char *name);
c906108c
SS
271
272extern void free_pending_blocks (void);
273
554d387d
TT
274/* Record the name of the debug format in the current pending symbol
275 table. FORMAT must be a string with a lifetime at least as long as
276 the symtab's objfile. */
277
278extern void record_debugformat (const char *format);
279
280/* Record the name of the debuginfo producer (usually the compiler) in
281 the current pending symbol table. PRODUCER must be a string with a
282 lifetime at least as long as the symtab's objfile. */
c906108c 283
303b6f5d
DJ
284extern void record_producer (const char *producer);
285
c906108c
SS
286extern void merge_symbol_lists (struct pending **srclist,
287 struct pending **targetlist);
288
46212e0b
TT
289/* Set the name of the last source file. NAME is copied by this
290 function. */
291
292extern void set_last_source_file (const char *name);
293
294/* Fetch the name of the last source file. */
295
296extern const char *get_last_source_file (void);
297
43f3e411
DE
298/* Return the compunit symtab object.
299 It is only valid to call this between calls to start_symtab and the
300 end_symtab* functions. */
301
302extern struct compunit_symtab *buildsym_compunit_symtab (void);
303
304/* Return the macro table.
305 Initialize it if this is the first use.
306 It is only valid to call this between calls to start_symtab and the
307 end_symtab* functions. */
fc474241 308
43f3e411 309extern struct macro_table *get_macro_table (void);
99d9066e 310
c906108c
SS
311#undef EXTERN
312
313#endif /* defined (BUILDSYM_H) */
This page took 1.039132 seconds and 4 git commands to generate.