]> Git Repo - binutils.git/blame - gdb/symtab.h
* stabs.texinfo (Parameters): More on "local parameters".
[binutils.git] / gdb / symtab.h
CommitLineData
bd5635a1 1/* Symbol table definitions for GDB.
b0246b3b 2 Copyright (C) 1986, 1989, 1991, 1992 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
4a35d6e9 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
4a35d6e9
FF
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
4a35d6e9 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
4a35d6e9
FF
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1
RP
19
20#if !defined (SYMTAB_H)
21#define SYMTAB_H 1
bd5635a1
RP
22
23/* Some definitions and declarations to go with use of obstacks. */
2e4964ad
FF
24
25#include "obstack.h"
bd5635a1
RP
26#define obstack_chunk_alloc xmalloc
27#define obstack_chunk_free free
bd5635a1 28
2e4964ad
FF
29/* Define a structure for the information that is common to all symbol types,
30 including minimal symbols, partial symbols, and full symbols. */
31
32struct general_symbol_info
33{
34 /* Name of the symbol. This is a required field. Storage for the name is
35 allocated on the psymbol_obstack or symbol_obstack for the associated
36 objfile. */
37
38 char *name;
39
40 /* Constant value, or address if static, or register number,
41 or offset in arguments, or offset in stack frame. All of
42 these are in host byte order (though what they point to might
43 be in target byte order, e.g. LOC_CONST_BYTES).
44
45 Note that the address of a function is SYMBOL_VALUE_ADDRESS (pst)
46 in a partial symbol table, but BLOCK_START (SYMBOL_BLOCK_VALUE (st))
47 in a symbol table. */
48
49 union
50 {
51 /* for LOC_CONST, LOC_REGISTER, LOC_ARG, LOC_REF_ARG, LOC_REGPARM,
52 LOC_LOCAL */
53
54 long value;
55
56 /* for LOC_BLOCK */
57
58 struct block *block;
59
60 /* for LOC_CONST_BYTES */
61
62 char *bytes;
63
64 /* for LOC_STATIC, LOC_LABEL */
65
66 CORE_ADDR address;
67
68 /* for opaque typedef struct chain */
bd5635a1 69
2e4964ad
FF
70 struct symbol *chain;
71 }
72 value;
73
74 /* In a multilanguage environment, some language specific information may
75 need to be recorded along with each symbol. */
76
77 struct language_dependent_info
78 {
79
80 /* Record the language that this information applies to. */
81
82 enum language language;
83
84 /* Since one and only one language can apply, wrap the information inside
85 a union. */
bd5635a1 86
ece2e98a 87 union lang_specific
2e4964ad
FF
88 {
89 /* For C++ */
ece2e98a 90 struct cplus_specific
2e4964ad
FF
91 {
92 char *demangled_name;
93 } cplus_specific;
ece2e98a
JG
94 /* For Chill */
95 struct chill_specific
96 {
97 char *demangled_name;
98 } chill_specific;
2e4964ad
FF
99 } lang_u;
100 } lang_specific;
ca6a826d
PS
101
102 /* Which section is this symbol in? This is an index into
103 section_offsets for this objfile. Negative means that the symbol
104 does not get relocated relative to a section. */
105 /* Disclaimer: currently this is just used for xcoff, so don't expect
106 all symbol-reading code to set it correctly. */
107 int section;
2e4964ad
FF
108};
109
110#define SYMBOL_NAME(symbol) (symbol)->ginfo.name
111#define SYMBOL_VALUE(symbol) (symbol)->ginfo.value.value
112#define SYMBOL_VALUE_ADDRESS(symbol) (symbol)->ginfo.value.address
113#define SYMBOL_VALUE_BYTES(symbol) (symbol)->ginfo.value.bytes
114#define SYMBOL_BLOCK_VALUE(symbol) (symbol)->ginfo.value.block
115#define SYMBOL_VALUE_CHAIN(symbol) (symbol)->ginfo.value.chain
116#define SYMBOL_LANGUAGE(symbol) (symbol)->ginfo.lang_specific.language
ca6a826d 117#define SYMBOL_SECTION(symbol) (symbol)->ginfo.section
ece2e98a
JG
118
119#define SYMBOL_CPLUS_DEMANGLED_NAME(symbol) \
2e4964ad
FF
120 (symbol)->ginfo.lang_specific.lang_u.cplus_specific.demangled_name
121
ece2e98a 122
2e4964ad
FF
123extern int demangle; /* We reference it, so go ahead and declare it. */
124
ece2e98a
JG
125/* Macro that initializes the language dependent portion of a symbol
126 depending upon the language for the symbol. */
127
128#define SYMBOL_INIT_LANGUAGE_SPECIFIC(symbol,language) \
129 do { \
130 SYMBOL_LANGUAGE (symbol) = language; \
131 if (SYMBOL_LANGUAGE (symbol) == language_cplus) \
132 { \
133 SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
134 } \
ece2e98a
JG
135 else if (SYMBOL_LANGUAGE (symbol) == language_chill) \
136 { \
137 SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; \
138 } \
ece2e98a
JG
139 else \
140 { \
141 memset (&(symbol)->ginfo.lang_specific.lang_u, 0, \
142 sizeof ((symbol)->ginfo.lang_specific.lang_u)); \
143 } \
144 } while (0)
145
146/* Macro that attempts to initialize the demangled name for a symbol,
147 based on the language of that symbol. If the language is set to
148 language_auto, it will attempt to find any demangling algorithm
149 that works and then set the language appropriately. If no demangling
150 of any kind is found, the language is set back to language_unknown,
151 so we can avoid doing this work again the next time we encounter
152 the symbol. Any required space to store the name is obtained from the
153 specified obstack. */
154
155#define SYMBOL_INIT_DEMANGLED_NAME(symbol,obstack) \
156 do { \
157 char *demangled = NULL; \
158 if (SYMBOL_LANGUAGE (symbol) == language_cplus \
159 || SYMBOL_LANGUAGE (symbol) == language_auto) \
160 { \
161 demangled = \
162 cplus_demangle (SYMBOL_NAME (symbol), DMGL_PARAMS | DMGL_ANSI);\
163 if (demangled != NULL) \
164 { \
165 SYMBOL_LANGUAGE (symbol) = language_cplus; \
166 SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = \
167 obsavestring (demangled, strlen (demangled), (obstack)); \
168 free (demangled); \
169 } \
170 else \
171 { \
172 SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
173 } \
174 } \
ece2e98a
JG
175 if (demangled == NULL \
176 && (SYMBOL_LANGUAGE (symbol) == language_chill \
177 || SYMBOL_LANGUAGE (symbol) == language_auto)) \
178 { \
179 demangled = \
180 chill_demangle (SYMBOL_NAME (symbol)); \
181 if (demangled != NULL) \
182 { \
183 SYMBOL_LANGUAGE (symbol) = language_chill; \
184 SYMBOL_CHILL_DEMANGLED_NAME (symbol) = \
185 obsavestring (demangled, strlen (demangled), (obstack)); \
186 free (demangled); \
187 } \
188 else \
189 { \
190 SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; \
191 } \
192 } \
ece2e98a
JG
193 if (SYMBOL_LANGUAGE (symbol) == language_auto) \
194 { \
195 SYMBOL_LANGUAGE (symbol) = language_unknown; \
196 } \
197 } while (0)
198
199/* Macro that returns the demangled name for a symbol based on the language
200 for that symbol. If no demangled name exists, returns NULL. */
201
ece2e98a
JG
202#define SYMBOL_DEMANGLED_NAME(symbol) \
203 (SYMBOL_LANGUAGE (symbol) == language_cplus \
204 ? SYMBOL_CPLUS_DEMANGLED_NAME (symbol) \
205 : (SYMBOL_LANGUAGE (symbol) == language_chill \
206 ? SYMBOL_CHILL_DEMANGLED_NAME (symbol) \
207 : NULL))
208
5aefc1ca
FF
209#define SYMBOL_CHILL_DEMANGLED_NAME(symbol) \
210 (symbol)->ginfo.lang_specific.lang_u.chill_specific.demangled_name
ece2e98a 211
2e4964ad
FF
212/* Macro that returns the "natural source name" of a symbol. In C++ this is
213 the "demangled" form of the name if demangle is on and the "mangled" form
214 of the name if demangle is off. In other languages this is just the
ece2e98a 215 symbol name. The result should never be NULL. */
2e4964ad 216
ece2e98a
JG
217#define SYMBOL_SOURCE_NAME(symbol) \
218 (demangle && SYMBOL_DEMANGLED_NAME (symbol) != NULL \
219 ? SYMBOL_DEMANGLED_NAME (symbol) \
220 : SYMBOL_NAME (symbol))
2e4964ad
FF
221
222/* Macro that returns the "natural assembly name" of a symbol. In C++ this is
223 the "mangled" form of the name if demangle is off, or if demangle is on and
224 asm_demangle is off. Otherwise if asm_demangle is on it is the "demangled"
ece2e98a
JG
225 form. In other languages this is just the symbol name. The result should
226 never be NULL. */
2e4964ad 227
ece2e98a
JG
228#define SYMBOL_LINKAGE_NAME(symbol) \
229 (demangle && asm_demangle && SYMBOL_DEMANGLED_NAME (symbol) != NULL \
230 ? SYMBOL_DEMANGLED_NAME (symbol) \
231 : SYMBOL_NAME (symbol))
2e4964ad
FF
232
233/* Macro that tests a symbol for a match against a specified name string.
234 First test the unencoded name, then looks for and test a C++ encoded
235 name if it exists. Note that whitespace is ignored while attempting to
236 match a C++ encoded name, so that "foo::bar(int,long)" is the same as
237 "foo :: bar (int, long)".
238 Evaluates to zero if the match fails, or nonzero if it succeeds. */
239
ece2e98a
JG
240#define SYMBOL_MATCHES_NAME(symbol, name) \
241 (STREQ (SYMBOL_NAME (symbol), (name)) \
242 || (SYMBOL_DEMANGLED_NAME (symbol) != NULL \
243 && strcmp_iw (SYMBOL_DEMANGLED_NAME (symbol), (name)) == 0))
2e4964ad
FF
244
245/* Macro that tests a symbol for an re-match against the last compiled regular
246 expression. First test the unencoded name, then look for and test a C++
247 encoded name if it exists.
248 Evaluates to zero if the match fails, or nonzero if it succeeds. */
249
ece2e98a
JG
250#define SYMBOL_MATCHES_REGEXP(symbol) \
251 (re_exec (SYMBOL_NAME (symbol)) != 0 \
252 || (SYMBOL_DEMANGLED_NAME (symbol) != NULL \
253 && re_exec (SYMBOL_DEMANGLED_NAME (symbol)) != 0))
2e4964ad 254
b0246b3b 255/* Define a simple structure used to hold some very basic information about
2e4964ad
FF
256 all defined global symbols (text, data, bss, abs, etc). The only required
257 information is the general_symbol_info.
258
259 In many cases, even if a file was compiled with no special options for
260 debugging at all, as long as was not stripped it will contain sufficient
261 information to build a useful minimal symbol table using this structure.
262 Even when a file contains enough debugging information to build a full
263 symbol table, these minimal symbols are still useful for quickly mapping
264 between names and addresses, and vice versa. They are also sometimes
265 used to figure out what full symbol table entries need to be read in. */
bd5635a1 266
b0246b3b
FF
267struct minimal_symbol
268{
bd5635a1 269
2e4964ad 270 /* The general symbol info required for all types of symbols. */
bd5635a1 271
2e4964ad 272 struct general_symbol_info ginfo;
bd5635a1 273
b0246b3b
FF
274 /* The info field is available for caching machine-specific information that
275 The AMD 29000 tdep.c uses it to remember things it has decoded from the
276 instructions in the function header, so it doesn't have to rederive the
277 info constantly (over a serial line). It is initialized to zero and
278 stays that way until target-dependent code sets it. Storage for any data
279 pointed to by this field should be allocated on the symbol_obstack for
280 the associated objfile. The type would be "void *" except for reasons
281 of compatibility with older compilers. This field is optional. */
282
283 char *info;
284
285 /* Classification types for this symbol. These should be taken as "advisory
286 only", since if gdb can't easily figure out a classification it simply
287 selects mst_unknown. It may also have to guess when it can't figure out
288 which is a better match between two types (mst_data versus mst_bss) for
289 example. Since the minimal symbol info is sometimes derived from the
290 BFD library's view of a file, we need to live with what information bfd
291 supplies. */
292
293 enum minimal_symbol_type
bd5635a1 294 {
b0246b3b
FF
295 mst_unknown = 0, /* Unknown type, the default */
296 mst_text, /* Generally executable instructions */
297 mst_data, /* Generally initialized data */
298 mst_bss, /* Generally uninitialized data */
299 mst_abs /* Generally absolute (nonrelocatable) */
300 } type;
d018c8a6 301
bd5635a1 302};
7e258d18 303
2e4964ad
FF
304#define MSYMBOL_INFO(msymbol) (msymbol)->info
305#define MSYMBOL_TYPE(msymbol) (msymbol)->type
306
bd5635a1
RP
307\f
308/* All of the name-scope contours of the program
309 are represented by `struct block' objects.
310 All of these objects are pointed to by the blockvector.
311
312 Each block represents one name scope.
313 Each lexical context has its own block.
314
0b28c260
JK
315 The blockvector begins with some special blocks.
316 The GLOBAL_BLOCK contains all the symbols defined in this compilation
bd5635a1 317 whose scope is the entire program linked together.
0b28c260 318 The STATIC_BLOCK contains all the symbols whose scope is the
bd5635a1 319 entire compilation excluding other separate compilations.
0b28c260 320 Blocks starting with the FIRST_LOCAL_BLOCK are not special.
bd5635a1
RP
321
322 Each block records a range of core addresses for the code that
0b28c260 323 is in the scope of the block. The STATIC_BLOCK and GLOBAL_BLOCK
bd5635a1
RP
324 give, for the range of code, the entire range of code produced
325 by the compilation that the symbol segment belongs to.
326
327 The blocks appear in the blockvector
328 in order of increasing starting-address,
329 and, within that, in order of decreasing ending-address.
330
331 This implies that within the body of one function
332 the blocks appear in the order of a depth-first tree walk. */
333
334struct blockvector
335{
336 /* Number of blocks in the list. */
337 int nblocks;
338 /* The blocks themselves. */
339 struct block *block[1];
340};
341
2e4964ad
FF
342#define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
343#define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
344
92a29b47 345/* Special block numbers */
2e4964ad
FF
346
347#define GLOBAL_BLOCK 0
348#define STATIC_BLOCK 1
92a29b47
JG
349#define FIRST_LOCAL_BLOCK 2
350
bd5635a1
RP
351struct block
352{
2e4964ad 353
0b28c260 354 /* Addresses in the executable code that are in this block. */
2e4964ad
FF
355
356 CORE_ADDR startaddr;
357 CORE_ADDR endaddr;
358
0b28c260
JK
359 /* The symbol that names this block, if the block is the body of a
360 function; otherwise, zero. */
2e4964ad 361
bd5635a1 362 struct symbol *function;
2e4964ad
FF
363
364 /* The `struct block' for the containing block, or 0 if none.
0b28c260
JK
365
366 The superblock of a top-level local block (i.e. a function in the
367 case of C) is the STATIC_BLOCK. The superblock of the
368 STATIC_BLOCK is the GLOBAL_BLOCK. */
2e4964ad 369
bd5635a1 370 struct block *superblock;
2e4964ad 371
0b28c260
JK
372 /* Version of GCC used to compile the function corresponding
373 to this block, or 0 if not compiled with GCC. When possible,
374 GCC should be compatible with the native compiler, or if that
375 is not feasible, the differences should be fixed during symbol
376 reading. As of 16 Apr 93, this flag is never used to distinguish
377 between gcc2 and the native compiler.
378
379 If there is no function corresponding to this block, this meaning
380 of this flag is undefined. */
2e4964ad 381
bd5635a1 382 unsigned char gcc_compile_flag;
2e4964ad 383
bd5635a1 384 /* Number of local symbols. */
2e4964ad 385
bd5635a1 386 int nsyms;
2e4964ad 387
bd5635a1 388 /* The symbols. */
2e4964ad 389
bd5635a1
RP
390 struct symbol *sym[1];
391};
bd5635a1 392
2e4964ad
FF
393#define BLOCK_START(bl) (bl)->startaddr
394#define BLOCK_END(bl) (bl)->endaddr
395#define BLOCK_NSYMS(bl) (bl)->nsyms
396#define BLOCK_SYM(bl, n) (bl)->sym[n]
397#define BLOCK_FUNCTION(bl) (bl)->function
398#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
399#define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag
bd5635a1 400
2e4964ad 401/* Nonzero if symbols of block BL should be sorted alphabetically. */
bd5635a1 402
2e4964ad 403#define BLOCK_SHOULD_SORT(bl) ((bl)->nsyms >= 40)
bd5635a1 404
2e4964ad
FF
405\f
406/* Represent one symbol name; a variable, constant, function or typedef. */
bd5635a1 407
2e4964ad
FF
408/* Different name spaces for symbols. Looking up a symbol specifies a
409 namespace and ignores symbol definitions in other name spaces. */
410
bd5635a1
RP
411enum namespace
412{
2e4964ad
FF
413 /* UNDEF_NAMESPACE is used when a namespace has not been discovered or
414 none of the following apply. This usually indicates an error either
415 in the symbol information or in gdb's handling of symbols. */
416
417 UNDEF_NAMESPACE,
418
419 /* VAR_NAMESPACE is the usual namespace. In C, this contains variables,
420 function names, typedef names and enum type values. */
421
422 VAR_NAMESPACE,
423
424 /* STRUCT_NAMESPACE is used in C to hold struct, union and enum type names.
425 Thus, if `struct foo' is used in a C program, it produces a symbol named
426 `foo' in the STRUCT_NAMESPACE. */
427
428 STRUCT_NAMESPACE,
429
430 /* LABEL_NAMESPACE may be used for names of labels (for gotos);
431 currently it is not used and labels are not recorded at all. */
432
433 LABEL_NAMESPACE
bd5635a1
RP
434};
435
436/* An address-class says where to find the value of a symbol. */
437
438enum address_class
439{
2e4964ad
FF
440 /* Not used; catches errors */
441
442 LOC_UNDEF,
443
444 /* Value is constant int SYMBOL_VALUE, host byteorder */
445
446 LOC_CONST,
447
448 /* Value is at fixed address SYMBOL_VALUE_ADDRESS */
449
450 LOC_STATIC,
451
452 /* Value is in register */
453
454 LOC_REGISTER,
455
456 /* Value is at spec'd offset in arglist */
457
458 LOC_ARG,
459
95330ec3
JK
460 /* Value address is at spec'd offset in arglist. Currently this is used
461 for C++ references (and presumably will be used for Pascal VAR
462 parameters), and is only dereferenced in certain contexts. */
2e4964ad
FF
463
464 LOC_REF_ARG,
465
0b28c260
JK
466 /* Value is in specified register. Just like LOC_REGISTER except this is
467 an argument. Probably the cleaner way to handle this would be to
468 separate address_class (which would include separate ARG and LOCAL
469 to deal with FRAME_ARGS_ADDRESS versus FRAME_LOCALS_ADDRESS), and
470 an is_argument flag.
471
472 For some symbol formats (stabs, for some compilers at least),
473 gdb generates a LOC_ARG and a LOC_REGISTER rather than a LOC_REGPARM.
474 This is because that's what the compiler does, but perhaps it would
475 be better if the symbol-reading code detected this (is it possible?)
476 and generated a LOC_REGPARM. */
2e4964ad
FF
477
478 LOC_REGPARM,
479
480 /* Value is at spec'd offset in stack frame */
481
482 LOC_LOCAL,
483
484 /* Value not used; definition in SYMBOL_TYPE. Symbols in the namespace
485 STRUCT_NAMESPACE all have this class. */
486
487 LOC_TYPEDEF,
488
489 /* Value is address SYMBOL_VALUE_ADDRESS in the code */
490
491 LOC_LABEL,
492
493 /* Value is address SYMBOL_VALUE_BLOCK of a `struct block'. Function names
494 have this class. */
495
496 LOC_BLOCK,
497
ca6a826d 498 /* Value is a constant byte-sequence pointed to by SYMBOL_VALUE_BYTES, in
2e4964ad
FF
499 target byte order. */
500
501 LOC_CONST_BYTES,
502
503 /* Value is arg at spec'd offset in stack frame. Differs from LOC_LOCAL in
504 that symbol is an argument; differs from LOC_ARG in that we find it
505 in the frame (FRAME_LOCALS_ADDRESS), not in the arglist
506 (FRAME_ARGS_ADDRESS). Added for i960, which passes args in regs then
507 copies to frame. */
508
ca6a826d
PS
509 LOC_LOCAL_ARG,
510
511 /* The variable does not actually exist in the program.
512 The SYMBOL_VALUE is ignored. */
2e4964ad 513
ca6a826d 514 LOC_OPTIMIZED_OUT
bd5635a1
RP
515};
516
517struct symbol
518{
2e4964ad
FF
519
520 /* The general symbol info required for all types of symbols. */
521
522 struct general_symbol_info ginfo;
523
bd5635a1 524 /* Name space code. */
2e4964ad 525
bd5635a1 526 enum namespace namespace;
2e4964ad 527
bd5635a1 528 /* Address class */
2e4964ad 529
bd5635a1 530 enum address_class class;
2e4964ad 531
bd5635a1 532 /* Data type of value */
2e4964ad 533
bd5635a1
RP
534 struct type *type;
535
2e4964ad
FF
536 /* Line number of definition. FIXME: Should we really make the assumption
537 that nobody will try to debug files longer than 64K lines? What about
538 machine generated programs? */
539
bd5635a1
RP
540 unsigned short line;
541
252f6c65
FF
542 /* Some symbols require an additional value to be recorded on a per-
543 symbol basis. Stash those values here. */
2e4964ad 544
252f6c65
FF
545 union
546 {
2e4964ad
FF
547 /* for OP_BASEREG in DWARF location specs */
548 struct
252f6c65
FF
549 {
550 short regno_valid; /* 0 == regno invalid; !0 == regno valid */
551 short regno; /* base register number {0, 1, 2, ...} */
552 } basereg;
553 }
554 aux_value;
2e4964ad 555
bd5635a1
RP
556};
557
2e4964ad
FF
558#define SYMBOL_NAMESPACE(symbol) (symbol)->namespace
559#define SYMBOL_CLASS(symbol) (symbol)->class
560#define SYMBOL_TYPE(symbol) (symbol)->type
561#define SYMBOL_LINE(symbol) (symbol)->line
562#define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg.regno
bd5635a1 563
2e4964ad
FF
564/* This currently fails because some symbols are not being initialized
565 to zero on allocation, and no code is currently setting this value.
566 Basereg handling will probably change significantly in the next release.
567 FIXME -fnf */
568
569#if 0
570#define SYMBOL_BASEREG_VALID(symbol) (symbol)->aux_value.basereg.regno_valid
571#else
572#define SYMBOL_BASEREG_VALID(symbol) 0
573#endif
574
575\f
bd5635a1
RP
576/* A partial_symbol records the name, namespace, and address class of
577 symbols whose types we have not parsed yet. For functions, it also
578 contains their memory address, so we can find them from a PC value.
579 Each partial_symbol sits in a partial_symtab, all of which are chained
b0246b3b 580 on a partial symtab list and which points to the corresponding
bd5635a1
RP
581 normal symtab once the partial_symtab has been referenced. */
582
583struct partial_symbol
584{
2e4964ad
FF
585
586 /* The general symbol info required for all types of symbols. */
587
588 struct general_symbol_info ginfo;
589
bd5635a1 590 /* Name space code. */
2e4964ad 591
bd5635a1 592 enum namespace namespace;
2e4964ad 593
bd5635a1 594 /* Address class (for info_symbols) */
2e4964ad 595
bd5635a1 596 enum address_class class;
2e4964ad 597
bd5635a1 598};
2e4964ad
FF
599
600#define PSYMBOL_NAMESPACE(psymbol) (psymbol)->namespace
601#define PSYMBOL_CLASS(psymbol) (psymbol)->class
602
bd5635a1 603\f
2e4964ad
FF
604/* Source-file information. This describes the relation between source files,
605 ine numbers and addresses in the program text. */
bd5635a1
RP
606
607struct sourcevector
608{
609 int length; /* Number of source files described */
610 struct source *source[1]; /* Descriptions of the files */
611};
612
613/* Each item represents a line-->pc (or the reverse) mapping. This is
614 somewhat more wasteful of space than one might wish, but since only
615 the files which are actually debugged are read in to core, we don't
ece2e98a 616 waste much space. */
bd5635a1
RP
617
618struct linetable_entry
619{
620 int line;
621 CORE_ADDR pc;
622};
623
624struct linetable
625{
626 int nitems;
627 struct linetable_entry item[1];
628};
629
630/* All the information on one source file. */
631
632struct source
633{
634 char *name; /* Name of file */
635 struct linetable contents;
636};
637
2670f34d
JG
638/* How to relocate the symbols from each section in a symbol file.
639 Each struct contains an array of offsets.
640 The ordering and meaning of the offsets is file-type-dependent;
641 typically it is indexed by section numbers or symbol types or
642 something like that.
643
644 To give us flexibility in changing the internal representation
645 of these offsets, the ANOFFSET macro must be used to insert and
646 extract offset values in the struct. */
647
648struct section_offsets
649 {
650 CORE_ADDR offsets[1]; /* As many as needed. */
651 };
652
653#define ANOFFSET(secoff, whichone) (secoff->offsets[whichone])
654
bd5635a1
RP
655/* Each source file is represented by a struct symtab.
656 These objects are chained through the `next' field. */
657
658struct symtab
659 {
2e4964ad 660
bd5635a1 661 /* Chain of all existing symtabs. */
2e4964ad 662
bd5635a1 663 struct symtab *next;
2e4964ad 664
bd5635a1 665 /* List of all symbol scope blocks for this symtab. */
2e4964ad 666
bd5635a1 667 struct blockvector *blockvector;
2e4964ad 668
4137c5fc
JG
669 /* Table mapping core addresses to line numbers for this file.
670 Can be NULL if none. */
2e4964ad 671
bd5635a1 672 struct linetable *linetable;
2e4964ad 673
ca6a826d
PS
674 /* Section in objfile->section_offsets for the blockvector and
675 the linetable. */
676
677 int block_line_section;
678
679 /* If several symtabs share a blockvector, exactly one of them
680 should be designed the primary, so that the blockvector
681 is relocated exactly once by objfile_relocate. */
682
683 int primary;
684
bd5635a1 685 /* Name of this source file. */
2e4964ad 686
bd5635a1 687 char *filename;
2e4964ad 688
bd5635a1 689 /* Directory in which it was compiled, or NULL if we don't know. */
2e4964ad 690
bd5635a1 691 char *dirname;
2e4964ad 692
bd5635a1
RP
693 /* This component says how to free the data we point to:
694 free_contents => do a tree walk and free each object.
695 free_nothing => do nothing; some other symtab will free
696 the data this one uses.
2e4964ad
FF
697 free_linetable => free just the linetable. */
698
699 enum free_code
700 {
701 free_nothing, free_contents, free_linetable
702 }
703 free_code;
704
bd5635a1
RP
705 /* Pointer to one block of storage to be freed, if nonzero. */
706 /* This is IN ADDITION to the action indicated by free_code. */
2e4964ad 707
bd5635a1 708 char *free_ptr;
2e4964ad 709
bd5635a1 710 /* Total number of lines found in source file. */
2e4964ad 711
bd5635a1 712 int nlines;
2e4964ad 713
bd5635a1 714 /* Array mapping line number to character position. */
2e4964ad 715
bd5635a1 716 int *line_charpos;
2e4964ad 717
bd5635a1 718 /* Language of this source file. */
2e4964ad 719
bd5635a1 720 enum language language;
2e4964ad 721
bd5635a1 722 /* String of version information. May be zero. */
2e4964ad 723
bd5635a1 724 char *version;
2e4964ad 725
bd5635a1 726 /* Full name of file as found by searching the source path.
2e4964ad
FF
727 NULL if not yet known. */
728
bd5635a1 729 char *fullname;
8aa13b87 730
a048c8f5 731 /* Object file from which this symbol information was read. */
2e4964ad 732
a048c8f5 733 struct objfile *objfile;
a048c8f5 734
8aa13b87
JK
735 /* Anything extra for this symtab. This is for target machines
736 with special debugging info of some sort (which cannot just
737 be represented in a normal symtab). */
2e4964ad 738
8aa13b87
JK
739#if defined (EXTRA_SYMTAB_INFO)
740 EXTRA_SYMTAB_INFO
741#endif
2e4964ad 742
bd5635a1
RP
743 };
744
2e4964ad
FF
745#define BLOCKVECTOR(symtab) (symtab)->blockvector
746#define LINETABLE(symtab) (symtab)->linetable
747
748\f
bd5635a1
RP
749/* Each source file that has not been fully read in is represented by
750 a partial_symtab. This contains the information on where in the
751 executable the debugging symbols for a specific file are, and a
752 list of names of global symbols which are located in this file.
b0246b3b 753 They are all chained on partial symtab lists.
bd5635a1
RP
754
755 Even after the source file has been read into a symtab, the
756 partial_symtab remains around. They are allocated on an obstack,
757 psymbol_obstack. FIXME, this is bad for dynamic linking or VxWorks-
758 style execution of a bunch of .o's. */
b0246b3b 759
bd5635a1
RP
760struct partial_symtab
761{
2e4964ad 762
bd5635a1 763 /* Chain of all existing partial symtabs. */
2e4964ad 764
bd5635a1 765 struct partial_symtab *next;
2e4964ad 766
bd5635a1 767 /* Name of the source file which this partial_symtab defines */
2e4964ad 768
bd5635a1
RP
769 char *filename;
770
a048c8f5 771 /* Information about the object file from which symbols should be read. */
2e4964ad 772
a048c8f5 773 struct objfile *objfile;
a048c8f5 774
2670f34d 775 /* Set of relocation offsets to apply to each section. */
2e4964ad 776
2670f34d
JG
777 struct section_offsets *section_offsets;
778
bd5635a1
RP
779 /* Range of text addresses covered by this file; texthigh is the
780 beginning of the next section. */
2e4964ad
FF
781
782 CORE_ADDR textlow;
783 CORE_ADDR texthigh;
784
bd5635a1
RP
785 /* Array of pointers to all of the partial_symtab's which this one
786 depends on. Since this array can only be set to previous or
787 the current (?) psymtab, this dependency tree is guaranteed not
788 to have any loops. */
2e4964ad 789
bd5635a1 790 struct partial_symtab **dependencies;
2e4964ad 791
bd5635a1 792 int number_of_dependencies;
2e4964ad 793
bd5635a1
RP
794 /* Global symbol list. This list will be sorted after readin to
795 improve access. Binary search will be the usual method of
796 finding a symbol within it. globals_offset is an integer offset
4a35d6e9 797 within global_psymbols[]. */
2e4964ad
FF
798
799 int globals_offset;
800 int n_global_syms;
801
bd5635a1
RP
802 /* Static symbol list. This list will *not* be sorted after readin;
803 to find a symbol in it, exhaustive search must be used. This is
804 reasonable because searches through this list will eventually
805 lead to either the read in of a files symbols for real (assumed
806 to take a *lot* of time; check) or an error (and we don't care
4a35d6e9
FF
807 how long errors take). This is an offset and size within
808 static_psymbols[]. */
2e4964ad
FF
809
810 int statics_offset;
811 int n_static_syms;
812
bd5635a1
RP
813 /* Pointer to symtab eventually allocated for this source file, 0 if
814 !readin or if we haven't looked for the symtab after it was readin. */
2e4964ad 815
bd5635a1 816 struct symtab *symtab;
2e4964ad 817
bd5635a1
RP
818 /* Pointer to function which will read in the symtab corresponding to
819 this psymtab. */
2e4964ad 820
b0246b3b 821 void (*read_symtab) PARAMS ((struct partial_symtab *));
2e4964ad 822
4a35d6e9
FF
823 /* Information that lets read_symtab() locate the part of the symbol table
824 that this psymtab corresponds to. This information is private to the
825 format-dependent symbol reading routines. For further detail examine
826 the various symbol reading modules. Should really be (void *) but is
827 (char *) as with other such gdb variables. (FIXME) */
2e4964ad 828
4a35d6e9 829 char *read_symtab_private;
2e4964ad
FF
830
831 /* Non-zero if the symtab corresponding to this psymtab has been readin */
832
bd5635a1
RP
833 unsigned char readin;
834};
835
836/* A fast way to get from a psymtab to its symtab (after the first time). */
2e4964ad
FF
837#define PSYMTAB_TO_SYMTAB(pst) \
838 ((pst) -> symtab != NULL ? (pst) -> symtab : psymtab_to_symtab (pst))
bd5635a1 839
bd5635a1 840\f
2e4964ad
FF
841/* The virtual function table is now an array of structures which have the
842 form { int16 offset, delta; void *pfn; }.
aec4cb91 843
ea9cdf62
JK
844 In normal virtual function tables, OFFSET is unused.
845 DELTA is the amount which is added to the apparent object's base
846 address in order to point to the actual object to which the
847 virtual function should be applied.
0b28c260
JK
848 PFN is a pointer to the virtual function.
849
850 Note that this macro is g++ specific (FIXME). */
bd5635a1
RP
851
852#define VTBL_FNADDR_OFFSET 2
ea9cdf62 853
2e4964ad
FF
854/* Macro that yields non-zero value iff NAME is the prefix for C++ operator
855 names. If you leave out the parenthesis here you will lose!
ea9cdf62 856 Currently 'o' 'p' CPLUS_MARKER is used for both the symbol in the
0b28c260
JK
857 symbol-file and the names in gdb's symbol table.
858 Note that this macro is g++ specific (FIXME). */
ea9cdf62 859
2e4964ad
FF
860#define OPNAME_PREFIX_P(NAME) \
861 ((NAME)[0] == 'o' && (NAME)[1] == 'p' && (NAME)[2] == CPLUS_MARKER)
862
ca6a826d 863/* Macro that yields non-zero value iff NAME is the prefix for C++ vtbl
0b28c260 864 names. Note that this macro is g++ specific (FIXME). */
ca6a826d 865
2e4964ad
FF
866#define VTBL_PREFIX_P(NAME) \
867 ((NAME)[3] == CPLUS_MARKER && !strncmp ((NAME), "_vt", 3))
868
ca6a826d 869/* Macro that yields non-zero value iff NAME is the prefix for C++ destructor
0b28c260 870 names. Note that this macro is g++ specific (FIXME). */
ca6a826d
PS
871
872#define DESTRUCTOR_PREFIX_P(NAME) \
873 ((NAME)[0] == '_' && (NAME)[1] == CPLUS_MARKER && (NAME)[2] == '_')
874
bd5635a1 875\f
2e4964ad
FF
876/* External variables and functions for the objects described above. */
877
878/* This symtab variable specifies the current file for printing source lines */
879
880extern struct symtab *current_source_symtab;
881
882/* This is the next line to print for listing source lines. */
883
884extern int current_source_line;
885
886/* See the comment in symfile.c about how current_objfile is used. */
887
888extern struct objfile *current_objfile;
bd5635a1 889
b0246b3b
FF
890extern struct symtab *
891lookup_symtab PARAMS ((char *));
892
893extern struct symbol *
894lookup_symbol PARAMS ((const char *, const struct block *,
895 const enum namespace, int *, struct symtab **));
896
897extern struct symbol *
898lookup_block_symbol PARAMS ((const struct block *, const char *,
899 const enum namespace));
900
901extern struct type *
902lookup_struct PARAMS ((char *, struct block *));
903
904extern struct type *
905lookup_union PARAMS ((char *, struct block *));
906
907extern struct type *
908lookup_enum PARAMS ((char *, struct block *));
909
910extern struct symbol *
911block_function PARAMS ((struct block *));
912
913extern struct symbol *
914find_pc_function PARAMS ((CORE_ADDR));
915
916extern int
917find_pc_partial_function PARAMS ((CORE_ADDR, char **, CORE_ADDR *));
918
919extern void
920clear_pc_function_cache PARAMS ((void));
921
922extern struct partial_symtab *
923lookup_partial_symtab PARAMS ((char *));
924
925extern struct partial_symtab *
926find_pc_psymtab PARAMS ((CORE_ADDR));
927
928extern struct symtab *
929find_pc_symtab PARAMS ((CORE_ADDR));
930
931extern struct partial_symbol *
932find_pc_psymbol PARAMS ((struct partial_symtab *, CORE_ADDR));
933
934extern int
935find_pc_line_pc_range PARAMS ((CORE_ADDR, CORE_ADDR *, CORE_ADDR *));
936
937extern int
938contained_in PARAMS ((struct block *, struct block *));
939
940extern void
941reread_symbols PARAMS ((void));
942
b0246b3b
FF
943/* Functions for dealing with the minimal symbol table, really a misc
944 address<->symbol mapping for things we don't have debug symbols for. */
945
b0246b3b
FF
946extern void
947prim_record_minimal_symbol PARAMS ((const char *, CORE_ADDR,
948 enum minimal_symbol_type));
949
51b57ded
FF
950extern void
951prim_record_minimal_symbol_and_info PARAMS ((const char *, CORE_ADDR,
952 enum minimal_symbol_type,
ca6a826d 953 char *info, int section));
51b57ded 954
b0246b3b
FF
955extern struct minimal_symbol *
956lookup_minimal_symbol PARAMS ((const char *, struct objfile *));
957
958extern struct minimal_symbol *
959lookup_minimal_symbol_by_pc PARAMS ((CORE_ADDR));
960
b0246b3b
FF
961extern void
962init_minimal_symbol_collection PARAMS ((void));
963
964extern void
965discard_minimal_symbols PARAMS ((int));
966
967extern void
968install_minimal_symbols PARAMS ((struct objfile *));
bd5635a1
RP
969
970struct symtab_and_line
971{
972 struct symtab *symtab;
973 int line;
974 CORE_ADDR pc;
975 CORE_ADDR end;
976};
977
978struct symtabs_and_lines
979{
980 struct symtab_and_line *sals;
981 int nelts;
982};
983
2e4964ad
FF
984/* Given a pc value, return line number it is in. Second arg nonzero means
985 if pc is on the boundary use the previous statement's line number. */
bd5635a1 986
b0246b3b
FF
987extern struct symtab_and_line
988find_pc_line PARAMS ((CORE_ADDR, int));
bd5635a1
RP
989
990/* Given a symtab and line number, return the pc there. */
b0246b3b
FF
991
992extern CORE_ADDR
993find_line_pc PARAMS ((struct symtab *, int));
994
995extern int
996find_line_pc_range PARAMS ((struct symtab *, int, CORE_ADDR *, CORE_ADDR *));
997
998extern void
999resolve_sal_pc PARAMS ((struct symtab_and_line *));
bd5635a1 1000
2e4964ad
FF
1001/* Given a string, return the line specified by it. For commands like "list"
1002 and "breakpoint". */
bd5635a1 1003
b0246b3b
FF
1004extern struct symtabs_and_lines
1005decode_line_spec PARAMS ((char *, int));
1006
1007extern struct symtabs_and_lines
1008decode_line_spec_1 PARAMS ((char *, int));
1009
1010extern struct symtabs_and_lines
1011decode_line_1 PARAMS ((char **, int, struct symtab *, int));
bd5635a1 1012
5c43db6b 1013/* Symmisc.c */
b0246b3b 1014
35fcebce
PB
1015#if MAINTENANCE_CMDS
1016
1017void
1018maintenance_print_symbols PARAMS ((char *, int));
1019
1020void
1021maintenance_print_psymbols PARAMS ((char *, int));
1022
1023void
1024maintenance_print_msymbols PARAMS ((char *, int));
1025
1026void
1027maintenance_print_objfiles PARAMS ((char *, int));
1028
1029#endif
1030
b0246b3b
FF
1031extern void
1032free_symtab PARAMS ((struct symtab *));
5c43db6b 1033
bd5635a1 1034/* Symbol-reading stuff in symfile.c and solib.c. */
b0246b3b
FF
1035
1036extern struct symtab *
1037psymtab_to_symtab PARAMS ((struct partial_symtab *));
1038
1039extern void
1040clear_solib PARAMS ((void));
1041
1042extern struct objfile *
1043symbol_file_add PARAMS ((char *, int, CORE_ADDR, int, int, int));
bd5635a1
RP
1044
1045/* source.c */
bd5635a1 1046
b0246b3b
FF
1047extern int
1048identify_source_line PARAMS ((struct symtab *, int, int));
1049
1050extern void
1051print_source_lines PARAMS ((struct symtab *, int, int, int));
1052
1053extern void
1054forget_cached_source_info PARAMS ((void));
1055
1056extern void
1057select_source_symtab PARAMS ((struct symtab *));
1058
1059extern char **
1060make_symbol_completion_list PARAMS ((char *));
1061
1062/* symtab.c */
1063
51b57ded
FF
1064extern void
1065clear_symtab_users_once PARAMS ((void));
1066
b0246b3b
FF
1067extern struct partial_symtab *
1068find_main_psymtab PARAMS ((void));
1069
1070/* blockframe.c */
1071
1072extern struct blockvector *
1073blockvector_for_pc PARAMS ((CORE_ADDR, int *));
bd5635a1 1074
b0246b3b 1075/* symfile.c */
4a35d6e9 1076
b0246b3b
FF
1077extern enum language
1078deduce_language_from_filename PARAMS ((char *));
4a35d6e9 1079
b0246b3b 1080#endif /* !defined(SYMTAB_H) */
This page took 0.405261 seconds and 4 git commands to generate.