home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / gnu / gdb-4.9 / gdb / buildsym.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-05-12  |  6.9 KB  |  268 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 */
  75.  
  76. EXTERN unsigned char processing_acc_compilation;
  77.  
  78. /* Count symbols as they are processed, for error messages.  */
  79.  
  80. EXTERN unsigned int symnum;
  81.  
  82. /* Record the symbols defined for each context in a list.
  83.    We don't create a struct block for the context until we
  84.    know how long to make it.  */
  85.  
  86. #define PENDINGSIZE 100
  87.  
  88. struct pending
  89. {
  90.   struct pending *next;
  91.   int nsyms;
  92.   struct symbol *symbol[PENDINGSIZE];
  93. };
  94.  
  95. /* List of free `struct pending' structures for reuse.  */
  96.  
  97. EXTERN struct pending *free_pendings;
  98.  
  99. /* Here are the three lists that symbols are put on.  */
  100.  
  101. EXTERN struct pending *file_symbols;    /* static at top level, and types */
  102.  
  103. EXTERN struct pending *global_symbols;    /* global functions and variables */
  104.  
  105. EXTERN struct pending *local_symbols;    /* everything local to lexic context */
  106.  
  107. /* Stack representing unclosed lexical contexts
  108.    (that will become blocks, eventually).  */
  109.  
  110. struct context_stack
  111. {
  112.   /* Outer locals at the time we entered */
  113.  
  114.   struct pending *locals;
  115.  
  116.   /* Pointer into blocklist as of entry */
  117.  
  118.   struct pending_block *old_blocks;
  119.  
  120.   /* Name of function, if any, defining context*/
  121.  
  122.   struct symbol *name;
  123.  
  124.   /* PC where this context starts */
  125.  
  126.   CORE_ADDR start_addr;
  127.  
  128.   /* Temp slot for exception handling. */
  129.  
  130.   CORE_ADDR end_addr;
  131.  
  132.   /* For error-checking matching push/pop */
  133.  
  134.   int depth;
  135.  
  136. };
  137.  
  138. EXTERN struct context_stack *context_stack;
  139.  
  140. /* Index of first unused entry in context stack.  */
  141.  
  142. EXTERN int context_stack_depth;
  143.  
  144. /* Currently allocated size of context stack.  */
  145.  
  146. EXTERN int context_stack_size;
  147.  
  148. /* Macro "function" for popping contexts from the stack.  Pushing is done
  149.    by a real function, push_context.  This returns a pointer to a struct
  150.    context_stack.  */
  151.  
  152. #define    pop_context() (&context_stack[--context_stack_depth]);
  153.  
  154. /* Nonzero if within a function (so symbols should be local,
  155.    if nothing says specifically).  */
  156.  
  157. EXTERN int within_function;
  158.  
  159. /* List of blocks already made (lexical contexts already closed).
  160.    This is used at the end to make the blockvector.  */
  161.  
  162. struct pending_block
  163. {
  164.   struct pending_block *next;
  165.   struct block *block;
  166. };
  167.  
  168. EXTERN struct pending_block *pending_blocks;
  169.  
  170.  
  171. struct subfile_stack
  172. {
  173.   struct subfile_stack *next;
  174.   char *name;
  175. };
  176.  
  177. EXTERN struct subfile_stack *subfile_stack;
  178.  
  179. #define next_symbol_text() (*next_symbol_text_func)()
  180.  
  181. /* Function to invoke get the next symbol.  Return the symbol name. */
  182.  
  183. EXTERN char *(*next_symbol_text_func) PARAMS ((void));
  184.  
  185. /* Vector of types defined so far, indexed by their type numbers.
  186.    Used for both stabs and coff.
  187.    (In newer sun systems, dbx uses a pair of numbers in parens,
  188.     as in "(SUBFILENUM,NUMWITHINSUBFILE)".  Then these numbers must be
  189.     translated through the type_translations hash table to get
  190.     the index into the type vector.)  */
  191.  
  192. EXTERN struct type **type_vector;
  193.  
  194. /* Number of elements allocated for type_vector currently.  */
  195.  
  196. EXTERN int type_vector_length;
  197.  
  198. /* Initial size of type vector.  Is realloc'd larger if needed,
  199.    and realloc'd down to the size actually used, when completed.  */
  200.  
  201. #define    INITIAL_TYPE_VECTOR_LENGTH    160
  202.  
  203. extern void
  204. add_symbol_to_list PARAMS ((struct symbol *, struct pending **));
  205.  
  206. extern struct symbol *
  207. find_symbol_in_list PARAMS ((struct pending *, char *, int));
  208.  
  209. extern void
  210. finish_block PARAMS ((struct symbol *, struct pending **,
  211.               struct pending_block *, CORE_ADDR, CORE_ADDR,
  212.               struct objfile *));
  213.  
  214. extern void
  215. really_free_pendings PARAMS ((int foo));
  216.  
  217. extern void
  218. start_subfile PARAMS ((char *, char *));
  219.  
  220. extern void
  221. patch_subfile_names PARAMS ((struct subfile *subfile, char *name));
  222.  
  223. extern void
  224. push_subfile PARAMS ((void));
  225.  
  226. extern char *
  227. pop_subfile PARAMS ((void));
  228.  
  229. extern struct symtab *
  230. end_symtab PARAMS ((CORE_ADDR, int, int, struct objfile *, int));
  231.  
  232. extern void
  233. scan_file_globals PARAMS ((struct objfile *));
  234.  
  235. extern void
  236. buildsym_new_init PARAMS ((void));
  237.  
  238. extern void
  239. buildsym_init PARAMS ((void));
  240.  
  241. extern struct context_stack *
  242. push_context PARAMS ((int, CORE_ADDR));
  243.  
  244. extern void
  245. record_line PARAMS ((struct subfile *, int, CORE_ADDR));
  246.  
  247. extern void
  248. start_symtab PARAMS ((char *, char *, CORE_ADDR));
  249.  
  250. extern struct partial_symtab *
  251. start_psymtab PARAMS ((struct objfile *, struct section_offsets *, char *,
  252.                CORE_ADDR, int, struct partial_symbol *,
  253.                struct partial_symbol *));
  254.  
  255. extern void
  256. end_psymtab PARAMS ((struct partial_symtab *, char **, int, int, CORE_ADDR,
  257.              struct partial_symtab **, int));
  258.  
  259. extern void
  260. process_one_symbol PARAMS ((int, int, CORE_ADDR, char *,
  261.                 struct section_offsets *, struct objfile *));
  262. extern int
  263. hashname PARAMS ((char *));
  264.  
  265. #undef EXTERN
  266.  
  267. #endif    /* defined (BUILDSYM_H) */
  268.