diff options
Diffstat (limited to 'static/v10/man5/stab.5')
| -rw-r--r-- | static/v10/man5/stab.5 | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/static/v10/man5/stab.5 b/static/v10/man5/stab.5 new file mode 100644 index 00000000..a41ca185 --- /dev/null +++ b/static/v10/man5/stab.5 @@ -0,0 +1,211 @@ +.TH STAB 5 +.CT 1 lib_obj +.SH NAME +stab \- symbol table types +.SH SYNOPSIS +.B "#include <stab.h>" +.SH DESCRIPTION +The include file +.L <stab.h> +defines some values of the +.L n_type +field of the symbol table of object files; see +.IR a.out (5). +These are the types for permanent symbols +used by the compilers +.IR cc (1) +and +.IR f77 (1) +and the debugger +.IR pi (9.1). +Symbol table entries are produced by assembler directives: +.TP \w'\f5.stabs\ \ \fP'u +.B .stabs +specifies a name in quotes \f5" "\fR, a symbol type +.RL ( n_type ), +one char +.RL ( n_other ), +one short +.RL ( n_desc), +and an unsigned long +.RL ( n_value , +usually an address). +.PD 0 +.TP +.B .stabd +the same, referring to the current location without an explicit +name. +.TP +.B .stabn +generates entries with no name. +.PD +.LP +The loader +.IR ld (1) +preserves the order of symbol table entries produced +by these directives. +.PP +The low bits of the +.L n_type +field place a symbol into +at most one segment, according to +the following masks, defined in +.BR <a.out.h> . +.PP +.EX +.ta \w'#define\ 'u +\w'N_FNAME\ 'u +\w'0x0\ \ \ 'u +#define N_UNDF 0x0 /* undefined */ +#define N_ABS 0x2 /* absolute */ +#define N_TEXT 0x4 /* text */ +#define N_DATA 0x6 /* data */ +#define N_BSS 0x8 /* bss */ +#define N_EXT 0x1 /* external bit, or'ed in */ +.EE +.PP +The +.L n_value +field of a symbol is relocated by +.I ld +as an address within the appropriate segment, +or is unchanged for a symbol not in any segment. +In addition, the loader will discard certain symbols, according to rules +of its own, unless the +.L n_type +field has one of the following bits set: +.PP +.L +#define N_STAB 0xe0 +.PP +This allows up to 112 symbol types, split among the various +segments. +Some of these have already been claimed. +Option +.B -g +of +.I cc +uses the following values, all 4 mod 16, for text symbols. +Comments show the pertinent fields of the +.B .stabs +directive. +.PP +.EX +.ta \w'#define\ 'u +\w'N_ECOMM\ 'u +\w'0x0\ \ \ 'u +\n(wwu +#define N_BFUN 0x24 /* procedure: name,,0,lineno,address */ +#define N_FUN 0x24 +#define N_NARGS 0x34 /* function call: ,,0,nbytes,address */ +#define N_SLINE 0x44 /* src line: ,,0,lineno,address */ +#define N_SO 0x64 /* source file: name,,0,lineno,address */ +#define N_SOL 0x84 /* #include file: name,,0,lineno,address */ +#define N_ESO 0x94 /* end source file: name,,0,lineno,address */ +#define N_ENTRY 0xa4 /* alternate entry: name,,0,lineno,address */ +#define N_RFUN 0xb4 /* return from function: ,,0,lineno,address */ +#define N_LBRAC 0xc4 /* left bracket: ,,0,level,address */ +#define N_RBRAC 0xd4 /* right bracket: ,,0,level,address */ +#define N_EFUN 0xf4 /* end of function: name,,0,lineno,address */ +.EE +.PP +These values, all 8 mod 16, are used for data symbols: +.PP +.EX +#define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,address */ +#define N_ECOML 0xe8 /* end common (local name): ,,address */ +.EE +.PP +And these for non-relocated symbols: +.PP +.EX +#define N_GSYM 0x20 /* global symbol: name,,0,type,0 */ +#define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */ +#define N_STFUN 0x32 /* static function: name,,0,type,0 */ +#define N_RSYM 0x40 /* register sym: name,,0,type,register */ +#define N_BSTR 0x5c /* begin structure: name,,0,type,length */ +#define N_ESTR 0x5e /* end structure: name,,0,type,length */ +#define N_SSYM 0x60 /* structure elt: name,,0,type,offset */ +#define N_SFLD 0x70 /* structure field: name,,0,type,offset */ +#define N_LSYM 0x80 /* local sym: name,,0,type,offset */ +#define N_PSYM 0xa0 /* parameter: name,,0,type,offset */ +#define N_BCOMM 0xe2 /* begin common: name,, */ +#define N_ECOMM 0xe4 /* end common: name,, */ +#define N_VER 0xf0 /* symbol table version number */ +#define N_TYID 0xfa /* struct, union, or enum name */ +#define N_DIM 0xfc /* dimension for arrays */ +.EE +.PP +Field +.L n_desc +holds a type specifier in the form used by +.IR cc (1), +by up to 6 qualifiers, with +.B q1 +most significant: +.PP +.EX +.ta \w'#define 'u +\w'short\ \ 'u +struct desc { + short q6:2, q5:2, q4:2, q3:2, q2:2, q1:2; + short basic:5; +}; +.EE +.PP +The qualifiers are coded thus: +.2C +\f50\fR none +\f51\fR pointer +\f52\fR function +\f53\fR array +.1C +.PP +The basic types are coded thus: +.2C +\f50\fR undefined +\f51\fR function argument +\f52\fR character +\f53\fR short +\f54\fR int +\f55\fR long +\f56\fR float +\f57\fR double +\f58\fR structure +\f59\fR union +\f510\fR enumeration +\f511\fR member of enumeration +\f512\fR unsigned character +\f513\fR unsigned short +\f514\fR unsigned int +\f515\fR unsigned long +\f516\fR void +.1C +.PP +The Pascal compiler, +.IR pc (A), +uses the following +.L n_type +value: +.PP +.L +#define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */ +.PP +and uses the following subtypes to do type checking across separately +compiled files: +.2C +\f51\fR source file name +\f52\fR included file name +\f53\fR global label +\f54\fR global constant +\f55\fR global type +\f56\fR global variable +\f57\fR global function +\f58\fR global procedure +\f59\fR external function +\f510\fR external procedure +.1C +.SH "SEE ALSO" +.IR a.out (5), +.IR pi (9.1), +.IR as (1), +.IR ld (1) +.SH BUGS +.PP +The loader's relocation conventions limit the number of useful +.LR n_type +values. |
