Annotation of 43BSDReno/contrib/emacs-18.55/gdb/symtab.h, revision 1.1

1.1     ! root        1: /* Symbol table definitions for GDB.
        !             2:    Copyright (C) 1986 Free Software Foundation, Inc.
        !             3: 
        !             4: GDB is distributed in the hope that it will be useful, but WITHOUT ANY
        !             5: WARRANTY.  No author or distributor accepts responsibility to anyone
        !             6: for the consequences of using it or for whether it serves any
        !             7: particular purpose or works at all, unless he says so in writing.
        !             8: Refer to the GDB General Public License for full details.
        !             9: 
        !            10: Everyone is granted permission to copy, modify and redistribute GDB,
        !            11: but only under the conditions described in the GDB General Public
        !            12: License.  A copy of this license is supposed to have been given to you
        !            13: along with GDB so you can know your rights and responsibilities.  It
        !            14: should be in a file named COPYING.  Among other things, the copyright
        !            15: notice and this notice must be preserved on all copies.
        !            16: 
        !            17: In other words, go ahead and share GDB, but don't try to stop
        !            18: anyone else from sharing it farther.  Help stamp out software hoarding!
        !            19: */
        !            20: 
        !            21: /* An obstack to hold objects that should be freed
        !            22:    when we load a new symbol table.
        !            23:    This includes the symbols made by dbxread
        !            24:    and the types that are not permanent.  */
        !            25: 
        !            26: extern struct obstack *symbol_obstack;
        !            27: 
        !            28: /* Some definitions and declarations to go with use of obstacks.  */
        !            29: #define obstack_chunk_alloc xmalloc
        !            30: #define obstack_chunk_free free
        !            31: extern char *xmalloc ();
        !            32: extern void free ();
        !            33: 
        !            34: /* gdb can know one or several symbol tables at the same time;
        !            35:    the ultimate intent is to have one for each separately-compiled module.
        !            36:    Each such symbol table is recorded by a struct symtab, and they
        !            37:    are all chained together.  */
        !            38: 
        !            39: /* In addition, gdb can record any number of miscellaneous undebuggable
        !            40:    functions' addresses.  In a system that appends _ to function names,
        !            41:    the _'s are removed from the names stored in this table.  */
        !            42: 
        !            43: struct misc_function
        !            44: {
        !            45:   char *name;
        !            46:   CORE_ADDR address;
        !            47: };
        !            48: 
        !            49: /* Address and length of the vector recording all misc function names/addresses.  */
        !            50: 
        !            51: struct misc_function *misc_function_vector;
        !            52: int misc_function_count;
        !            53: 
        !            54: #include "symseg.h"
        !            55: 
        !            56: /* Each source file is represented by a struct symtab.
        !            57:    These objects are chained through the `next' field.  */
        !            58: 
        !            59: struct symtab
        !            60:   {
        !            61:     /* Chain of all existing symtabs.  */
        !            62:     struct symtab *next;
        !            63:     /* List of all symbol scope blocks for this symtab.  */
        !            64:     struct blockvector *blockvector;
        !            65:     /* Table mapping core addresses to line numbers for this file.  */
        !            66:     struct linetable *linetable;
        !            67:     /* Vector containing all types defined for this symtab.  */
        !            68:     struct typevector *typevector;
        !            69:     /* Name of this source file.  */
        !            70:     char *filename;
        !            71:     /* This component says how to free the data we point to:
        !            72:        free_contents => do a tree walk and free each object.
        !            73:        free_nothing => do nothing; some other symtab will free
        !            74:          the data this one uses.
        !            75:        free_linetable => free just the linetable.  */
        !            76:     enum free_code {free_nothing, free_contents, free_linetable}
        !            77:       free_code;
        !            78:     /* Pointer to one block storage to be freed, if nonzero.  */
        !            79:     char *free_ptr;
        !            80:     /* Total number of lines found in source file.  */
        !            81:     int nlines;
        !            82:     /* Array mapping line number to character position.  */
        !            83:     int *line_charpos;
        !            84:     /* Language of this source file.  */
        !            85:     enum language language;
        !            86:     /* String of version information.  May be zero.  */
        !            87:     char *version;
        !            88:     /* String of compilation information.  May be zero.  */
        !            89:     char *compilation;
        !            90:     /* Offset within loader symbol table
        !            91:        of first local symbol for this file.  */
        !            92:     int ldsymoff;
        !            93:     /* Full name of file as found by searching the source path.
        !            94:        0 if not yet known.  */
        !            95:     char *fullname;
        !            96:   };
        !            97: 
        !            98: /* This is the list of struct symtab's that gdb considers current.  */
        !            99: 
        !           100: struct symtab *symtab_list;
        !           101: 
        !           102: /* This symtab variable specifies the current file for printing source lines */
        !           103: 
        !           104: struct symtab *current_source_symtab;
        !           105: 
        !           106: /* This is the next line to print for listing source lines.  */
        !           107: 
        !           108: int current_source_line;
        !           109: 
        !           110: #define BLOCKLIST(symtab) (symtab)->blockvector
        !           111: #define BLOCKVECTOR(symtab) (symtab)->blockvector
        !           112: 
        !           113: #define TYPEVECTOR(symtab) (symtab)->typevector
        !           114: 
        !           115: #define LINELIST(symtab) (symtab)->linetable
        !           116: #define LINETABLE(symtab) (symtab)->linetable
        !           117: 
        !           118: /* Macros normally used to access components of symbol table structures.  */
        !           119: 
        !           120: #define BLOCKLIST_NBLOCKS(blocklist) (blocklist)->nblocks
        !           121: #define BLOCKLIST_BLOCK(blocklist,n) (blocklist)->block[n]
        !           122: #define BLOCKVECTOR_NBLOCKS(blocklist) (blocklist)->nblocks
        !           123: #define BLOCKVECTOR_BLOCK(blocklist,n) (blocklist)->block[n]
        !           124: 
        !           125: #define TYPEVECTOR_NTYPES(typelist) (typelist)->length
        !           126: #define TYPEVECTOR_TYPE(typelist,n) (typelist)->type[n]
        !           127: 
        !           128: #define BLOCK_START(bl) (bl)->startaddr
        !           129: #define BLOCK_END(bl) (bl)->endaddr
        !           130: #define BLOCK_NSYMS(bl) (bl)->nsyms
        !           131: #define BLOCK_SYM(bl, n) (bl)->sym[n]
        !           132: #define BLOCK_FUNCTION(bl) (bl)->function
        !           133: #define BLOCK_SUPERBLOCK(bl) (bl)->superblock
        !           134: 
        !           135: /* Nonzero if symbols of block BL should be sorted alphabetically.  */
        !           136: #define BLOCK_SHOULD_SORT(bl) ((bl)->nsyms >= 40)
        !           137: 
        !           138: #define SYMBOL_NAME(symbol) (symbol)->name
        !           139: #define SYMBOL_NAMESPACE(symbol) (symbol)->namespace
        !           140: #define SYMBOL_CLASS(symbol) (symbol)->class
        !           141: #define SYMBOL_VALUE(symbol) (symbol)->value.value
        !           142: #define SYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
        !           143: #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
        !           144: #define SYMBOL_TYPE(symbol) (symbol)->type
        !           145: 
        !           146: /* This appears in a type's flags word
        !           147:    if it is a (pointer to a|function returning a)* built in scalar type.
        !           148:    These types are never freed.  */
        !           149: #define TYPE_FLAG_PERM 4
        !           150: 
        !           151: #define TYPE_NAME(thistype) (thistype)->name
        !           152: #define TYPE_TARGET_TYPE(thistype) (thistype)->target_type
        !           153: #define TYPE_POINTER_TYPE(thistype) (thistype)->pointer_type
        !           154: #define TYPE_FUNCTION_TYPE(thistype) (thistype)->function_type
        !           155: #define TYPE_LENGTH(thistype) (thistype)->length
        !           156: #define TYPE_FLAGS(thistype) (thistype)->flags
        !           157: #define TYPE_UNSIGNED(thistype) ((thistype)->flags & TYPE_FLAG_UNSIGNED)
        !           158: #define TYPE_CODE(thistype) (thistype)->code
        !           159: #define TYPE_NFIELDS(thistype) (thistype)->nfields
        !           160: #define TYPE_FIELDS(thistype) (thistype)->fields
        !           161: 
        !           162: #define TYPE_FIELD(thistype, n) (thistype)->fields[n]
        !           163: #define TYPE_FIELD_TYPE(thistype, n) (thistype)->fields[n].type
        !           164: #define TYPE_FIELD_NAME(thistype, n) (thistype)->fields[n].name
        !           165: #define TYPE_FIELD_VALUE(thistype, n) (* (int*) &(thistype)->fields[n].type)
        !           166: #define TYPE_FIELD_BITPOS(thistype, n) (thistype)->fields[n].bitpos
        !           167: #define TYPE_FIELD_BITSIZE(thistype, n) (thistype)->fields[n].bitsize
        !           168: #define TYPE_FIELD_PACKED(thistype, n) (thistype)->fields[n].bitsize
        !           169: 
        !           170: /* Functions that work on the objects described above */
        !           171: 
        !           172: extern struct symtab *lookup_symtab ();
        !           173: extern struct symbol *lookup_symbol ();
        !           174: extern struct type *lookup_typename ();
        !           175: extern struct type *lookup_unsigned_typename ();
        !           176: extern struct type *lookup_struct ();
        !           177: extern struct type *lookup_union ();
        !           178: extern struct type *lookup_enum ();
        !           179: extern struct type *lookup_pointer_type ();
        !           180: extern struct type *lookup_function_type ();
        !           181: extern struct symbol *block_function ();
        !           182: extern struct symbol *find_pc_function ();
        !           183: extern int find_pc_misc_function ();
        !           184: 
        !           185: extern struct type *builtin_type_void;
        !           186: extern struct type *builtin_type_char;
        !           187: extern struct type *builtin_type_short;
        !           188: extern struct type *builtin_type_int;
        !           189: extern struct type *builtin_type_long;
        !           190: extern struct type *builtin_type_unsigned_char;
        !           191: extern struct type *builtin_type_unsigned_short;
        !           192: extern struct type *builtin_type_unsigned_int;
        !           193: extern struct type *builtin_type_unsigned_long;
        !           194: extern struct type *builtin_type_float;
        !           195: extern struct type *builtin_type_double;
        !           196: 
        !           197: struct symtab_and_line
        !           198: {
        !           199:   struct symtab *symtab;
        !           200:   int line;
        !           201:   CORE_ADDR pc;
        !           202:   CORE_ADDR end;
        !           203: };
        !           204: 
        !           205: /* Given a pc value, return line number it is in.
        !           206:    Second arg nonzero means if pc is on the boundary
        !           207:    use the previous statement's line number.  */
        !           208: 
        !           209: struct symtab_and_line find_pc_line ();
        !           210: 
        !           211: /* Given a string, return the line specified by it.
        !           212:    For commands like "list" and "breakpoint".  */
        !           213: 
        !           214: struct symtab_and_line decode_line_spec ();
        !           215: struct symtab_and_line decode_line_1 ();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.