diff options
Diffstat (limited to 'static/freebsd/man5/stab.5 3.html')
| -rw-r--r-- | static/freebsd/man5/stab.5 3.html | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/static/freebsd/man5/stab.5 3.html b/static/freebsd/man5/stab.5 3.html new file mode 100644 index 00000000..2e5d2d2d --- /dev/null +++ b/static/freebsd/man5/stab.5 3.html @@ -0,0 +1,163 @@ +<table class="head"> + <tr> + <td class="head-ltitle">STAB(5)</td> + <td class="head-vol">File Formats Manual</td> + <td class="head-rtitle">STAB(5)</td> + </tr> +</table> +<div class="manual-text"> +<section class="Sh"> +<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1> +<p class="Pp"><code class="Nm">stab</code> — <span class="Nd">symbol + table types</span></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1> +<p class="Pp"><code class="In">#include + <<a class="In">stab.h</a>></code></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<p class="Pp">The file <code class="In"><<a class="In">stab.h</a>></code> + defines some of the symbol table <var class="Fa">n_type</var> field values + for a.out files. These are the types for permanent symbols (i.e., not local + labels, etc.) used by the old debugger <i class="Em">sdb</i> and the + Berkeley Pascal compiler <a class="Xr">pc(1)</a>. Symbol table entries can + be produced by the <span class="Pa">.stabs</span> assembler directive. This + allows one to specify a double-quote delimited name, a symbol type, one char + and one short of information about the symbol, and an unsigned long (usually + an address). To avoid having to produce an explicit label for the address + field, the <span class="Pa">.stabd</span> directive can be used to + implicitly address the current location. If no name is needed, symbol table + entries can be generated using the <span class="Pa">.stabn</span> directive. + The loader promises to preserve the order of symbol table entries produced + by <span class="Pa">.stab</span> directives. As described in + <a class="Xr">a.out(5)</a>, an element of the symbol table consists of the + following structure:</p> +<div class="Bd Pp Li"> +<pre>/* +* Format of a symbol table entry. +*/ + +struct nlist { + union { + const char *n_name; /* for use when in-core */ + long n_strx; /* index into file string table */ + } n_un; + unsigned char n_type; /* type flag */ + char n_other; /* unused */ + short n_desc; /* see struct desc, below */ + unsigned n_value; /* address or offset or line */ +};</pre> +</div> +<p class="Pp">The low bits of the <var class="Fa">n_type</var> field are used to + place a symbol into at most one segment, according to the following masks, + defined in <code class="In"><<a class="In">a.out.h</a>></code>. A + symbol can be in none of these segments by having none of these segment bits + set.</p> +<div class="Bd Pp Li"> +<pre>/* +* Simple values for n_type. +*/ + +#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 01 /* external bit, or'ed in */</pre> +</div> +<p class="Pp">The <var class="Fa">n_value</var> field of a symbol is relocated + by the linker, <a class="Xr">ld(1)</a> as an address within the appropriate + segment. <var class="Fa">N_value</var> fields of symbols not in any segment + are unchanged by the linker. In addition, the linker will discard certain + symbols, according to rules of its own, unless the + <var class="Fa">n_type</var> field has one of the following bits set:</p> +<div class="Bd Pp Li"> +<pre>/* +* Other permanent symbol table entries have some of the N_STAB bits set. +* These are given in <stab.h> +*/ + +#define N_STAB 0xe0 /* if any of these bits set, don't discard */</pre> +</div> +<p class="Pp">This allows up to 112 (7 ∗ 16) symbol types, split between + the various segments. Some of these have already been claimed. The old + symbolic debugger, <i class="Em">sdb</i>, uses the following n_type + values:</p> +<div class="Bd Pp Li"> +<pre>#define N_GSYM 0x20 /* global symbol: name,,0,type,0 */ +#define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */ +#define N_FUN 0x24 /* procedure: name,,0,linenumber,address */ +#define N_STSYM 0x26 /* static symbol: name,,0,type,address */ +#define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,address */ +#define N_RSYM 0x40 /* register sym: name,,0,type,register */ +#define N_SLINE 0x44 /* src line: 0,,0,linenumber,address */ +#define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */ +#define N_SO 0x64 /* source file name: name,,0,0,address */ +#define N_LSYM 0x80 /* local sym: name,,0,type,offset */ +#define N_SOL 0x84 /* #included file name: name,,0,0,address */ +#define N_PSYM 0xa0 /* parameter: name,,0,type,offset */ +#define N_ENTRY 0xa4 /* alternate entry: name,linenumber,address */ +#define N_LBRAC 0xc0 /* left bracket: 0,,0,nesting level,address */ +#define N_RBRAC 0xe0 /* right bracket: 0,,0,nesting level,address */ +#define N_BCOMM 0xe2 /* begin common: name,, */ +#define N_ECOMM 0xe4 /* end common: name,, */ +#define N_ECOML 0xe8 /* end common (local name): ,,address */ +#define N_LENG 0xfe /* second stab entry with length information */</pre> +</div> +<p class="Pp" id="Sdb">where the comments give <i class="Em">sdb</i> + conventional use for <span class="Pa">.stab</span> <var class="Fa">s</var> + and the <var class="Fa">n_name</var>, <var class="Fa">n_other</var>, + <var class="Fa">n_desc</var>, and <var class="Fa">n_value</var> fields of + the given <var class="Fa">n_type</var>. + <a class="permalink" href="#Sdb"><i class="Em">Sdb</i></a> uses the + <var class="Fa">n_desc</var> field to hold a type specifier in the form used + by the Portable C Compiler, <a class="Xr">cc(1)</a>; see the header file + <span class="Pa">pcc.h</span> for details on the format of these type + values.</p> +<p class="Pp">The Berkeley Pascal compiler, <a class="Xr">pc(1)</a>, uses the + following <var class="Fa">n_type</var> value:</p> +<div class="Bd Pp Li"> +<pre>#define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */</pre> +</div> +<p class="Pp">and uses the following subtypes to do type checking across + separately compiled files:</p> +<div class="Bd Pp Bd-indent"> +<pre>1 source file name +2 included file name +3 global label +4 global constant +5 global type +6 global variable +7 global function +8 global procedure +9 external function +10 external procedure +11 library variable +12 library routine</pre> +</div> +</section> +<section class="Sh"> +<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE + ALSO</a></h1> +<p class="Pp"><a class="Xr">as(1)</a>, <a class="Xr">ld(1)</a>, + <a class="Xr">a.out(5)</a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1> +<p class="Pp">The <code class="Nm">stab</code> file appeared in + <span class="Ux">4.0BSD</span>.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1> +<p class="Pp">More basic types are needed.</p> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">June 10, 2010</td> + <td class="foot-os">FreeBSD 15.0</td> + </tr> +</table> |
