summaryrefslogtreecommitdiff
path: root/static/freebsd/man5/stab.5 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man5/stab.5 3.html')
-rw-r--r--static/freebsd/man5/stab.5 3.html163
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> &#x2014; <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
+ &lt;<a class="In">stab.h</a>&gt;</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">&lt;<a class="In">stab.h</a>&gt;</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">&lt;<a class="In">a.out.h</a>&gt;</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 &lt;stab.h&gt;
+*/
+
+#define N_STAB 0xe0 /* if any of these bits set, don't discard */</pre>
+</div>
+<p class="Pp">This allows up to 112 (7 &#x2217; 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>