Annotation of 43BSDReno/share/man/man5/stab.5, revision 1.1.1.1

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