summaryrefslogtreecommitdiff
path: root/static/v10/man5/stab.5
diff options
context:
space:
mode:
Diffstat (limited to 'static/v10/man5/stab.5')
-rw-r--r--static/v10/man5/stab.5211
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.