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