home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Atari / Gnu / gdb36p4s.zoo / symtab.h < prev    next >
C/C++ Source or Header  |  1993-08-13  |  15KB  |  394 lines

  1. /* Symbol table definitions for GDB.
  2.    Copyright (C) 1986, 1989 Free Software Foundation, Inc.
  3.  
  4. This file is part of GDB.
  5.  
  6. GDB 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 1, or (at your option)
  9. any later version.
  10.  
  11. GDB 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 GDB; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. #include <obstack.h>
  21.  
  22. /* An obstack to hold objects that should be freed
  23.    when we load a new symbol table.
  24.    This includes the symbols made by dbxread
  25.    and the types that are not permanent.  */
  26.  
  27. extern struct obstack *symbol_obstack;
  28. extern struct obstack *psymbol_obstack;
  29.  
  30. /* Some definitions and declarations to go with use of obstacks.  */
  31. #define obstack_chunk_alloc xmalloc
  32. #define obstack_chunk_free free
  33. extern char *xmalloc ();
  34. extern void free ();
  35.  
  36. /* gdb can know one or several symbol tables at the same time;
  37.    the ultimate intent is to have one for each separately-compiled module.
  38.    Each such symbol table is recorded by a struct symtab, and they
  39.    are all chained together.  */
  40.  
  41. /* In addition, gdb can record any number of miscellaneous undebuggable
  42.    functions' addresses.  In a system that appends _ to function names,
  43.    the _'s are removed from the names stored in this table.  */
  44.  
  45. /* Actually, the misc function list is used to store *all* of the
  46.    global symbols (text, data, bss, and abs).  It is sometimes used
  47.    to figure out what symtabs to read in.  The "type" field appears
  48.    never to be used.  */
  49.  
  50. enum misc_function_type {mf_unknown = 0, mf_text, mf_data, mf_bss, mf_abs};
  51.  
  52. struct misc_function
  53. {
  54.   char *name;
  55.   CORE_ADDR address;
  56.   unsigned char type;        /* Really enum misc_function_type.  */
  57. };
  58.  
  59. /* Address and length of the vector recording all misc function names/addresses.  */
  60.  
  61. struct misc_function *misc_function_vector;
  62. int misc_function_count;
  63.  
  64. #include "symseg.h"
  65.  
  66. /* Each source file is represented by a struct symtab.  */
  67. /* These objects are chained through the `next' field.  */
  68.  
  69. struct symtab
  70.   {
  71.     /* Chain of all existing symtabs.  */
  72.     struct symtab *next;
  73.     /* List of all symbol scope blocks for this symtab.  */
  74.     struct blockvector *blockvector;
  75.     /* Table mapping core addresses to line numbers for this file.  */
  76.     struct linetable *linetable;
  77.     /* Vector containing all types defined for this symtab.  */
  78.     struct typevector *typevector;
  79.     /* Name of this source file.  */
  80.     char *filename;
  81.     /* This component says how to free the data we point to:
  82.        free_contents => do a tree walk and free each object.
  83.        free_nothing => do nothing; some other symtab will free
  84.          the data this one uses.
  85.        free_linetable => free just the linetable.  */
  86.     enum free_code {free_nothing, free_contents, free_linetable}
  87.       free_code;
  88.     /* Pointer to one block of storage to be freed, if nonzero.  */
  89.     char *free_ptr;
  90.     /* Total number of lines found in source file.  */
  91.     int nlines;
  92.     /* Array mapping line number to character position.  */
  93.     int *line_charpos;
  94.     /* Language of this source file.  */
  95.     enum language language;
  96.     /* String of version information.  May be zero.  */
  97.     char *version;
  98.     /* String of compilation information.  May be zero.  */
  99.     char *compilation;
  100.     /* Offset within loader symbol table
  101.        of first local symbol for this file.  */
  102.     int ldsymoff;
  103.     /* Full name of file as found by searching the source path.
  104.        0 if not yet known.  */
  105.     char *fullname;
  106.   };
  107.  
  108. /*
  109.  * Each source file that has not been fully read in is represented by
  110.  * a partial_symtab.  This contains the information on where in the
  111.  * executable the debugging symbols for a specific file are, and a
  112.  * list of names of global symbols which are located in this file.
  113.  */
  114. struct partial_symtab
  115. {
  116.   /* Chain of all existing partial symtabs.  */
  117.   struct partial_symtab *next;
  118.   /* Name of the source file which this partial_symtab defines */
  119.   char *filename;
  120.   /* Offset within loader symbol table of first local symbol for this
  121.      file and length (in bytes) of the section of the symbol table
  122.      devoted to this file's symbols (actually, the section bracketed
  123.      may contain more than just this files symbols
  124.      If ldsymlen is 0, the only reason for this things existence is
  125.      the dependency list below.  Nothing else will happen when it is
  126.      read in.  */
  127.   int ldsymoff, ldsymlen;
  128.   /* Range of text addresses covered by this file; texthigh is the
  129.      beginning of the next section. */
  130.   int textlow, texthigh;
  131.   /* Non-zero if the symtab corresponding to this psymtab has been
  132.      readin */
  133.   unsigned char readin;
  134.   /* Array of pointers to all of the partial_symtab s which this one
  135.      depends one.  Since this array can only be set to previous or
  136.      the current (?) psymtab, this dependency tree is guarranteed not
  137.      to have any loops. */
  138.   struct partial_symtab **dependencies;
  139.   int number_of_dependencies;
  140.   /* Global symbol list.  This list will be sorted after readin to
  141.      improve access.  Binary search will be the usual method of
  142.      finding a symbol within it. globals_offset is an integer offset
  143.      within ps_globals */
  144.   int globals_offset, n_global_syms;
  145.   /* Static symbol list.  This list will *not* be sorted after readin;
  146.      to find a symbol in it, exhaustive search must be used.  This is
  147.      reasonable because searches through this list will eventually
  148.      lead to either the read in of a files symbols for real (assumed
  149.      to take a *lot* of time; check) or an error (and we don't care
  150.      how long errors take). */
  151.   int statics_offset, n_static_syms;
  152. };
  153.  
  154. /* This is the list of struct symtab's that gdb considers current.  */
  155.  
  156. struct symtab *symtab_list;
  157.  
  158. /* This is the list of struct partial_symtab's that gdb may need to access */
  159.  
  160. struct partial_symtab *partial_symtab_list;
  161.  
  162. /* This symtab variable specifies the current file for printing source lines */
  163.  
  164. struct symtab *current_source_symtab;
  165.  
  166. /* This is the next line to print for listing source lines.  */
  167.  
  168. int current_source_line;
  169.  
  170. #define BLOCKLIST(symtab) (symtab)->blockvector
  171. #define BLOCKVECTOR(symtab) (symtab)->blockvector
  172.  
  173. #define TYPEVECTOR(symtab) (symtab)->typevector
  174.  
  175. #define LINELIST(symtab) (symtab)->linetable
  176. #define LINETABLE(symtab) (symtab)->linetable
  177.  
  178. /* Macros normally used to access components of symbol table structures.  */
  179.  
  180. #define BLOCKLIST_NBLOCKS(blocklist) (blocklist)->nblocks
  181. #define BLOCKLIST_BLOCK(blocklist,n) (blocklist)->block[n]
  182. #define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
  183. #define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
  184.  
  185. #define TYPEVECTOR_NTYPES(typelist) (typelist)->length
  186. #define TYPEVECTOR_TYPE(typelist,n) (typelist)->type[n]
  187.  
  188. #define BLOCK_START(bl) (bl)->startaddr
  189. #define BLOCK_END(bl) (bl)->endaddr
  190. #define BLOCK_NSYMS(bl) (bl)->nsyms
  191. #define BLOCK_SYM(bl, n) (bl)->sym[n]
  192. #define BLOCK_FUNCTION(bl) (bl)->function
  193. #define BLOCK_SUPERBLOCK(bl) (bl)->superblock
  194. #define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag
  195.  
  196. /* Nonzero if symbols of block BL should be sorted alphabetically.  */
  197. #define BLOCK_SHOULD_SORT(bl) ((bl)->nsyms >= 40)
  198.  
  199. #define SYMBOL_NAME(symbol) (symbol)->name
  200. #define SYMBOL_NAMESPACE(symbol) (symbol)->namespace
  201. #define SYMBOL_CLASS(symbol) (symbol)->class
  202. #define SYMBOL_VALUE(symbol) (symbol)->value.value
  203. #define SYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
  204. #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
  205. #define SYMBOL_TYPE(symbol) (symbol)->type
  206.  
  207. /* Some macros for bitfields.  */
  208. #define B_SET(a,x) (a[x>>5] |= (1 << (x&31)))
  209. #define B_CLR(a,x) (a[x>>5] &= ~(1 << (x&31)))
  210. #define B_TST(a,x) (a[x>>5] & (1 << (x&31)))
  211.  
  212. #define TYPE_NAME(thistype) (thistype)->name
  213. #define TYPE_TARGET_TYPE(thistype) (thistype)->target_type
  214. #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type
  215. #define TYPE_REFERENCE_TYPE(thistype) (thistype)->reference_type
  216. #define TYPE_FUNCTION_TYPE(thistype) (thistype)->function_type
  217. #define TYPE_MAIN_VARIANT(thistype) (thistype)->main_variant
  218. #define TYPE_NEXT_VARIANT(thistype) (thistype)->next_variant
  219. #define TYPE_LENGTH(thistype) (thistype)->length
  220. #define TYPE_FLAGS(thistype) (thistype)->flags
  221. #define TYPE_UNSIGNED(thistype) ((thistype)->flags & TYPE_FLAG_UNSIGNED)
  222. #define TYPE_CODE(thistype) (thistype)->code
  223. #define TYPE_NFIELDS(thistype) (thistype)->nfields
  224. #define TYPE_FIELDS(thistype) (thistype)->fields
  225. /* C++ */
  226. #define TYPE_VPTR_BASETYPE(thistype) (thistype)->vptr_basetype
  227. #define TYPE_DOMAIN_TYPE(thistype) (thistype)->vptr_basetype
  228. #define TYPE_VPTR_FIELDNO(thistype) (thistype)->vptr_fieldno
  229. #define TYPE_FN_FIELDS(thistype) (thistype)->fn_fields
  230. #define TYPE_NFN_FIELDS(thistype) (thistype)->nfn_fields
  231. #define TYPE_NFN_FIELDS_TOTAL(thistype) (thistype)->nfn_fields_total
  232. #define TYPE_BASECLASSES(thistype) (thistype)->baseclasses
  233. #define TYPE_ARG_TYPES(thistype) (thistype)->arg_types
  234. #define TYPE_BASECLASS(thistype,index) (thistype)->baseclasses[index]
  235. #define TYPE_N_BASECLASSES(thistype) (thistype)->n_baseclasses
  236. #define TYPE_VIA_PUBLIC(thistype) ((thistype)->flags & TYPE_FLAG_VIA_PUBLIC)
  237. #define TYPE_VIA_VIRTUAL(thistype) ((thistype)->flags & TYPE_FLAG_VIA_VIRTUAL)
  238.  
  239. #define TYPE_FIELD(thistype, n) (thistype)->fields[n]
  240. #define TYPE_FIELD_TYPE(thistype, n) (thistype)->fields[n].type
  241. #define TYPE_FIELD_NAME(thistype, n) (thistype)->fields[n].name
  242. #define TYPE_FIELD_VALUE(thistype, n) (* (int*) &(thistype)->fields[n].type)
  243. #define TYPE_FIELD_BITPOS(thistype, n) (thistype)->fields[n].bitpos
  244. #define TYPE_FIELD_BITSIZE(thistype, n) (thistype)->fields[n].bitsize
  245. #define TYPE_FIELD_PACKED(thistype, n) (thistype)->fields[n].bitsize
  246.  
  247. #define TYPE_FIELD_PRIVATE_BITS(thistype) (thistype)->private_field_bits
  248. #define TYPE_FIELD_PROTECTED_BITS(thistype) (thistype)->protected_field_bits
  249. #define SET_TYPE_FIELD_PRIVATE(thistype, n) B_SET ((thistype)->private_field_bits, (n))
  250. #define SET_TYPE_FIELD_PROTECTED(thistype, n) B_SET ((thistype)->protected_field_bits, (n))
  251. #define TYPE_FIELD_PRIVATE(thistype, n) B_TST((thistype)->private_field_bits, (n))
  252. #define TYPE_FIELD_PROTECTED(thistype, n) B_TST((thistype)->protected_field_bits, (n))
  253.  
  254. #define TYPE_HAS_DESTRUCTOR(thistype) ((thistype)->flags & TYPE_FLAG_HAS_DESTRUCTOR)
  255. #define TYPE_HAS_CONSTRUCTOR(thistype) ((thistype)->flags & TYPE_FLAG_HAS_CONSTRUCTOR)
  256.  
  257. #define TYPE_FIELD_STATIC(thistype, n) ((thistype)->fields[n].bitpos == -1)
  258. #define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) ((char *)(thistype)->fields[n].bitsize)
  259.  
  260. #define TYPE_FN_FIELDLISTS(thistype) (thistype)->fn_fieldlists
  261. #define TYPE_FN_FIELDLIST(thistype, n) (thistype)->fn_fieldlists[n]
  262. #define TYPE_FN_FIELDLIST1(thistype, n) (thistype)->fn_fieldlists[n].fn_fields
  263. #define TYPE_FN_FIELDLIST_NAME(thistype, n) (thistype)->fn_fieldlists[n].name
  264. #define TYPE_FN_FIELDLIST_LENGTH(thistype, n) (thistype)->fn_fieldlists[n].length
  265.  
  266. #define TYPE_FN_FIELD(thistype, n) (thistype)[n]
  267. #define TYPE_FN_FIELD_NAME(thistype, n) (thistype)[n].name
  268. #define TYPE_FN_FIELD_TYPE(thistype, n) (thistype)[n].type
  269. #define TYPE_FN_FIELD_ARGS(thistype, n) TYPE_ARG_TYPES ((thistype)[n].type)
  270. #define TYPE_FN_FIELD_PHYSNAME(thistype, n) (thistype)[n].physname
  271. #define TYPE_FN_FIELD_VIRTUAL_P(thistype, n) ((thistype)[n].voffset < 0)
  272. #define TYPE_FN_FIELD_STATIC_P(thistype, n) ((thistype)[n].voffset > 0)
  273. #define TYPE_FN_FIELD_VOFFSET(thistype, n) ((thistype)[n].voffset-1)
  274.  
  275. #define TYPE_FN_PRIVATE_BITS(thistype) (thistype).private_fn_field_bits
  276. #define TYPE_FN_PROTECTED_BITS(thistype) (thistype).protected_fn_field_bits
  277. #define SET_TYPE_FN_PRIVATE(thistype, n) B_SET ((thistype).private_fn_field_bits, n)
  278. #define SET_TYPE_FN_PROTECTED(thistype, n) B_SET ((thistype).protected_fn_field_bits, n)
  279. #define TYPE_FN_PRIVATE(thistype, n) B_TST ((thistype).private_fn_field_bits, n)
  280. #define TYPE_FN_PROTECTED(thistype, n) B_TST ((thistype).protected_fn_field_bits, n)
  281.  
  282. /* The virtual function table is now an array of structures
  283.    which have the form { int16 offset, delta; void *pfn; }.  */
  284. #define VTBL_FNADDR_OFFSET 2
  285.  
  286. /* Functions that work on the objects described above */
  287.  
  288. extern struct symtab *lookup_symtab ();
  289. extern struct symbol *lookup_symbol ();
  290. extern struct type *lookup_typename ();
  291. extern void check_stub_type ();
  292. extern struct type *lookup_primitive_typename ();
  293. extern struct type *lookup_unsigned_typename ();
  294. extern struct type *lookup_struct ();
  295. extern struct type *lookup_union ();
  296. extern struct type *lookup_enum ();
  297. extern struct type *lookup_struct_elt_type ();
  298. extern struct type *lookup_pointer_type ();
  299. extern struct type *lookup_function_type ();
  300. extern struct type *lookup_basetype_type ();
  301. extern struct type *create_array_type ();
  302. extern struct symbol *block_function ();
  303. extern struct symbol *find_pc_function ();
  304. extern int find_pc_partial_function ();
  305. extern struct partial_symtab *find_pc_psymtab ();
  306. extern struct symtab *find_pc_symtab ();
  307. extern struct partial_symbol *find_pc_psymbol ();
  308. extern int find_pc_misc_function ();
  309. extern char *type_name_no_tag ();
  310.  
  311. /* C++ stuff.  */
  312. extern struct type *lookup_reference_type ();
  313. extern struct type *lookup_member_type ();
  314. extern struct type *lookup_class ();
  315. /* end of C++ stuff.  */
  316.  
  317. extern struct type *builtin_type_void;
  318. extern struct type *builtin_type_char;
  319. extern struct type *builtin_type_short;
  320. extern struct type *builtin_type_int;
  321. extern struct type *builtin_type_long;
  322. extern struct type *builtin_type_unsigned_char;
  323. extern struct type *builtin_type_unsigned_short;
  324. extern struct type *builtin_type_unsigned_int;
  325. extern struct type *builtin_type_unsigned_long;
  326. extern struct type *builtin_type_float;
  327. extern struct type *builtin_type_double;
  328.  
  329. #ifdef LONG_DOUBLE
  330. extern struct type *builtin_type_long_double;
  331.  
  332. #ifndef BUILTIN_TYPE_LONGEST_DOUBLE
  333. #define BUILTIN_TYPE_LONGEST_DOUBLE builtin_type_long_double
  334. #endif
  335.  
  336. #else /* LONG_DOUBLE */
  337.  
  338. #ifndef BUILTIN_TYPE_LONGEST_DOUBLE
  339. #define BUILTIN_TYPE_LONGEST_DOUBLE builtin_type_double
  340. #endif
  341.  
  342. #endif
  343.  
  344. #ifdef LONG_LONG
  345. extern struct type *builtin_type_long_long;
  346. extern struct type *builtin_type_unsigned_long_long;
  347.  
  348. #ifndef BUILTIN_TYPE_LONGEST
  349. #define BUILTIN_TYPE_LONGEST builtin_type_long_long
  350. #endif
  351.  
  352. #ifndef BUILTIN_TYPE_UNSIGNED_LONGEST
  353. #define BUILTIN_TYPE_UNSIGNED_LONGEST builtin_type_unsigned_long_long
  354. #endif
  355.  
  356. #else /* LONG_LONG */
  357.  
  358. #ifndef BUILTIN_TYPE_LONGEST
  359. #define BUILTIN_TYPE_LONGEST builtin_type_long
  360. #endif
  361.  
  362. #ifndef BUILTIN_TYPE_UNSIGNED_LONGEST
  363. #define BUILTIN_TYPE_UNSIGNED_LONGEST builtin_type_unsigned_long
  364. #endif
  365.  
  366. #endif
  367.  
  368. struct symtab_and_line
  369. {
  370.   struct symtab *symtab;
  371.   int line;
  372.   CORE_ADDR pc;
  373.   CORE_ADDR end;
  374. };
  375.  
  376. struct symtabs_and_lines
  377. {
  378.   struct symtab_and_line *sals;
  379.   int nelts;
  380. };
  381.  
  382. /* Given a pc value, return line number it is in.
  383.    Second arg nonzero means if pc is on the boundary
  384.    use the previous statement's line number.  */
  385.  
  386. struct symtab_and_line find_pc_line ();
  387.  
  388. /* Given a string, return the line specified by it.
  389.    For commands like "list" and "breakpoint".  */
  390.  
  391. struct symtabs_and_lines decode_line_spec ();
  392. struct symtabs_and_lines decode_line_spec_1 ();
  393. struct symtabs_and_lines decode_line_1 ();
  394.