Annotation of cci/usr/src/man/man5/stab.5, revision 1.1.1.1

1.1       root        1: .TH STAB 5 "1 April 1983"
                      2: .UC 4
                      3: .SH NAME
                      4: stab \- symbol table types
                      5: .SH SYNOPSIS
                      6: .B "#include <stab.h>"
                      7: .SH DESCRIPTION
                      8: .I Stab.h
                      9: defines some values of the n_type field of the symbol table of a.out files.
                     10: These are the types for permanent symbols (i.e. not local labels, etc.)
                     11: used by the old debugger
                     12: .I sdb
                     13: and the Berkeley Pascal compiler
                     14: .IR pc (1).
                     15: Symbol table entries can be produced by the
                     16: .I .stabs
                     17: assembler directive.
                     18: This allows one to specify a double-quote delimited name, a symbol type,
                     19: one char and one short of information about the symbol, and an unsigned
                     20: long (usually an address).
                     21: To avoid having to produce an explicit label for the address field,
                     22: the
                     23: .I .stabd
                     24: directive can be used to implicitly address the current location.
                     25: If no name is needed, symbol table entries can be generated using the
                     26: .I .stabn
                     27: directive.
                     28: The loader promises to preserve the order of symbol table entries produced
                     29: by
                     30: .I .stab
                     31: directives.
                     32: As described in
                     33: .IR a.out (5),
                     34: an element of the symbol table
                     35: consists of the following structure:
                     36: .PP
                     37: .nf
                     38: /*
                     39: .ti +\w'/'u
                     40: * Format of a symbol table entry.
                     41: .ti +\w'/'u
                     42: */
                     43: .ta \w'#define\ 'u +\w'unsigned 'u +\w'char\ \ 'u +\w'n_name;\ \ 'u
                     44: struct nlist {
                     45:        union {
                     46:                char    *n_name;        /* for use when in-core */
                     47:                long    n_strx;         /* index into file string table */
                     48:        } n_un;
                     49:        unsigned char   n_type;         /* type flag */
                     50:        char            n_other;        /* unused */
                     51:        short           n_desc;         /* see struct desc, below */
                     52:        unsigned        n_value;        /* address or offset or line */
                     53: };
                     54: .fi
                     55: .DT
                     56: .PP
                     57: The low bits of the n_type field are used to place a symbol into
                     58: at most one segment, according to 
                     59: the following masks, defined in
                     60: .RI < a.out.h >.
                     61: A symbol can be in none of these segments by having none of these segment
                     62: bits set.
                     63: .PP
                     64: .nf
                     65: /*
                     66: .ti +\w'/'u
                     67: * Simple values for n_type.
                     68: .ti +\w'/'u
                     69: */
                     70: .ta \w'#define\ 'u +\w'N_FNAME\ 'u +\w'0x0\ \ \ 'u
                     71: #define        N_UNDF  0x0     /* undefined */
                     72: #define        N_ABS   0x2     /* absolute */
                     73: #define        N_TEXT  0x4     /* text */
                     74: #define        N_DATA  0x6     /* data */
                     75: #define        N_BSS   0x8     /* bss */
                     76: 
                     77: #define        N_EXT   01      /* external bit, or'ed in */
                     78: .DT
                     79: .fi
                     80: .PP
                     81: The n_value field of a symbol is relocated by the linker,
                     82: .IR ld (1)
                     83: as an address within the appropriate segment.
                     84: N_value fields of symbols not in any segment are unchanged by the linker.
                     85: In addition, the linker will discard certain symbols, according to rules
                     86: of its own, unless the n_type field has one of the following bits set:
                     87: .PP
                     88: .nf
                     89: /*
                     90: .ti +\w'/'u
                     91: * Other permanent symbol table entries have some of the N_STAB bits set.
                     92: .ti +\w'/'u
                     93: * These are given in <stab.h>
                     94: .ti +\w'/'u
                     95: */
                     96: .ta \w'#define\ 'u +\w'N_FNAME\ 'u +\w'0x0\ \ \ 'u
                     97: #define        N_STAB          0xe0            /* if any of these bits set, don't discard */
                     98: 
                     99: .DT
                    100: .fi
                    101: .PP
                    102: This allows up to 112 (7 \(** 16) symbol types, split between the various
                    103: segments.
                    104: Some of these have already been claimed.
                    105: The old symbolic debugger,
                    106: .IR sdb ,
                    107: uses the following n_type values:
                    108: .PP
                    109: .nf
                    110: .ta \w'#define\ 'u +\w'N_FNAME\ 'u +\w'0x0\ \ \ 'u
                    111: #define        N_GSYM  0x20    /* global symbol: name,,0,type,0 */
                    112: #define        N_FNAME 0x22    /* procedure name (f77 kludge): name,,0 */
                    113: #define        N_FUN   0x24    /* procedure: name,,0,linenumber,address */
                    114: #define        N_STSYM 0x26    /* static symbol: name,,0,type,address */
                    115: #define        N_LCSYM 0x28    /* .lcomm symbol: name,,0,type,address */
                    116: #define        N_RSYM  0x40    /* register sym: name,,0,type,register */
                    117: #define        N_SLINE 0x44    /* src line: 0,,0,linenumber,address */
                    118: #define        N_SSYM  0x60    /* structure elt: name,,0,type,struct_offset */
                    119: #define        N_SO    0x64    /* source file name: name,,0,0,address */
                    120: #define        N_LSYM  0x80    /* local sym: name,,0,type,offset */
                    121: #define        N_SOL   0x84    /* #included file name: name,,0,0,address */
                    122: #define        N_PSYM  0xa0    /* parameter: name,,0,type,offset */
                    123: #define        N_ENTRY 0xa4    /* alternate entry: name,linenumber,address */
                    124: #define        N_LBRAC 0xc0    /* left bracket: 0,,0,nesting level,address */
                    125: #define        N_RBRAC 0xe0    /* right bracket: 0,,0,nesting level,address */
                    126: #define        N_BCOMM 0xe2    /* begin common: name,, */
                    127: #define        N_ECOMM 0xe4    /* end common: name,, */
                    128: #define        N_ECOML 0xe8    /* end common (local name): ,,address */
                    129: #define        N_LENG  0xfe    /* second stab entry with length information */
                    130: .fi
                    131: .PP
                    132: where the comments give
                    133: .I sdb
                    134: conventional use for
                    135: .IR .stab s
                    136: and the n_name, n_other, n_desc, and n_value fields
                    137: of the given n_type. 
                    138: .I Sdb
                    139: uses the n_desc field to hold a type specifier in the form used
                    140: by the Portable C Compiler,
                    141: .IR cc (1),
                    142: in which a base type is qualified in the following structure:
                    143: .PP
                    144: .nf
                    145: .ta \w'#define\ 'u +\w'short\ \ 'u
                    146: struct desc {
                    147:        short   q6:2,
                    148:                q5:2,
                    149:                q4:2,
                    150:                q3:2,
                    151:                q2:2,
                    152:                q1:2,
                    153:                basic:4;
                    154: };
                    155: .DT
                    156: .fi
                    157: .PP
                    158: There are four qualifications, with q1 the most significant and q6 the least
                    159: significant:
                    160: .nf
                    161:        0       none
                    162:        1       pointer
                    163:        2       function
                    164:        3       array
                    165: .fi
                    166: The sixteen basic types are assigned as follows:
                    167: .nf
                    168:        0       undefined
                    169:        1       function argument
                    170:        2       character
                    171:        3       short
                    172:        4       int
                    173:        5       long
                    174:        6       float
                    175:        7       double
                    176:        8       structure
                    177:        9       union
                    178:        10      enumeration
                    179:        11      member of enumeration
                    180:        12      unsigned character
                    181:        13      unsigned short
                    182:        14      unsigned int
                    183:        15      unsigned long
                    184: .fi
                    185: .PP
                    186: The Berkeley Pascal compiler,
                    187: .IR pc (1),
                    188: uses the following n_type value:
                    189: .PP
                    190: .nf
                    191: #define        N_PC    0x30    /* global pascal symbol: name,,0,subtype,line */
                    192: .fi
                    193: .PP
                    194: and uses the following subtypes to do type checking across separately
                    195: compiled files:
                    196: .nf
                    197:        1       source file name
                    198:        2       included file name
                    199:        3       global label
                    200:        4       global constant
                    201:        5       global type
                    202:        6       global variable
                    203:        7       global function
                    204:        8       global procedure
                    205:        9       external function
                    206:        10      external procedure
                    207:        11      library variable
                    208:        12      library routine
                    209: .fi
                    210: .SH "SEE ALSO"
                    211: as(1), ld(1), dbx(1), a.out(5)
                    212: .SH BUGS
                    213: .PP
                    214: .I Sdb
                    215: assumes that a symbol of type N_GSYM with name
                    216: .I name
                    217: is located at address
                    218: .IR _\|name .
                    219: .PP
                    220: More basic types are needed.

unix.superglobalmegacorp.com

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