aboutsummaryrefslogtreecommitdiff
path: root/man/man3/mach-symbol.html
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-14 03:45:44 +0000
committerrsc <devnull@localhost>2005-01-14 03:45:44 +0000
commit78e51a8c6678b6e3dff3d619aa786669f531f4bc (patch)
tree015e00fde4fc837fd31b705e18d17dc913829388 /man/man3/mach-symbol.html
parent2634795b5f0053bc0ff08e5d7bbc0eda8efea061 (diff)
downloadplan9port-78e51a8c6678b6e3dff3d619aa786669f531f4bc.tar.gz
plan9port-78e51a8c6678b6e3dff3d619aa786669f531f4bc.tar.bz2
plan9port-78e51a8c6678b6e3dff3d619aa786669f531f4bc.zip
checkpoint
Diffstat (limited to 'man/man3/mach-symbol.html')
-rw-r--r--man/man3/mach-symbol.html272
1 files changed, 272 insertions, 0 deletions
diff --git a/man/man3/mach-symbol.html b/man/man3/mach-symbol.html
new file mode 100644
index 00000000..246d51b4
--- /dev/null
+++ b/man/man3/mach-symbol.html
@@ -0,0 +1,272 @@
+<head>
+<title>mach-symbol(3) - Plan 9 from User Space</title>
+<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
+</head>
+<body bgcolor=#ffffff>
+<table border=0 cellpadding=0 cellspacing=0 width=100%>
+<tr height=10><td>
+<tr><td width=20><td>
+<tr><td width=20><td><b>MACH-SYMBOL(3)</b><td align=right><b>MACH-SYMBOL(3)</b>
+<tr><td width=20><td colspan=2>
+ <br>
+<p><font size=+1><b>NAME </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ symopen, symclose, findhdr, indexsym, lookupsym, findsym, findexsym,
+ flookupsym, ffindsym, lookuplsym, indexlsym, findlsym, symoff,
+ pc2file, file2pc, line2pc, fnbound, fileline, pc2line &ndash; symbol
+ table access functions<br>
+
+</table>
+<p><font size=+1><b>SYNOPSIS </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ <tt><font size=+1>#include &lt;u.h&gt;<br>
+ #include &lt;libc.h&gt;<br>
+ #include &lt;mach.h&gt;
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+ </font></tt>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;symopen(Fhdr *hdr)<br>
+ void &nbsp;&nbsp;&nbsp;&nbsp;symclose(Fhdr *hdr)<br>
+ Fhdr &nbsp;&nbsp;&nbsp;&nbsp;*findhdr(char *name)<br>
+ extern &nbsp;&nbsp;&nbsp;Fhdr* fhdrlist;
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexsym(uint n, Symbol *s)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lookupsym(char *fn, char *var, Symbol *s)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findsym(Loc loc, uint class, Symbol *s)
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findexsym(Fhdr *hdr, uint n, Symbol *s)<br>
+ Symbol *flookupsym(Fhdr *hdr, char *name)<br>
+ Symbol *ffindsym(Fhdr *hdr, Loc loc, uint class)
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;indexlsym(Symbol *s1, uint n, Symbol *s2)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lookuplsym(Symbol *s1, char *name, Symbol *s2)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;findlsym(Symbol *s1, Loc loc, Symbol *s2)
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;symoff(char *a, uint n, ulong addr, uint class)
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc2file(ulong pc, char *file, uint n, ulong *line)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc2line(ulong pc, ulong *line)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileline(ulong pc, char *buf, uint n)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file2pc(char *file, ulong line, ulong *pc)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line2pc(ulong basepc, ulong line, ulong *pc)<br>
+ int &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fnbound(ulong pc, ulong bounds[2])<br>
+
+</table>
+<p><font size=+1><b>DESCRIPTION </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ These functions provide machine-independent access to the symbol
+ table of an executable file or executing process. <a href="../man3/Mach.html"><i>Mach</i>(3)</a>, <a href="../man3/mach-file.html"><i>mach-file</i>(3)</a>,
+ and <a href="../man3/mach-map.html"><i>mach-map</i>(3)</a> describe additional library functions for accessing
+ executable files and executing processes.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Symopen</i> uses the data in the <tt><font size=+1>Fhdr</font></tt> structure filled by <i>crackhdr</i>
+ (see <a href="../man3/mach-file.html"><i>mach-file</i>(3)</a>) to initialize in-memory structures used to
+ access the symbol tables contained in the file. <i>Symclose</i> frees
+ the structures. The rest of the functions described here access
+ a composite symbol table made up of all currently open tables.
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ The set of all currently open <tt><font size=+1>Fhdr</font></tt>s is maintained as a linked
+ list starting at <i>fhdrlist</i> (chained via <tt><font size=+1>Fhdr.next</font></tt>).
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Findhdr</i> searches the currently open <tt><font size=+1>Fhdr</font></tt>s for one whose file name
+ ends with the path <i>name</i> (that is, <tt><font size=+1>libc.so</font></tt> matches <tt><font size=+1>/usr/lib/libc.so</font></tt>
+ but not <tt><font size=+1>mylibc.so</font></tt>).
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ The <tt><font size=+1>Symbol</font></tt> data structure:<br>
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ typedef struct Symbol Symbol;<br>
+ struct Symbol<br>
+ {<br>
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ char &nbsp;&nbsp;&nbsp;*name;<br>
+ Loc &nbsp;&nbsp;&nbsp;loc;<br>
+ Loc &nbsp;&nbsp;&nbsp;hiloc;<br>
+ char &nbsp;&nbsp;&nbsp;class;<br>
+ char &nbsp;&nbsp;&nbsp;type;<br>
+ <i>...<br>
+ </i>
+ </table>
+ };<br>
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+
+ </table>
+ describes a symbol table entry. The <tt><font size=+1>value</font></tt> field contains the offset
+ of the symbol within its address space: global variables relative
+ to the beginning of the data segment, text beyond the start of
+ the text segment, and automatic variables and parameters relative
+ to the stack frame. The <tt><font size=+1>type</font></tt> field contains the type of
+ the symbol:<br>
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ <tt><font size=+1>T</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text segment symbol<br>
+ <tt><font size=+1>t</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static text segment symbol<br>
+ <tt><font size=+1>D</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data segment symbol<br>
+ <tt><font size=+1>d</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static data segment symbol<br>
+ <tt><font size=+1>B</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bss segment symbol<br>
+ <tt><font size=+1>b</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static bss segment symbol<br>
+ <tt><font size=+1>a</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;automatic (local) variable symbol<br>
+ <tt><font size=+1>p</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function parameter symbol<br>
+ <tt><font size=+1>U</font></tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;undefined symbol<br>
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+
+ </table>
+ The <tt><font size=+1>class</font></tt> field assigns the symbol to a general class; <tt><font size=+1>CTEXT</font></tt>,
+ <tt><font size=+1>CDATA</font></tt>, <tt><font size=+1>CAUTO</font></tt>, and <tt><font size=+1>CPARAM</font></tt> are the most popular.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Indexsym</i> stores information for the <i>n th</i> symbol into <i>s</i>. The symbols
+ are ordered by increasing address.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Lookupsym</i> fills a <tt><font size=+1>Symbol</font></tt> structure with symbol table information.
+ Global variables and functions are represented by a single name;
+ local variables and parameters are uniquely specified by a function
+ and variable name pair. Arguments <i>fn</i> and <i>var</i> contain the name
+ of a function and variable, respectively. If both are
+ non-zero, the symbol table is searched for a parameter or automatic
+ variable. If only <i>var</i> is zero, the text symbol table is searched
+ for function <i>fn</i>. If only <i>fn</i> is zero, the global variable table
+ is searched for <i>var</i>.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Findsym</i> returns the symbol table entry of type <i>class</i> stored near
+ <i>addr</i>. The selected symbol is a global variable or function with
+ address nearest to and less than or equal to <i>addr</i>. Class specification
+ <tt><font size=+1>CDATA</font></tt> searches only the global variable symbol table; class <tt><font size=+1>CTEXT</font></tt>
+ limits the search to the text symbol table. Class
+ specification <tt><font size=+1>CANY</font></tt> searches the text table first, then the global
+ table.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Findexsym</i>, <i>flookupsym</i>, and <i>ffindsym</i> are similar to <i>indexsym</i>, <i>lookupsym</i>,
+ and <i>findsym</i>, but operate only on the symbols from <i>hdr</i>. <i>Flookupsym</i>
+ and <i>ffindsym</i> return pointers to data stored in the <i>hdr</i>, which
+ must not be modified or freed.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Indexlsym</i>, <i>lookuplsym</i>, and <i>findlsym</i> are similar to <i>indexsym</i>, <i>lookupsym</i>,
+ and <i>findsym</i>, but operate on the smaller symbol table of parameters
+ and variables local to the function represented by symbol <i>s1</i>.
+
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Indexlsym</i> writes symbol information for the <i>n</i>th local symbol of
+ function <i>s1</i> to <i>s2</i>. Function parameters appear first in the ordering,
+ followed by local symbols.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Lookuplsym</i> writes symbol information for the symbol named <i>name</i>
+ in function <i>s1</i> to <i>s2</i>.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Findlsym</i> searches for a symbol local to the function <i>s1</i> whose
+ location is exactly <i>loc</i>, writing its symbol information to <i>s2</i>.
+ <i>Loc</i> is almost always an indirection through a frame pointer register;
+ the details vary from architecture to architecture.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Symoff</i> converts a location to a symbol reference. The string containing
+ that reference is of the form &#8216;name+offset&#8217;, where &#8216;name&#8217; is the
+ name of the nearest symbol with an address less than or equal
+ to the target address, and &#8216;offset&#8217; is the hexadecimal offset
+ beyond that symbol. If &#8216;offset&#8217; is zero, only the name of the
+ symbol is printed. If no symbol is found within 4096 bytes of
+ the address, the address is formatted as a hexadecimal address.
+ <i>Buf</i> is the address of a buffer of <i>n</i> bytes to receive the formatted
+ string. <i>Addr</i> is the address to be converted. <i>Type</i> is the type
+ code of the search space: <tt><font size=+1>CTEXT</font></tt>, <tt><font size=+1>CDATA</font></tt>, or <tt><font size=+1>CANY</font></tt>. <i>Symoff
+ </i>returns the length of the formatted string contained in <i>buf</i>.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Pc2file</i> searches the symbol table to find the file and line number
+ corresponding to the instruction at program counter <i>pc</i>. <i>File</i> is
+ the address of a buffer of <i>n</i> bytes to receive the file name. <i>Line</i>
+ receives the line number.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Pc2line</i> is like <i>pc2file</i> but neglects to return information about
+ the source file.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Fileline</i> is also like <i>pc2file</i>, but returns the file and line number
+ in the <i>n</i>-byte text buffer <i>buf</i>, formatted as &#8216;file:line&#8217;.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>File2pc</i> performs the opposite mapping: it stores in <i>pc</i> a text
+ address associated with line <i>line</i> in file <i>file</i>.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Line2pc</i> is similar: it converts a line number to an instruction
+ address, storing it in <i>pc</i>. Since a line number does not uniquely
+ identify an instruction (e.g., every source file has line 1),
+ <i>basepc</i> specifies a text address from which the search begins.
+ Usually this is the address of the first function in the file
+ of interest.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ <i>Fnbound</i> returns the start and end addresses of the function containing
+ the text address supplied as the first argument. The second argument
+ is an array of two unsigned longs; <i>fnbound</i> places the bounding
+ addresses of the function in the first and second elements of
+ this array. The start address is the address of the
+ first instruction of the function; the end address is the first
+ address beyond the end of the target function.
+ <table border=0 cellpadding=0 cellspacing=0><tr height=5><td></table>
+
+ All functions return 0 on success and &ndash;1 on error. When an error
+ occurs, a message describing it is stored in the system error
+ buffer where it is available via <i>errstr</i>.<br>
+
+</table>
+<p><font size=+1><b>SOURCE </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ <tt><font size=+1>/usr/local/plan9/src/libmach<br>
+ </font></tt>
+</table>
+<p><font size=+1><b>SEE ALSO </b></font><br>
+
+<table border=0 cellpadding=0 cellspacing=0><tr height=2><td><tr><td width=20><td>
+
+ <a href="../man3/mach.html"><i>mach</i>(3)</a>, <a href="../man3/mach-file.html"><i>mach-file</i>(3)</a>, <a href="../man3/mach-map.html"><i>mach-map</i>(3)</a><br>
+
+</table>
+
+<td width=20>
+<tr height=20><td>
+</table>
+<!-- TRAILER -->
+<table border=0 cellpadding=0 cellspacing=0 width=100%>
+<tr height=15><td width=10><td><td width=10>
+<tr><td><td>
+<center>
+<a href="../../"><img src="../../dist/spaceglenda100.png" alt="Space Glenda" border=1></a>
+</center>
+</table>
+<!-- TRAILER -->
+</body></html>