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