Annotation of researchv10dc/man/man5/stab.5, revision 1.1.1.1

1.1       root        1: .TH STAB 5
                      2: .CT 1 lib_obj
                      3: .SH NAME
                      4: stab \- symbol table types
                      5: .SH SYNOPSIS
                      6: .B "#include <stab.h>"
                      7: .SH DESCRIPTION
                      8: The include file
                      9: .L <stab.h>
                     10: defines some values of the
                     11: .L n_type
                     12: field of the symbol table of object files; see
                     13: .IR a.out (5).
                     14: These are the types for permanent symbols
                     15: used by the compilers
                     16: .IR cc (1)
                     17: and
                     18: .IR f77 (1)
                     19: and the debugger
                     20: .IR pi (9.1).
                     21: Symbol table entries are produced by assembler directives:
                     22: .TP \w'\f5.stabs\ \ \fP'u
                     23: .B .stabs
                     24: specifies a name in quotes \f5" "\fR, a symbol type
                     25: .RL ( n_type ),
                     26: one char
                     27: .RL ( n_other ),
                     28: one short 
                     29: .RL ( n_desc),
                     30: and an unsigned long 
                     31: .RL ( n_value ,
                     32: usually an address).
                     33: .PD 0
                     34: .TP
                     35: .B .stabd
                     36: the same, referring to the current location without an explicit
                     37: name.
                     38: .TP
                     39: .B .stabn
                     40: generates entries with no name.
                     41: .PD
                     42: .LP
                     43: The loader
                     44: .IR ld (1)
                     45: preserves the order of symbol table entries produced
                     46: by these directives.
                     47: .PP
                     48: The low bits of the
                     49: .L n_type
                     50: field place a symbol into
                     51: at most one segment, according to
                     52: the following masks, defined in
                     53: .BR <a.out.h> .
                     54: .PP
                     55: .EX
                     56: .ta \w'#define\ 'u +\w'N_FNAME\ 'u +\w'0x0\ \ \ 'u
                     57: #define        N_UNDF  0x0     /* undefined */
                     58: #define        N_ABS   0x2     /* absolute */
                     59: #define        N_TEXT  0x4     /* text */
                     60: #define        N_DATA  0x6     /* data */
                     61: #define        N_BSS   0x8     /* bss */
                     62: #define        N_EXT   0x1     /* external bit, or'ed in */
                     63: .EE
                     64: .PP
                     65: The
                     66: .L n_value
                     67: field of a symbol is relocated by 
                     68: .I ld
                     69: as an address within the appropriate segment,
                     70: or is unchanged for a symbol not in any segment.
                     71: In addition, the loader will discard certain symbols, according to rules
                     72: of its own, unless the
                     73: .L n_type
                     74: field has one of the following bits set:
                     75: .PP
                     76: .L
                     77: #define        N_STAB  0xe0
                     78: .PP
                     79: This allows up to 112 symbol types, split among the various
                     80: segments.
                     81: Some of these have already been claimed.
                     82: Option 
                     83: .B -g
                     84: of
                     85: .I cc
                     86: uses the following values, all 4 mod 16, for text symbols.
                     87: Comments show the pertinent fields of the
                     88: .B .stabs
                     89: directive.
                     90: .PP
                     91: .EX
                     92: .ta \w'#define\ 'u +\w'N_ECOMM\ 'u +\w'0x0\ \ \ 'u +\n(wwu
                     93: #define        N_BFUN  0x24    /* procedure: name,,0,lineno,address */
                     94: #define        N_FUN   0x24
                     95: #define        N_NARGS 0x34    /* function call: ,,0,nbytes,address */
                     96: #define        N_SLINE 0x44    /* src line: ,,0,lineno,address */
                     97: #define        N_SO    0x64    /* source file: name,,0,lineno,address */
                     98: #define        N_SOL   0x84    /* #include file: name,,0,lineno,address */
                     99: #define        N_ESO   0x94    /* end source file: name,,0,lineno,address */
                    100: #define        N_ENTRY 0xa4    /* alternate entry: name,,0,lineno,address */
                    101: #define        N_RFUN  0xb4    /* return from function: ,,0,lineno,address */
                    102: #define        N_LBRAC 0xc4    /* left  bracket: ,,0,level,address */
                    103: #define        N_RBRAC 0xd4    /* right bracket: ,,0,level,address */
                    104: #define        N_EFUN  0xf4    /* end of function: name,,0,lineno,address */
                    105: .EE
                    106: .PP
                    107: These values, all 8 mod 16, are used for data symbols:
                    108: .PP
                    109: .EX
                    110: #define        N_LCSYM 0x28    /* .lcomm symbol: name,,0,type,address */
                    111: #define        N_ECOML 0xe8    /* end common (local name): ,,address */
                    112: .EE
                    113: .PP
                    114: And these for non-relocated symbols:
                    115: .PP
                    116: .EX
                    117: #define        N_GSYM  0x20    /* global symbol: name,,0,type,0 */
                    118: #define        N_FNAME 0x22    /* procedure name (f77 kludge): name,,0 */
                    119: #define        N_STFUN 0x32    /* static function: name,,0,type,0 */
                    120: #define        N_RSYM  0x40    /* register sym: name,,0,type,register */
                    121: #define        N_BSTR  0x5c    /* begin structure: name,,0,type,length */
                    122: #define        N_ESTR  0x5e    /* end structure: name,,0,type,length */
                    123: #define        N_SSYM  0x60    /* structure elt: name,,0,type,offset */
                    124: #define        N_SFLD  0x70    /* structure field: name,,0,type,offset */
                    125: #define        N_LSYM  0x80    /* local sym: name,,0,type,offset */
                    126: #define        N_PSYM  0xa0    /* parameter: name,,0,type,offset */
                    127: #define        N_BCOMM 0xe2    /* begin common: name,, */
                    128: #define        N_ECOMM 0xe4    /* end common: name,, */
                    129: #define        N_VER   0xf0    /* symbol table version number */
                    130: #define        N_TYID  0xfa    /* struct, union, or enum name */
                    131: #define        N_DIM   0xfc    /* dimension for arrays */
                    132: .EE
                    133: .PP
                    134: Field
                    135: .L n_desc
                    136: holds a type specifier in the form used by
                    137: .IR cc (1),
                    138: by up to 6 qualifiers, with
                    139: .B q1
                    140: most significant:
                    141: .PP
                    142: .EX
                    143: .ta \w'#define 'u +\w'short\ \ 'u
                    144: struct desc    {
                    145:        short   q6:2, q5:2, q4:2, q3:2, q2:2, q1:2;
                    146:        short   basic:5;
                    147: };
                    148: .EE
                    149: .PP
                    150: The qualifiers are coded thus:
                    151: .2C
                    152: \f50\fR        none
                    153: \f51\fR        pointer
                    154: \f52\fR        function
                    155: \f53\fR        array
                    156: .1C
                    157: .PP
                    158: The basic types are coded thus:
                    159: .2C
                    160: \f50\fR        undefined
                    161: \f51\fR        function argument
                    162: \f52\fR        character
                    163: \f53\fR        short
                    164: \f54\fR        int
                    165: \f55\fR        long
                    166: \f56\fR        float
                    167: \f57\fR        double
                    168: \f58\fR        structure
                    169: \f59\fR        union
                    170: \f510\fR       enumeration
                    171: \f511\fR       member of enumeration
                    172: \f512\fR       unsigned character
                    173: \f513\fR       unsigned short
                    174: \f514\fR       unsigned int
                    175: \f515\fR       unsigned long
                    176: \f516\fR       void
                    177: .1C
                    178: .PP
                    179: The Pascal compiler,
                    180: .IR pc (A),
                    181: uses the following
                    182: .L n_type
                    183: value:
                    184: .PP
                    185: .L
                    186: #define        N_PC    0x30    /* global pascal symbol: name,,0,subtype,line */
                    187: .PP
                    188: and uses the following subtypes to do type checking across separately
                    189: compiled files:
                    190: .2C
                    191: \f51\fR        source file name
                    192: \f52\fR        included file name
                    193: \f53\fR        global label
                    194: \f54\fR        global constant
                    195: \f55\fR        global type
                    196: \f56\fR        global variable
                    197: \f57\fR        global function
                    198: \f58\fR        global procedure
                    199: \f59\fR        external function
                    200: \f510\fR       external procedure
                    201: .1C
                    202: .SH "SEE ALSO"
                    203: .IR a.out (5), 
                    204: .IR pi (9.1), 
                    205: .IR as (1), 
                    206: .IR ld (1)
                    207: .SH BUGS
                    208: .PP
                    209: The loader's relocation conventions limit the number of useful
                    210: .LR n_type
                    211: values.

unix.superglobalmegacorp.com

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