home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / gdb-4.14-src.lha / gdb-4.14 / gdb / buildsym.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-24  |  6.7 KB  |  260 lines

  1. /* Build symbol tables in GDB's internal format.
  2.    Copyright (C) 1986-1991 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 (BUILDSYM_H)
  21. #define BUILDSYM_H 1
  22.  
  23. /* This module provides definitions used for creating and adding to
  24.    the symbol table.  These routines are called from various symbol-
  25.    file-reading routines.  
  26.  
  27.    They originated in dbxread.c of gdb-4.2, and were split out to
  28.    make xcoffread.c more maintainable by sharing code.
  29.  
  30.    Variables declared in this file can be defined by #define-ing
  31.    the name EXTERN to null.  It is used to declare variables that
  32.    are normally extern, but which get defined in a single module
  33.    using this technique.  */
  34.  
  35. #ifndef EXTERN
  36. #define    EXTERN extern
  37. #endif
  38.  
  39. #define HASHSIZE 127    /* Size of things hashed via hashname() */
  40.  
  41. /* Name of source file whose symbol data we are now processing.
  42.    This comes from a symbol of type N_SO. */
  43.  
  44. EXTERN char *last_source_file;
  45.  
  46. /* Core address of start of text of current source file.
  47.    This too comes from the N_SO symbol. */
  48.  
  49. EXTERN CORE_ADDR last_source_start_addr;
  50.  
  51. /* The list of sub-source-files within the current individual compilation.
  52.    Each file gets its own symtab with its own linetable and associated info,
  53.    but they all share one blockvector.  */
  54.  
  55. struct subfile
  56. {
  57.   struct subfile *next;
  58.   char *name;
  59.   char *dirname;
  60.   struct linetable *line_vector;
  61.   int line_vector_length;
  62.   enum language language;
  63. };
  64.  
  65. EXTERN struct subfile *subfiles;
  66.  
  67. EXTERN struct subfile *current_subfile;
  68.  
  69. /* Global variable which, when set, indicates that we are processing a
  70.    .o file compiled with gcc */
  71.  
  72. EXTERN unsigned char processing_gcc_compilation;
  73.  
  74. /* When set, we are processing a .o file compiled by sun acc.  This is
  75.    misnamed; it refers to all stabs-in-elf implementations which use
  76.    N_UNDF the way Sun does, including Solaris gcc.  Hopefully all
  77.    stabs-in-elf implementations ever invented will choose to be
  78.    compatible.  */
  79.  
  80. EXTERN unsigned char processing_acc_compilation;
  81.  
  82. /* Count symbols as they are processed, for error messages.  */
  83.  
  84. EXTERN unsigned int symnum;
  85.  
  86. /* Record the symbols defined for each context in a list.
  87.    We don't create a struct block for the context until we
  88.    know how long to make it.  */
  89.  
  90. #define PENDINGSIZE 100
  91.  
  92. struct pending
  93. {
  94.   struct pending *next;
  95.   int nsyms;
  96.   struct symbol *symbol[PENDINGSIZE];
  97. };
  98.  
  99. /* List of free `struct pending' structures for reuse.  */
  100.  
  101. EXTERN struct pending *free_pendings;
  102.  
  103. /* Here are the three lists that symbols are put on.  */
  104.  
  105. EXTERN struct pending *file_symbols;    /* static at top level, and types */
  106.  
  107. EXTERN struct pending *global_symbols;    /* global functions and variables */
  108.  
  109. EXTERN struct pending *local_symbols;    /* everything local to lexic context */
  110.  
  111. /* Stack representing unclosed lexical contexts
  112.    (that will become blocks, eventually).  */
  113.  
  114. struct context_stack
  115. {
  116.   /* Outer locals at the time we entered */
  117.  
  118.   struct pending *locals;
  119.  
  120.   /* Pointer into blocklist as of entry */
  121.  
  122.   struct pending_block *old_blocks;
  123.  
  124.   /* Name of function, if any, defining context*/
  125.  
  126.   struct symbol *name;
  127.  
  128.   /* PC where this context starts */
  129.  
  130.   CORE_ADDR start_addr;
  131.  
  132.   /* Temp slot for exception handling. */
  133.  
  134.   CORE_ADDR end_addr;
  135.  
  136.   /* For error-checking matching push/pop */
  137.  
  138.   int depth;
  139.  
  140. };
  141.  
  142. EXTERN struct context_stack *context_stack;
  143.  
  144. /* Index of first unused entry in context stack.  */
  145.  
  146. EXTERN int context_stack_depth;
  147.  
  148. /* Currently allocated size of context stack.  */
  149.  
  150. EXTERN int context_stack_size;
  151.  
  152. /* Macro "function" for popping contexts from the stack.  Pushing is done
  153.    by a real function, push_context.  This returns a pointer to a struct
  154.    context_stack.  */
  155.  
  156. #define    pop_context() (&context_stack[--context_stack_depth]);
  157.  
  158. /* Nonzero if within a function (so symbols should be local,
  159.    if nothing says specifically).  */
  160.  
  161. EXTERN int within_function;
  162.  
  163. /* List of blocks already made (lexical contexts already closed).
  164.    This is used at the end to make the blockvector.  */
  165.  
  166. struct pending_block
  167. {
  168.   struct pending_block *next;
  169.   struct block *block;
  170. };
  171.  
  172. EXTERN struct pending_block *pending_blocks;
  173.  
  174.  
  175. struct subfile_stack
  176. {
  177.   struct subfile_stack *next;
  178.   char *name;
  179. };
  180.  
  181. EXTERN struct subfile_stack *subfile_stack;
  182.  
  183. #define next_symbol_text() (*next_symbol_text_func)()
  184.  
  185. /* Function to invoke get the next symbol.  Return the symbol name. */
  186.  
  187. EXTERN char *(*next_symbol_text_func) PARAMS ((void));
  188.  
  189. /* Vector of types defined so far, indexed by their type numbers.
  190.    Used for both stabs and coff.
  191.    (In newer sun systems, dbx uses a pair of numbers in parens,
  192.     as in "(SUBFILENUM,NUMWITHINSUBFILE)".  Then these numbers must be
  193.     translated through the type_translations hash table to get
  194.     the index into the type vector.)  */
  195.  
  196. EXTERN struct type **type_vector;
  197.  
  198. /* Number of elements allocated for type_vector currently.  */
  199.  
  200. EXTERN int type_vector_length;
  201.  
  202. /* Initial size of type vector.  Is realloc'd larger if needed,
  203.    and realloc'd down to the size actually used, when completed.  */
  204.  
  205. #define    INITIAL_TYPE_VECTOR_LENGTH    160
  206.  
  207. extern void
  208. add_symbol_to_list PARAMS ((struct symbol *, struct pending **));
  209.  
  210. extern struct symbol *
  211. find_symbol_in_list PARAMS ((struct pending *, char *, int));
  212.  
  213. extern void
  214. finish_block PARAMS ((struct symbol *, struct pending **,
  215.               struct pending_block *, CORE_ADDR, CORE_ADDR,
  216.               struct objfile *));
  217.  
  218. extern void
  219. really_free_pendings PARAMS ((int foo));
  220.  
  221. extern void
  222. start_subfile PARAMS ((char *, char *));
  223.  
  224. extern void
  225. patch_subfile_names PARAMS ((struct subfile *subfile, char *name));
  226.  
  227. extern void
  228. push_subfile PARAMS ((void));
  229.  
  230. extern char *
  231. pop_subfile PARAMS ((void));
  232.  
  233. extern struct symtab *
  234. end_symtab PARAMS ((CORE_ADDR, int, int, struct objfile *, int));
  235.  
  236. extern void
  237. scan_file_globals PARAMS ((struct objfile *));
  238.  
  239. extern void
  240. buildsym_new_init PARAMS ((void));
  241.  
  242. extern void
  243. buildsym_init PARAMS ((void));
  244.  
  245. extern struct context_stack *
  246. push_context PARAMS ((int, CORE_ADDR));
  247.  
  248. extern void
  249. record_line PARAMS ((struct subfile *, int, CORE_ADDR));
  250.  
  251. extern void
  252. start_symtab PARAMS ((char *, char *, CORE_ADDR));
  253.  
  254. extern int
  255. hashname PARAMS ((char *));
  256.  
  257. #undef EXTERN
  258.  
  259. #endif    /* defined (BUILDSYM_H) */
  260.