summaryrefslogtreecommitdiffstats
path: root/runtime/docs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/docs')
-rw-r--r--runtime/docs/footer.html3
-rw-r--r--runtime/docs/header.html6
-rw-r--r--runtime/docs/html/README-source.html65
-rw-r--r--runtime/docs/html/alloc_8h-source.html124
-rw-r--r--runtime/docs/html/annotated.html22
-rw-r--r--runtime/docs/html/copy_8c-source.html80
-rw-r--r--runtime/docs/html/dir_000000.html43
-rw-r--r--runtime/docs/html/dir_000001.html91
-rw-r--r--runtime/docs/html/dir_000002.html29
-rw-r--r--runtime/docs/html/dir_000003.html42
-rw-r--r--runtime/docs/html/dir_000004.html30
-rw-r--r--runtime/docs/html/dirs.html19
-rw-r--r--runtime/docs/html/dtr_8mod_8c-source.html59
-rw-r--r--runtime/docs/html/files.html41
-rw-r--r--runtime/docs/html/functions.html47
-rw-r--r--runtime/docs/html/functions_vars.html45
-rw-r--r--runtime/docs/html/globals.html96
-rw-r--r--runtime/docs/html/globals_defs.html27
-rw-r--r--runtime/docs/html/globals_func.html48
-rw-r--r--runtime/docs/html/globals_type.html13
-rw-r--r--runtime/docs/html/index.html30
-rw-r--r--runtime/docs/html/io_8c-source.html58
-rw-r--r--runtime/docs/html/kprobe__where__funct_8c-source.html90
-rw-r--r--runtime/docs/html/map_8c-source.html1499
-rw-r--r--runtime/docs/html/map_8c.html144
-rw-r--r--runtime/docs/html/map_8h-source.html286
-rw-r--r--runtime/docs/html/map_8h.html320
-rw-r--r--runtime/docs/html/pages.html13
-rw-r--r--runtime/docs/html/probes.html10
-rw-r--r--runtime/docs/html/probes_2README-source.html16
-rw-r--r--runtime/docs/html/probes_2shellsnoop_2README-source.html85
-rw-r--r--runtime/docs/html/probes_2tasklet_2README-source.html22
-rw-r--r--runtime/docs/html/probes_2test4_2README-source.html36
-rw-r--r--runtime/docs/html/probes_2where__func_2README-source.html38
-rw-r--r--runtime/docs/html/probes_8c-source.html64
-rw-r--r--runtime/docs/html/runtime_8h-source.html17
-rw-r--r--runtime/docs/html/shellsnoop_2dtr_8c-source.html138
-rw-r--r--runtime/docs/html/stack_8c-source.html45
-rw-r--r--runtime/docs/html/stp__tasklet_8c-source.html60
-rw-r--r--runtime/docs/html/structmap__node.html194
-rw-r--r--runtime/docs/html/structmap__root.html470
-rw-r--r--runtime/docs/html/structstat.html166
-rw-r--r--runtime/docs/html/test4_2dtr_8c-source.html117
-rw-r--r--runtime/docs/html/todo.html18
-rw-r--r--runtime/docs/html/unionkey__data.html78
45 files changed, 2541 insertions, 2403 deletions
diff --git a/runtime/docs/footer.html b/runtime/docs/footer.html
new file mode 100644
index 00000000..add9de59
--- /dev/null
+++ b/runtime/docs/footer.html
@@ -0,0 +1,3 @@
+<hr size="1"><address style="align: right;"><small>
+Generated on $datetime for $projectname.</small></body>
+</html>
diff --git a/runtime/docs/header.html b/runtime/docs/header.html
index f47a1c4f..9207e14e 100644
--- a/runtime/docs/header.html
+++ b/runtime/docs/header.html
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap Runtime Library</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
+<div style="background-color:#cc0000; color: #f5f5f5; width: 100%; font-size: 25px; padding: 10px; font-weight: bold; ">SystemTap
+</div>
diff --git a/runtime/docs/html/README-source.html b/runtime/docs/html/README-source.html
index 32a5d7a8..6110dbbb 100644
--- a/runtime/docs/html/README-source.html
+++ b/runtime/docs/html/README-source.html
@@ -1,14 +1,63 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: README Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>README</h1><a href="README.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @mainpage SystemTap Runtime Library</span>
+00002 <span class="comment"> *</span>
+00003 <span class="comment"> * @section intro_sec Introduction</span>
+00004 <span class="comment"> *</span>
+00005 <span class="comment"> * The SystemTap Runtime Library consists of all functions</span>
+00006 <span class="comment"> * and code fragments needed by the compiler/translator to</span>
+00007 <span class="comment"> * include in building a kernel module using kprobes.</span>
+00008 <span class="comment"> *</span>
+00009 <span class="comment"> * @section design_sec Design</span>
+00010 <span class="comment"> * @subsection impl_sec Implementation</span>
+00011 <span class="comment"> * The library is written in \c C and is really not a library but a collection of code</span>
+00012 <span class="comment"> * That can be conditionally included in a modules. It will probably become a library later.</span>
+00013 <span class="comment"> *</span>
+00014 <span class="comment"> * @subsection map_sec Maps (Associative Arrays)</span>
+00015 <span class="comment"> * Maps are implemented as hash lists. It is not expected that users will</span>
+00016 <span class="comment"> * attempt to collect so much data in kernel space that performance problems will require</span>
+00017 <span class="comment"> * more complex solutions such as AVL trees.</span>
+00018 <span class="comment"> *</span>
+00019 <span class="comment"> * Maps are created with _stp_map_new(). Each map can hold only one type of </span>
+00020 <span class="comment"> * data; int64, string, or statistics. Each element belonging to a map can have up to 2 keys</span>
+00021 <span class="comment"> * and a value. Implemented key types are strings and longs.</span>
+00022 <span class="comment"> * </span>
+00023 <span class="comment"> * To simplify the implementation, the functions to set the key and the functions to set the data are separated.</span>
+00024 <span class="comment"> * That means we need only 4 functions to set the key and 3 functions to set the value. </span>
+00025 <span class="comment"> *</span>
+00026 <span class="comment"> * For example:</span>
+00027 <span class="comment"> * @include map.c</span>
+00028 <span class="comment"></span>
+00029 <span class="comment"> * All elements have a default value of 0 (or NULL). Elements are only saved to the map when their value is set</span>
+00030 <span class="comment"> * to something nonzero. This means that querying for the existance of a key is inexpensive because</span>
+00031 <span class="comment"> * no element is created, just a hash table lookup.</span>
+00032 <span class="comment"> *</span>
+00033 <span class="comment"> * @subsection list_sec Lists</span>
+00034 <span class="comment"> * A list is a special map which has internally ascending long integer keys. Adding a value to</span>
+00035 <span class="comment"> * a list does not require setting a key first. Create a list with _stp_map_new(). Add to it</span>
+00036 <span class="comment"> * with _stp_list_add_str() and _stp_list_add_int64(). Clear it with _stp_list_clear().</span>
+00037 <span class="comment"> *</span>
+00038 <span class="comment"> * @section status_sec Status</span>
+00039 <span class="comment"> * @li Maps are implemented and tested. Histograms are not yet finished.</span>
+00040 <span class="comment"> * @li Copy_From_User functions are done.</span>
+00041 <span class="comment"> * @li If maps overflow or memory runs out for some reason, globals are set but nothing is done yet.</span>
+00042 <span class="comment"> * I expect to implement a function to tell the system to either ignore it or unload the module and quit.</span>
+00043 <span class="comment"> * @li Locking and per-cpu data are not yet implemented to be SMP-safe. This is not yet necessary because the</span>
+00044 <span class="comment"> * current kprobes implementation single-threads probes for us. </span>
+00045 <span class="comment"> *</span>
+00046 <span class="comment"> * @section probe_sec Example Probes</span>
+00047 <span class="comment"> * </span>
+00048 <span class="comment"> * Working sample probe code using the runtime is in runtime/probes.</span>
+00049 <span class="comment"> * &lt;a href="dir_000000.html"&gt; Browse probes.&lt;/a&gt;</span>
+00050 <span class="comment"> * </span>
+00051 <span class="comment"> * @section todo_sec ToDo </span>
+00052 <span class="comment"> * \link todo Click Here for Complete List \endlink</span>
+00053 <span class="comment"> */</span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/alloc_8h-source.html b/runtime/docs/html/alloc_8h-source.html
index 42be2b62..7d2a3310 100644
--- a/runtime/docs/html/alloc_8h-source.html
+++ b/runtime/docs/html/alloc_8h-source.html
@@ -1,53 +1,83 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: alloc.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>alloc.h</h1><a href="alloc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a><a class="code" href="alloc_8h.html#a8">00001</a> <span class="keyword">enum</span> <a class="code" href="alloc_8h.html#a8">errorcode</a> { <a class="code" href="alloc_8h.html#a8a1">ERR_NONE</a>=0, <a class="code" href="alloc_8h.html#a8a2">ERR_NO_MEM</a> };
-<a name="l00002"></a><a class="code" href="alloc_8h.html#a0">00002</a> <span class="keyword">enum</span> <a class="code" href="alloc_8h.html#a8">errorcode</a> <a class="code" href="alloc_8h.html#a0">_stp_error</a> = <a class="code" href="alloc_8h.html#a8a1">ERR_NONE</a>;
-00003
-<a name="l00012"></a><a class="code" href="alloc_8h.html#a3">00012</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> *<a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(size_t len)
-00013 {
-00014 <span class="keywordtype">void</span> *ptr = kmalloc(len, GFP_ATOMIC);
-00015 <span class="keywordflow">if</span> (ptr == NULL)
-00016 <a class="code" href="alloc_8h.html#a0">_stp_error</a> = <a class="code" href="alloc_8h.html#a8a2">ERR_NO_MEM</a>;
-00017 <span class="keywordflow">return</span> ptr;
-00018 }
-00019
-<a name="l00028"></a><a class="code" href="alloc_8h.html#a4">00028</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> *<a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(size_t len)
-00029 {
-00030 <span class="keywordtype">void</span> *ptr = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(len);
-00031 <span class="keywordflow">if</span> (ptr)
-00032 memset(ptr, 0, len);
-00033 <span class="keywordflow">return</span> ptr;
-00034 }
-00035
-<a name="l00043"></a><a class="code" href="alloc_8h.html#a5">00043</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> *<a class="code" href="alloc_8h.html#a5">_stp_valloc</a>(size_t len)
-00044 {
-00045 <span class="keywordtype">void</span> *ptr = vmalloc(len);
-00046 <span class="keywordflow">if</span> (ptr)
-00047 memset(ptr, 0, len);
-00048 <span class="keywordflow">else</span>
-00049 <a class="code" href="alloc_8h.html#a0">_stp_error</a> = <a class="code" href="alloc_8h.html#a8a2">ERR_NO_MEM</a>;
-00050 <span class="keywordflow">return</span> ptr;
-00051 }
-00052
-<a name="l00057"></a><a class="code" href="alloc_8h.html#a6">00057</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="alloc_8h.html#a6">_stp_free</a>(<span class="keywordtype">void</span> *ptr)
-00058 {
-00059 <span class="keywordflow">if</span> (ptr)
-00060 kfree(ptr);
-00061 }
-00062
-<a name="l00067"></a><a class="code" href="alloc_8h.html#a7">00067</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="alloc_8h.html#a7">_stp_vfree</a>(<span class="keywordtype">void</span> *ptr)
-00068 {
-00069 <span class="keywordflow">if</span> (ptr)
-00070 vfree(ptr);
-00071 }
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>alloc.h</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
+00002
+00003 <span class="keyword">enum</span> errorcode { ERR_NONE=0, ERR_NO_MEM };
+00004 <span class="keyword">enum</span> errorcode _stp_error = ERR_NONE;
+00005 <span class="comment"></span>
+00006 <span class="comment">/** Allocates memory within a probe.</span>
+00007 <span class="comment"> * This is used for small allocations from within a running</span>
+00008 <span class="comment"> * probe where the process cannot sleep. </span>
+00009 <span class="comment"> * @param len Number of bytes to allocate.</span>
+00010 <span class="comment"> * @return a valid pointer on success or NULL on failure.</span>
+00011 <span class="comment"> * @bug Currently uses kmalloc (GFP_ATOMIC).</span>
+00012 <span class="comment"> */</span>
+00013
+00014 <span class="keywordtype">void</span> *_stp_alloc(size_t len)
+00015 {
+00016 <span class="keywordtype">void</span> *ptr = kmalloc(len, GFP_ATOMIC);
+00017 <span class="keywordflow">if</span> (unlikely(ptr == NULL))
+00018 _stp_error = ERR_NO_MEM;
+00019 return ptr;
+00020 }
+00021 <span class="comment"></span>
+00022 <span class="comment">/** Allocates and clears memory within a probe.</span>
+00023 <span class="comment"> * This is used for small allocations from within a running</span>
+00024 <span class="comment"> * probe where the process cannot sleep. </span>
+00025 <span class="comment"> * @param len Number of bytes to allocate.</span>
+00026 <span class="comment"> * @return a valid pointer on success or NULL on failure.</span>
+00027 <span class="comment"> * @bug Currently uses kmalloc (GFP_ATOMIC).</span>
+00028 <span class="comment"> */</span>
+00029
+00030 <span class="keywordtype">void</span> *_stp_calloc(size_t len)
+00031 {
+00032 <span class="keywordtype">void</span> *ptr = _stp_alloc(len);
+00033 <span class="keywordflow">if</span> (likely(ptr))
+00034 memset(ptr, 0, len);
+00035 return ptr;
+00036 }
+00037 <span class="comment"></span>
+00038 <span class="comment">/** Allocates and clears memory outside a probe.</span>
+00039 <span class="comment"> * This is typically used in the module initialization to</span>
+00040 <span class="comment"> * allocate new maps, lists, etc.</span>
+00041 <span class="comment"> * @param len Number of bytes to allocate.</span>
+00042 <span class="comment"> * @return a valid pointer on success or NULL on failure.</span>
+00043 <span class="comment"> */</span>
+00044
+00045 <span class="keywordtype">void</span> *_stp_valloc(size_t len)
+00046 {
+00047 <span class="keywordtype">void</span> *ptr = vmalloc(len);
+00048 <span class="keywordflow">if</span> (likely(ptr))
+00049 memset(ptr, 0, len);
+00050 else
+00051 _stp_error = ERR_NO_MEM;
+00052 return ptr;
+00053 }
+00054 <span class="comment"></span>
+00055 <span class="comment">/** Frees memory allocated by _stp_alloc or _stp_calloc.</span>
+00056 <span class="comment"> * @param ptr pointer to memory to free</span>
+00057 <span class="comment"> */</span>
+00058
+00059 <span class="keywordtype">void</span> _stp_free(<span class="keywordtype">void</span> *ptr)
+00060 {
+00061 <span class="keywordflow">if</span> (likely(ptr))
+00062 kfree(ptr);
+00063 }
+00064 <span class="comment"></span>
+00065 <span class="comment">/** Frees memory allocated by _stp_valloc.</span>
+00066 <span class="comment"> * @param ptr pointer to memory to free</span>
+00067 <span class="comment"> */</span>
+00068
+00069 <span class="keywordtype">void</span> _stp_vfree(<span class="keywordtype">void</span> *ptr)
+00070 {
+00071 <span class="keywordflow">if</span> (likely(ptr))
+00072 vfree(ptr);
+00073 }
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/annotated.html b/runtime/docs/html/annotated.html
index cec81d58..d0cf4605 100644
--- a/runtime/docs/html/annotated.html
+++ b/runtime/docs/html/annotated.html
@@ -1,22 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Data Structures</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindexHL" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>SystemTap Data Structures</h1>Here are the data structures with brief descriptions:<table>
- <tr><td class="indexkey"><a class="el" href="unionkey__data.html">key_data</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structmap__node.html">map_node</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structmap__node__int64.html">map_node_int64</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structmap__node__stat.html">map_node_stat</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structmap__node__str.html">map_node_str</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structmap__root.html">map_root</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="structstat.html">stat</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="unionkey__data.html">key_data</a></td><td class="indexvalue">Keys are either longs or char * </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structmap__node.html">map_node</a></td><td class="indexvalue">All map nodes have the following structure </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structmap__root.html">map_root</a></td><td class="indexvalue">This structure contains all information about a map </td></tr>
+ <tr><td class="indexkey"><a class="el" href="structstat.html">stat</a></td><td class="indexvalue">Statistics are stored in this struct </td></tr>
</table>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/copy_8c-source.html b/runtime/docs/html/copy_8c-source.html
index 3d70030b..bab47938 100644
--- a/runtime/docs/html/copy_8c-source.html
+++ b/runtime/docs/html/copy_8c-source.html
@@ -1,12 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: copy.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>copy.c</h1><a href="copy_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="keywordtype">long</span> <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count);
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>copy.c</h1><div class="fragment"><pre class="fragment">00001 <span class="keywordtype">long</span> _stp_strncpy_from_user(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count);
00002 <span class="comment">//static long __stp_strncpy_from_user(char *dst, const char __user *src, long count);</span>
00003
00004 <span class="preprocessor">#if defined (__i386__)</span>
@@ -66,22 +65,61 @@
00058 <span class="preprocessor"> : "memory"); \</span>
00059 <span class="preprocessor">} while (0)</span>
00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
-00061 <span class="preprocessor"></span>
+00061 <span class="preprocessor"></span><span class="comment"></span>
+00062 <span class="comment">/** Copy a NULL-terminated string from userspace.</span>
+00063 <span class="comment"> * On success, returns the length of the string (not including the trailing</span>
+00064 <span class="comment"> * NULL).</span>
+00065 <span class="comment"> *</span>
+00066 <span class="comment"> * If access to userspace fails, returns -EFAULT (some data may have been</span>
+00067 <span class="comment"> * copied).</span>
+00068 <span class="comment"> * @param dst Destination address, in kernel space. This buffer must be at</span>
+00069 <span class="comment"> * least &lt;i&gt;count&lt;/i&gt; bytes long.</span>
+00070 <span class="comment"> * @param src Source address, in user space.</span>
+00071 <span class="comment"> * @param count Maximum number of bytes to copy, including the trailing NULL.</span>
+00072 <span class="comment"> * </span>
+00073 <span class="comment"> * If &lt;i&gt;count&lt;/i&gt; is smaller than the length of the string, copies </span>
+00074 <span class="comment"> * &lt;i&gt;count&lt;/i&gt; bytes and returns &lt;i&gt;count&lt;/i&gt;.</span>
+00075 <span class="comment"> */</span>
+00076
+00077
00078 <span class="keywordtype">long</span>
-<a name="l00079"></a><a class="code" href="copy_8c.html#a0">00079</a> <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count)
+00079 _stp_strncpy_from_user(<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">long</span> count)
00080 {
00081 <span class="keywordtype">long</span> res;
00082 __stp_strncpy_from_user(dst, src, count, res);
00083 <span class="keywordflow">return</span> res;
00084 }
-00085
+00085 <span class="comment"></span>
+00086 <span class="comment">/** Copy a block of data from user space.</span>
+00087 <span class="comment"> *</span>
+00088 <span class="comment"> * If some data could not be copied, this function will pad the copied</span>
+00089 <span class="comment"> * data to the requested size using zero bytes.</span>
+00090 <span class="comment"></span>
+00091 <span class="comment"> * @param dst Destination address, in kernel space.</span>
+00092 <span class="comment"> * @param src Source address, in user space.</span>
+00093 <span class="comment"> * @param count Number of bytes to copy.</span>
+00094 <span class="comment"> * @return number of bytes that could not be copied. On success, </span>
+00095 <span class="comment"> * this will be zero.</span>
+00096 <span class="comment"> *</span>
+00097 <span class="comment"> */</span>
+00098
00099 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keyword">inline</span>
-<a name="l00100"></a><a class="code" href="copy_8c.html#a1">00100</a> <a class="code" href="copy_8c.html#a1">_stp_copy_from_user</a> (<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count)
+00100 _stp_copy_from_user (<span class="keywordtype">char</span> *dst, <span class="keyword">const</span> <span class="keywordtype">char</span> __user *src, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> count)
00101 {
00102 <span class="keywordflow">return</span> __copy_from_user_inatomic(dst, src, count);
00103 }
-00104
-<a name="l00115"></a><a class="code" href="copy_8c.html#a2">00115</a> <span class="keywordtype">int</span> <a class="code" href="copy_8c.html#a2">_stp_copy_argv_from_user</a> (<a class="code" href="structmap__root.html">MAP</a> list, <span class="keywordtype">char</span> __user *__user *argv)
+00104 <span class="comment"></span>
+00105 <span class="comment">/** Copy an argv from user space to a List.</span>
+00106 <span class="comment"> *</span>
+00107 <span class="comment"> * @param list A list.</span>
+00108 <span class="comment"> * @param argv Source argv, in user space.</span>
+00109 <span class="comment"> * @return number of elements in &lt;i&gt;list&lt;/i&gt;</span>
+00110 <span class="comment"> *</span>
+00111 <span class="comment"> * @b Example:</span>
+00112 <span class="comment"> * @include argv.c</span>
+00113 <span class="comment"> */</span>
+00114
+00115 <span class="keywordtype">int</span> _stp_copy_argv_from_user (<a class="code" href="structmap__root.html">MAP</a> list, <span class="keywordtype">char</span> __user *__user *argv)
00116 {
00117 <span class="keywordtype">char</span> str[128];
00118 <span class="keywordtype">char</span> __user *vstr;
@@ -90,22 +128,20 @@
00121 <span class="keywordflow">if</span> (argv)
00122 argv++;
00123
-00124 <span class="keywordflow">while</span> (argv != NULL) {
+00124 while (argv != NULL) {
00125 <span class="keywordflow">if</span> (get_user (vstr, argv))
-00126 <span class="keywordflow">break</span>;
-00127
-00128 <span class="keywordflow">if</span> (vstr == NULL)
-00129 <span class="keywordflow">break</span>;
+00126 break;
+00127
+00128 if (vstr == NULL)
+00129 break;
00130
-00131 len = <a class="code" href="copy_8c.html#a0">_stp_strncpy_from_user</a>(str, vstr, 128);
+00131 len = _stp_strncpy_from_user(str, vstr, 128);
00132 str[len] = 0;
-00133 <a class="code" href="map_8c.html#a27">_stp_list_add_str</a> (list, str);
+00133 _stp_list_add_str (list, str);
00134 argv++;
00135 }
-00136 <span class="keywordflow">return</span> list-&gt;<a class="code" href="structmap__root.html#o2">num</a>;
+00136 return list-&gt;num;
00137 }
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/dir_000000.html b/runtime/docs/html/dir_000000.html
new file mode 100644
index 00000000..78bdc36c
--- /dev/null
+++ b/runtime/docs/html/dir_000000.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/ Directory Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a></div>
+<h1>probes Directory Reference</h1>This directory contains working example probes that demonstrate and test the runtime library.
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Directories</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">directory &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_000001.html">shellsnoop</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Snoops on what commands are being run by shells. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">directory &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_000002.html">tasklet</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sample probe in a tasklet. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">directory &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_000003.html">test4</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This example probe tracks file opens, reads and writes. <br></td></tr>
+
+<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">directory &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_000004.html">where_func</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is a silly little instrumentation routine to instrument functions entry by name. <br></td></tr>
+
+<p>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>README</b> <a href="probes_2README-source.html">[code]</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+This directory contains working example probes that demonstrate and test the runtime library.
+<p>
+They are tested on i386 and x86_64. <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dir_000001.html b/runtime/docs/html/dir_000001.html
new file mode 100644
index 00000000..b2802585
--- /dev/null
+++ b/runtime/docs/html/dir_000001.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/shellsnoop/ Directory Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">shellsnoop</a></div>
+<h1>shellsnoop Directory Reference</h1>Snoops on what commands are being run by shells.
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>dtr.c</b> <a href="shellsnoop_2dtr_8c-source.html">[code]</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>dtr.mod.c</b> <a href="dtr_8mod_8c-source.html">[code]</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>README</b> <a href="probes_2shellsnoop_2README-source.html">[code]</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Snoops on what commands are being run by shells.
+<p>
+This is a translation of on an old dtr probe. It demonstrates maps, lists, and how to use _stp_copy_argv_from_user() and _stp_strncpy_from_user().<p>
+Original dtr source:<p>
+<div class="fragment"><pre class="fragment">
+# shellsnoop.probe - snoop shell execution as it occurs.
+# clone of dtrace shellsnoop example
+
+global {
+ long @pids[long];
+}
+
+probe do_execve:entry {
+ char __user *vstr;
+ char str[256];
+ int len;
+
+ /* watch shells only */
+ /* FIXME: detect more shells, like csh, tcsh, zsh */
+
+ if (!strcmp(current-&gt;comm,"bash") || !strcmp(current-&gt;comm,"sh") || !strcmp(current-&gt;comm, "zsh")
+ || !strcmp(current-&gt;comm, "tcsh") || !strcmp(current-&gt;comm, "pdksh"))
+ {
+ dlog ("%d\t%d\t%d\t%s ", current-&gt;uid, current-&gt;pid, current-&gt;parent-&gt;pid, filename);
+ @pids[current-&gt;pid] = 1;
+
+ /* print out argv, ignoring argv[0] */
+ if (argv) argv++;
+ while (argv != NULL)
+ {
+ if (get_user (vstr, argv))
+ break;
+ if (!vstr)
+ break;
+ len = dtr_strncpy_from_user(str, vstr, 256);
+ str[len] = 0;
+ printk ("%s ", str);
+ argv++;
+ }
+ printk ("\n");
+ }
+}
+
+# use filp_open because copy_from_user not needed there
+probe filp_open:entry {
+ if (@pids[current-&gt;pid])
+ dlog ("%d\t%d\t%s\tO %s\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, filename);
+}
+
+probe sys_read:entry {
+ if (@pids[current-&gt;pid])
+ dlog ("%d\t%d\t%s\tR %d\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, fd);
+}
+
+probe sys_write:entry {
+ size_t len;
+ char str[256];
+ if (@pids[current-&gt;pid])
+ {
+ if (count &lt; 64) len = count;
+ else len = 64;
+ if (len = dtr_strncpy_from_user(str, buf, len)) {
+ str[len] = 0;
+ dlog ("%d\t%d\t%s\tW %s\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, str);
+ }
+ }
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dir_000002.html b/runtime/docs/html/dir_000002.html
new file mode 100644
index 00000000..7b82c65e
--- /dev/null
+++ b/runtime/docs/html/dir_000002.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/tasklet/ Directory Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000002.html">tasklet</a></div>
+<h1>tasklet Directory Reference</h1>Sample probe in a tasklet.
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>README</b> <a href="probes_2tasklet_2README-source.html">[code]</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>stp_tasklet.c</b> <a href="stp__tasklet_8c-source.html">[code]</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Sample probe in a tasklet.
+<p>
+Useful for interrupt context testing.<p>
+<div class="fragment"><pre class="fragment">
+&gt; ./build
+&gt; insmod stp_tasklet.ko
+&gt; rmmod stp_tasklet.ko
+</pre></div> <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dir_000003.html b/runtime/docs/html/dir_000003.html
new file mode 100644
index 00000000..3cb48158
--- /dev/null
+++ b/runtime/docs/html/dir_000003.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/test4/ Directory Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">test4</a></div>
+<h1>test4 Directory Reference</h1>This example probe tracks file opens, reads and writes.
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>dtr.c</b> <a href="test4_2dtr_8c-source.html">[code]</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>README</b> <a href="probes_2test4_2README-source.html">[code]</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+This example probe tracks file opens, reads and writes.
+<p>
+It demonstrates maps, stats, and iterators.<p>
+This is a translation of on an old dtr probe. Original source is <div class="fragment"><pre class="fragment">
+global {
+ long @opens[string];
+ sum @reads[string], @writes[string];
+}
+
+probe sys_open:entry {
+ @opens[current-&gt;comm]++;
+}
+
+probe sys_read:entry {
+ @reads[current-&gt;comm] &lt;&lt; count;
+}
+
+probe sys_write:entry {
+ @writes[current-&gt;comm] &lt;&lt; count;
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dir_000004.html b/runtime/docs/html/dir_000004.html
new file mode 100644
index 00000000..263e859d
--- /dev/null
+++ b/runtime/docs/html/dir_000004.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/where_func/ Directory Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000004.html">where_func</a></div>
+<h1>where_func Directory Reference</h1>This is a silly little instrumentation routine to instrument functions entry by name.
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Files</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>kprobe_where_funct.c</b> <a href="kprobe__where__funct_8c-source.html">[code]</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">file &nbsp;</td><td class="memItemRight" valign="bottom"><b>README</b> <a href="probes_2where__func_2README-source.html">[code]</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+This is a silly little instrumentation routine to instrument functions entry by name.
+<p>
+It makes use of the SystemTap runtime libraries to break down the number of times the function by caller.<p>
+It demonstrates kprobes, passing a module parameter, using the print buffer, and using _stp_print_symbol() to map the addresses back to locations in functions.<p>
+By default it instruments schedule().<p>
+The instrumentation module is built by having the kernel that is going to be instrumented currently on the machine and doing <div class="fragment"><pre class="fragment">./build
+</pre></div> The instrumentation is inserted as root with: <div class="fragment"><pre class="fragment">/sbin/insmod kprobe_funct_where.ko funct_name=function_name
+</pre></div> The instrumentation is removed as root with: <div class="fragment"><pre class="fragment">/sbin/rmmod kprobe_funct_where
+</pre></div> -Will Cohen <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dirs.html b/runtime/docs/html/dirs.html
new file mode 100644
index 00000000..4b3bdc57
--- /dev/null
+++ b/runtime/docs/html/dirs.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: Directory Hierarchy</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindexHL" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>SystemTap Directories</h1>This directory hierarchy is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="dir_000000.html">probes</a>
+<ul>
+<li><a class="el" href="dir_000001.html">shellsnoop</a>
+<li><a class="el" href="dir_000002.html">tasklet</a>
+<li><a class="el" href="dir_000003.html">test4</a>
+<li><a class="el" href="dir_000004.html">where_func</a>
+</ul>
+</ul>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/dtr_8mod_8c-source.html b/runtime/docs/html/dtr_8mod_8c-source.html
new file mode 100644
index 00000000..38f5967a
--- /dev/null
+++ b/runtime/docs/html/dtr_8mod_8c-source.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/shellsnoop/dtr.mod.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">shellsnoop</a></div>
+<h1>dtr.mod.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
+00002 <span class="preprocessor">#include &lt;linux/vermagic.h&gt;</span>
+00003 <span class="preprocessor">#include &lt;linux/compiler.h&gt;</span>
+00004
+00005 MODULE_INFO(vermagic, VERMAGIC_STRING);
+00006
+00007 <span class="preprocessor">#undef unix</span>
+00008 <span class="preprocessor"></span><span class="keyword">struct </span>module __this_module
+00009 __attribute__((section(".gnu.linkonce.this_module"))) = {
+00010 .name = __stringify(KBUILD_MODNAME),
+00011 .init = init_module,
+00012 <span class="preprocessor">#ifdef CONFIG_MODULE_UNLOAD</span>
+00013 <span class="preprocessor"></span> .exit = cleanup_module,
+00014 <span class="preprocessor">#endif</span>
+00015 <span class="preprocessor"></span>};
+00016
+00017 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>modversion_info ____versions[]
+00018 __attribute_used__
+00019 __attribute__((section("__versions"))) = {
+00020 { 0x506abef7, <span class="stringliteral">"struct_module"</span> },
+00021 { 0x1b9aca3f, <span class="stringliteral">"jprobe_return"</span> },
+00022 { 0x45e5f47f, <span class="stringliteral">"register_kprobe"</span> },
+00023 { 0x1e736243, <span class="stringliteral">"unregister_kprobe"</span> },
+00024 { 0xdd03a51e, <span class="stringliteral">"register_jprobe"</span> },
+00025 { 0x49a83d3a, <span class="stringliteral">"unregister_jprobe"</span> },
+00026 { 0xaa27f890, <span class="stringliteral">"__get_user_8"</span> },
+00027 { 0x21e5679c, <span class="stringliteral">"copy_user_generic"</span> },
+00028 { 0x3fa03a97, <span class="stringliteral">"memset"</span> },
+00029 { 0xc16fe12d, <span class="stringliteral">"__memcpy"</span> },
+00030 { 0xe914e41e, <span class="stringliteral">"strcpy"</span> },
+00031 { 0xe2d5255a, <span class="stringliteral">"strcmp"</span> },
+00032 { 0xe3b0192b, <span class="stringliteral">"vscnprintf"</span> },
+00033 { 0x8e3c9cc3, <span class="stringliteral">"vprintk"</span> },
+00034 { 0xdd132261, <span class="stringliteral">"printk"</span> },
+00035 { 0x2fd1d81c, <span class="stringliteral">"vfree"</span> },
+00036 { 0x37a0cba, <span class="stringliteral">"kfree"</span> },
+00037 { 0xd6ee688f, <span class="stringliteral">"vmalloc"</span> },
+00038 { 0x8ce16b3f, <span class="stringliteral">"__kmalloc"</span> },
+00039 };
+00040
+00041 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> __module_depends[]
+00042 __attribute_used__
+00043 __attribute__((section(<span class="stringliteral">".modinfo"</span>))) =
+00044 <span class="stringliteral">"depends="</span>;
+00045
+00046
+00047 MODULE_INFO(srcversion, <span class="stringliteral">"D6A3BE8A54CB181A59924B3"</span>);
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/files.html b/runtime/docs/html/files.html
index 61d4d78f..ecbc299e 100644
--- a/runtime/docs/html/files.html
+++ b/runtime/docs/html/files.html
@@ -1,24 +1,31 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: File Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>SystemTap File List</h1>Here is a list of all files with brief descriptions:<table>
- <tr><td class="indexkey"><a class="el" href="alloc_8h.html">alloc.h</a> <a href="alloc_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="copy_8c.html">copy.c</a> <a href="copy_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="io_8c.html">io.c</a> <a href="io_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="map_8c.html">map.c</a> <a href="map_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="map_8h.html">map.h</a> <a href="map_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="probes_8c.html">probes.c</a> <a href="probes_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="README.html">README</a> <a href="README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="runtime_8h.html">runtime.h</a> <a href="runtime_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
- <tr><td class="indexkey"><a class="el" href="stack_8c.html">stack.c</a> <a href="stack_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindexHL" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>SystemTap File List</h1>Here is a list of all documented files with brief descriptions:<table>
+ <tr><td class="indexkey"><b>alloc.h</b> <a href="alloc_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>copy.c</b> <a href="copy_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>io.c</b> <a href="io_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="map_8c.html">map.c</a> <a href="map_8c-source.html">[code]</a></td><td class="indexvalue">Implements maps (associative arrays) and lists </td></tr>
+ <tr><td class="indexkey"><a class="el" href="map_8h.html">map.h</a> <a href="map_8h-source.html">[code]</a></td><td class="indexvalue">Header file for maps and lists </td></tr>
+ <tr><td class="indexkey"><b>probes.c</b> <a href="probes_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>README</b> <a href="README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>runtime.h</b> <a href="runtime_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><b>stack.c</b> <a href="stack_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/<b>README</b> <a href="probes_2README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/shellsnoop/<b>dtr.c</b> <a href="shellsnoop_2dtr_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/shellsnoop/<b>dtr.mod.c</b> <a href="dtr_8mod_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/shellsnoop/<b>README</b> <a href="probes_2shellsnoop_2README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/tasklet/<b>README</b> <a href="probes_2tasklet_2README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/tasklet/<b>stp_tasklet.c</b> <a href="stp__tasklet_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/test4/<b>dtr.c</b> <a href="test4_2dtr_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/test4/<b>README</b> <a href="probes_2test4_2README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/where_func/<b>kprobe_where_funct.c</b> <a href="kprobe__where__funct_8c-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey">probes/where_func/<b>README</b> <a href="probes_2where__func_2README-source.html">[code]</a></td><td class="indexvalue"></td></tr>
</table>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/functions.html b/runtime/docs/html/functions.html
index 57e3e3fa..b7efe33e 100644
--- a/runtime/docs/html/functions.html
+++ b/runtime/docs/html/functions.html
@@ -1,48 +1,17 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Data Fields</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
<p>
-Here is a list of all struct and union fields with links to the structures/unions they belong to:<ul>
-<li>c_key1
-: <a class="el" href="structmap__root.html#o11">map_root</a><li>c_key1type
-: <a class="el" href="structmap__root.html#o8">map_root</a><li>c_key2
-: <a class="el" href="structmap__root.html#o12">map_root</a><li>c_key2type
-: <a class="el" href="structmap__root.html#o9">map_root</a><li>c_keyhead
-: <a class="el" href="structmap__root.html#o10">map_root</a><li>count
-: <a class="el" href="structstat.html#o0">stat</a><li>create
-: <a class="el" href="structmap__root.html#o7">map_root</a><li>hashes
-: <a class="el" href="structmap__root.html#o13">map_root</a><li>head
-: <a class="el" href="structmap__root.html#o4">map_root</a><li>histogram
-: <a class="el" href="structstat.html#o4">stat</a><li>hnode
-: <a class="el" href="structmap__node.html#o1">map_node</a><li>key
-: <a class="el" href="structmap__root.html#o6">map_root</a><li>key1
-: <a class="el" href="structmap__node.html#o2">map_node</a><li>key1type
-: <a class="el" href="structmap__node.html#o4">map_node</a><li>key2
-: <a class="el" href="structmap__node.html#o3">map_node</a><li>key2type
-: <a class="el" href="structmap__node.html#o5">map_node</a><li>lnode
-: <a class="el" href="structmap__node.html#o0">map_node</a><li>max
-: <a class="el" href="structstat.html#o3">stat</a><li>maxnum
-: <a class="el" href="structmap__root.html#o1">map_root</a><li>membuf
-: <a class="el" href="structmap__root.html#o14">map_root</a><li>min
-: <a class="el" href="structstat.html#o2">stat</a><li>n
-: <a class="el" href="structmap__node__stat.html#o0">map_node_stat</a>, <a class="el" href="structmap__node__str.html#o0">map_node_str</a>, <a class="el" href="structmap__node__int64.html#o0">map_node_int64</a><li>no_wrap
-: <a class="el" href="structmap__root.html#o3">map_root</a><li>num
-: <a class="el" href="structmap__root.html#o2">map_root</a><li>pool
-: <a class="el" href="structmap__root.html#o5">map_root</a><li>stats
-: <a class="el" href="structmap__node__stat.html#o1">map_node_stat</a><li>str
-: <a class="el" href="structmap__node__str.html#o1">map_node_str</a>, <a class="el" href="unionkey__data.html#o1">key_data</a><li>sum
-: <a class="el" href="structstat.html#o1">stat</a><li>type
-: <a class="el" href="structmap__root.html#o0">map_root</a><li>val
-: <a class="el" href="structmap__node__int64.html#o1">map_node_int64</a>, <a class="el" href="unionkey__data.html#o0">key_data</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:<ul>
+<li>maxnum
+: <a class="el" href="structmap__root.html#o1">map_root</a><li>num
+: <a class="el" href="structmap__root.html#o2">map_root</a></ul>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/functions_vars.html b/runtime/docs/html/functions_vars.html
index 9b26f053..d70b21ef 100644
--- a/runtime/docs/html/functions_vars.html
+++ b/runtime/docs/html/functions_vars.html
@@ -1,48 +1,17 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Data Fields - Variables</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_vars.html">Variables</a></div>
<p>
<ul>
-<li>c_key1
-: <a class="el" href="structmap__root.html#o11">map_root</a><li>c_key1type
-: <a class="el" href="structmap__root.html#o8">map_root</a><li>c_key2
-: <a class="el" href="structmap__root.html#o12">map_root</a><li>c_key2type
-: <a class="el" href="structmap__root.html#o9">map_root</a><li>c_keyhead
-: <a class="el" href="structmap__root.html#o10">map_root</a><li>count
-: <a class="el" href="structstat.html#o0">stat</a><li>create
-: <a class="el" href="structmap__root.html#o7">map_root</a><li>hashes
-: <a class="el" href="structmap__root.html#o13">map_root</a><li>head
-: <a class="el" href="structmap__root.html#o4">map_root</a><li>histogram
-: <a class="el" href="structstat.html#o4">stat</a><li>hnode
-: <a class="el" href="structmap__node.html#o1">map_node</a><li>key
-: <a class="el" href="structmap__root.html#o6">map_root</a><li>key1
-: <a class="el" href="structmap__node.html#o2">map_node</a><li>key1type
-: <a class="el" href="structmap__node.html#o4">map_node</a><li>key2
-: <a class="el" href="structmap__node.html#o3">map_node</a><li>key2type
-: <a class="el" href="structmap__node.html#o5">map_node</a><li>lnode
-: <a class="el" href="structmap__node.html#o0">map_node</a><li>max
-: <a class="el" href="structstat.html#o3">stat</a><li>maxnum
-: <a class="el" href="structmap__root.html#o1">map_root</a><li>membuf
-: <a class="el" href="structmap__root.html#o14">map_root</a><li>min
-: <a class="el" href="structstat.html#o2">stat</a><li>n
-: <a class="el" href="structmap__node__stat.html#o0">map_node_stat</a>, <a class="el" href="structmap__node__str.html#o0">map_node_str</a>, <a class="el" href="structmap__node__int64.html#o0">map_node_int64</a><li>no_wrap
-: <a class="el" href="structmap__root.html#o3">map_root</a><li>num
-: <a class="el" href="structmap__root.html#o2">map_root</a><li>pool
-: <a class="el" href="structmap__root.html#o5">map_root</a><li>stats
-: <a class="el" href="structmap__node__stat.html#o1">map_node_stat</a><li>str
-: <a class="el" href="structmap__node__str.html#o1">map_node_str</a>, <a class="el" href="unionkey__data.html#o1">key_data</a><li>sum
-: <a class="el" href="structstat.html#o1">stat</a><li>type
-: <a class="el" href="structmap__root.html#o0">map_root</a><li>val
-: <a class="el" href="structmap__node__int64.html#o1">map_node_int64</a>, <a class="el" href="unionkey__data.html#o0">key_data</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<li>maxnum
+: <a class="el" href="structmap__root.html#o1">map_root</a><li>num
+: <a class="el" href="structmap__root.html#o2">map_root</a></ul>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/globals.html b/runtime/docs/html/globals.html
index 8e03810f..3e4cb61e 100644
--- a/runtime/docs/html/globals.html
+++ b/runtime/docs/html/globals.html
@@ -1,27 +1,15 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Globals</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<div class="qindex"><a class="qindexHL" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-<div class="qindex"><a class="qindex" href="#index__">_</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_e">e</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_k">k</a> | <a class="qindex" href="#index_l">l</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_p">p</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_v">v</a></div>
-
-<p>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="qindex"><a class="qindexHL" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
<p>
-Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
-<li>__kernel_text_address()
-: <a class="el" href="stack_8c.html#a1">stack.c</a><li>_stp_alloc()
-: <a class="el" href="alloc_8h.html#a3">alloc.h</a><li>_stp_calloc()
-: <a class="el" href="alloc_8h.html#a4">alloc.h</a><li>_stp_copy_argv_from_user()
-: <a class="el" href="copy_8c.html#a2">copy.c</a><li>_stp_copy_from_user()
-: <a class="el" href="copy_8c.html#a1">copy.c</a><li>_stp_error
-: <a class="el" href="alloc_8h.html#a0">alloc.h</a><li>_stp_free()
-: <a class="el" href="alloc_8h.html#a6">alloc.h</a><li>_stp_list_add
-: <a class="el" href="map_8h.html#a7">map.h</a><li>_stp_list_add_int64()
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:<ul>
+<li>_stp_list_add_int64()
: <a class="el" href="map_8c.html#a28">map.c</a><li>_stp_list_add_str()
: <a class="el" href="map_8c.html#a27">map.c</a><li>_stp_list_clear()
: <a class="el" href="map_8c.html#a26">map.c</a><li>_stp_list_new()
@@ -32,9 +20,7 @@ Here is a list of all functions, variables, defines, enums, and typedefs with li
: <a class="el" href="map_8c.html#a19">map.c</a><li>_stp_map_get_stat()
: <a class="el" href="map_8c.html#a23">map.c</a><li>_stp_map_get_str()
: <a class="el" href="map_8c.html#a21">map.c</a><li>_stp_map_iter()
-: <a class="el" href="map_8c.html#a7">map.c</a><li>_stp_map_key
-: <a class="el" href="map_8h.html#a5">map.h</a><li>_stp_map_key2
-: <a class="el" href="map_8h.html#a4">map.h</a><li>_stp_map_key_del()
+: <a class="el" href="map_8c.html#a7">map.c</a><li>_stp_map_key_del()
: <a class="el" href="map_8c.html#a5">map.c</a><li>_stp_map_key_long()
: <a class="el" href="map_8c.html#a14">map.c</a><li>_stp_map_key_long_long()
: <a class="el" href="map_8c.html#a9">map.c</a><li>_stp_map_key_long_str()
@@ -42,74 +28,14 @@ Here is a list of all functions, variables, defines, enums, and typedefs with li
: <a class="el" href="map_8c.html#a13">map.c</a><li>_stp_map_key_str_long()
: <a class="el" href="map_8c.html#a11">map.c</a><li>_stp_map_key_str_str()
: <a class="el" href="map_8c.html#a10">map.c</a><li>_stp_map_new()
-: <a class="el" href="map_8c.html#a3">map.c</a><li>_stp_map_set
-: <a class="el" href="map_8h.html#a6">map.h</a><li>_stp_map_set_int64()
+: <a class="el" href="map_8c.html#a3">map.c</a><li>_stp_map_set_int64()
: <a class="el" href="map_8c.html#a17">map.c</a><li>_stp_map_set_stat()
: <a class="el" href="map_8c.html#a22">map.c</a><li>_stp_map_set_str()
: <a class="el" href="map_8c.html#a20">map.c</a><li>_stp_map_start()
: <a class="el" href="map_8c.html#a6">map.c</a><li>_stp_map_stat_add()
-: <a class="el" href="map_8c.html#a24">map.c</a><li>_stp_print_buf()
-: <a class="el" href="io_8c.html#a5">io.c</a><li>_stp_print_buf_init()
-: <a class="el" href="io_8c.html#a6">io.c</a><li>_stp_print_symbol()
-: <a class="el" href="io_8c.html#a7">io.c</a><li>_stp_register_jprobes()
-: <a class="el" href="probes_8c.html#a2">probes.c</a><li>_stp_register_kprobes()
-: <a class="el" href="probes_8c.html#a4">probes.c</a><li>_stp_strncpy_from_user()
-: <a class="el" href="copy_8c.html#a0">copy.c</a><li>_stp_unregister_jprobes()
-: <a class="el" href="probes_8c.html#a1">probes.c</a><li>_stp_unregister_kprobes()
-: <a class="el" href="probes_8c.html#a3">probes.c</a><li>_stp_valloc()
-: <a class="el" href="alloc_8h.html#a5">alloc.h</a><li>_stp_vfree()
-: <a class="el" href="alloc_8h.html#a7">alloc.h</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>cur_ret_addr()
-: <a class="el" href="io_8c.html#a8">io.c</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>dbug
-: <a class="el" href="runtime_8h.html#a0">runtime.h</a><li>dlog()
-: <a class="el" href="io_8c.html#a4">io.c</a><li>dump_stack()
-: <a class="el" href="stack_8c.html#a4">stack.c</a></ul>
-<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
-<li>END
-: <a class="el" href="map_8h.html#a19a17">map.h</a><li>ERR_NO_MEM
-: <a class="el" href="alloc_8h.html#a8a2">alloc.h</a><li>ERR_NONE
-: <a class="el" href="alloc_8h.html#a8a1">alloc.h</a><li>errorcode
-: <a class="el" href="alloc_8h.html#a8">alloc.h</a></ul>
-<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
-<li>foreach
-: <a class="el" href="map_8h.html#a8">map.h</a></ul>
-<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
-<li>INT64
-: <a class="el" href="map_8h.html#a19a14">map.h</a></ul>
-<h3><a class="anchor" name="index_k">- k -</a></h3><ul>
-<li>key1int
-: <a class="el" href="map_8h.html#a2">map.h</a><li>key1str
-: <a class="el" href="map_8h.html#a0">map.h</a><li>key2int
-: <a class="el" href="map_8h.html#a3">map.h</a><li>key2str
-: <a class="el" href="map_8h.html#a1">map.h</a><li>keytype
-: <a class="el" href="map_8h.html#a18">map.h</a></ul>
-<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
-<li>LONG
-: <a class="el" href="map_8h.html#a18a12">map.h</a></ul>
-<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
-<li>MAP
+: <a class="el" href="map_8c.html#a24">map.c</a><li>foreach
+: <a class="el" href="map_8h.html#a8">map.h</a><li>MAP
: <a class="el" href="map_8h.html#a10">map.h</a></ul>
-<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
-<li>NONE
-: <a class="el" href="map_8h.html#a18a11">map.h</a></ul>
-<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
-<li>packed
-: <a class="el" href="map_8h.html#a9">map.h</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>show_trace()
-: <a class="el" href="stack_8c.html#a3">stack.c</a><li>STAT
-: <a class="el" href="map_8h.html#a19a15">map.h</a><li>STP_BUF_LEN
-: <a class="el" href="io_8c.html#a0">io.c</a><li>STR
-: <a class="el" href="map_8h.html#a18a13">map.h</a><li>STRING
-: <a class="el" href="map_8h.html#a19a16">map.h</a></ul>
-<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
-<li>valtype
-: <a class="el" href="map_8h.html#a19">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/globals_defs.html b/runtime/docs/html/globals_defs.html
index 5f1ecf34..944fec49 100644
--- a/runtime/docs/html/globals_defs.html
+++ b/runtime/docs/html/globals_defs.html
@@ -1,29 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Globals - Defines</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindexHL" href="globals_defs.html">Defines</a></div>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindexHL" href="globals_defs.html">Defines</a></div>
<p>
<ul>
-<li>_stp_list_add
-: <a class="el" href="map_8h.html#a7">map.h</a><li>_stp_map_key
-: <a class="el" href="map_8h.html#a5">map.h</a><li>_stp_map_key2
-: <a class="el" href="map_8h.html#a4">map.h</a><li>_stp_map_set
-: <a class="el" href="map_8h.html#a6">map.h</a><li>dbug
-: <a class="el" href="runtime_8h.html#a0">runtime.h</a><li>foreach
-: <a class="el" href="map_8h.html#a8">map.h</a><li>key1int
-: <a class="el" href="map_8h.html#a2">map.h</a><li>key1str
-: <a class="el" href="map_8h.html#a0">map.h</a><li>key2int
-: <a class="el" href="map_8h.html#a3">map.h</a><li>key2str
-: <a class="el" href="map_8h.html#a1">map.h</a><li>STP_BUF_LEN
-: <a class="el" href="io_8c.html#a0">io.c</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<li>foreach
+: <a class="el" href="map_8h.html#a8">map.h</a></ul>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/globals_func.html b/runtime/docs/html/globals_func.html
index c1cde956..02c03dcb 100644
--- a/runtime/docs/html/globals_func.html
+++ b/runtime/docs/html/globals_func.html
@@ -1,25 +1,15 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Globals - Functions</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
-<div class="qindex"><a class="qindex" href="#index__">_</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_s">s</a></div>
-
-<p>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindexHL" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
<p>
-<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
-<li>__kernel_text_address()
-: <a class="el" href="stack_8c.html#a1">stack.c</a><li>_stp_alloc()
-: <a class="el" href="alloc_8h.html#a3">alloc.h</a><li>_stp_calloc()
-: <a class="el" href="alloc_8h.html#a4">alloc.h</a><li>_stp_copy_argv_from_user()
-: <a class="el" href="copy_8c.html#a2">copy.c</a><li>_stp_copy_from_user()
-: <a class="el" href="copy_8c.html#a1">copy.c</a><li>_stp_free()
-: <a class="el" href="alloc_8h.html#a6">alloc.h</a><li>_stp_list_add_int64()
+<ul>
+<li>_stp_list_add_int64()
: <a class="el" href="map_8c.html#a28">map.c</a><li>_stp_list_add_str()
: <a class="el" href="map_8c.html#a27">map.c</a><li>_stp_list_clear()
: <a class="el" href="map_8c.html#a26">map.c</a><li>_stp_list_new()
@@ -43,29 +33,7 @@
: <a class="el" href="map_8c.html#a22">map.c</a><li>_stp_map_set_str()
: <a class="el" href="map_8c.html#a20">map.c</a><li>_stp_map_start()
: <a class="el" href="map_8c.html#a6">map.c</a><li>_stp_map_stat_add()
-: <a class="el" href="map_8c.html#a24">map.c</a><li>_stp_print_buf()
-: <a class="el" href="io_8c.html#a5">io.c</a><li>_stp_print_buf_init()
-: <a class="el" href="io_8c.html#a6">io.c</a><li>_stp_print_symbol()
-: <a class="el" href="io_8c.html#a7">io.c</a><li>_stp_register_jprobes()
-: <a class="el" href="probes_8c.html#a2">probes.c</a><li>_stp_register_kprobes()
-: <a class="el" href="probes_8c.html#a4">probes.c</a><li>_stp_strncpy_from_user()
-: <a class="el" href="copy_8c.html#a0">copy.c</a><li>_stp_unregister_jprobes()
-: <a class="el" href="probes_8c.html#a1">probes.c</a><li>_stp_unregister_kprobes()
-: <a class="el" href="probes_8c.html#a3">probes.c</a><li>_stp_valloc()
-: <a class="el" href="alloc_8h.html#a5">alloc.h</a><li>_stp_vfree()
-: <a class="el" href="alloc_8h.html#a7">alloc.h</a></ul>
-<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
-<li>cur_ret_addr()
-: <a class="el" href="io_8c.html#a8">io.c</a></ul>
-<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
-<li>dlog()
-: <a class="el" href="io_8c.html#a4">io.c</a><li>dump_stack()
-: <a class="el" href="stack_8c.html#a4">stack.c</a></ul>
-<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
-<li>show_trace()
-: <a class="el" href="stack_8c.html#a3">stack.c</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+: <a class="el" href="map_8c.html#a24">map.c</a></ul>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/globals_type.html b/runtime/docs/html/globals_type.html
index 69817e46..7c2d40d7 100644
--- a/runtime/docs/html/globals_type.html
+++ b/runtime/docs/html/globals_type.html
@@ -1,19 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Globals - Typedefs</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_vars.html">Variables</a> | <a class="qindexHL" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration&nbsp;values</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindexHL" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="qindex"><a class="qindex" href="globals.html">All</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindexHL" href="globals_type.html">Typedefs</a> | <a class="qindex" href="globals_defs.html">Defines</a></div>
<p>
<ul>
<li>MAP
: <a class="el" href="map_8h.html#a10">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/index.html b/runtime/docs/html/index.html
index dd4edd27..bae6d763 100644
--- a/runtime/docs/html/index.html
+++ b/runtime/docs/html/index.html
@@ -3,16 +3,17 @@
<title>SystemTap: SystemTap Runtime Library</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindexHL" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>SystemTap Runtime Library </h1>
<p>
<h3 align="center">0.1 </h3><h2><a class="anchor" name="intro_sec">
Introduction</a></h2>
The SystemTap Runtime Library consists of all functions and code fragments needed by the compiler/translator to include in building a kernel module using kprobes.<h2><a class="anchor" name="design_sec">
Design</a></h2>
-<h3><a class="anchor" name="map_sec">
+<h3><a class="anchor" name="impl_sec">
+Implementation</a></h3>
+The library is written in <code>C</code> and is really not a library but a collection of code That can be conditionally included in a modules. It will probably become a library later.<h3><a class="anchor" name="map_sec">
Maps (Associative Arrays)</a></h3>
Maps are implemented as hash lists. It is not expected that users will attempt to collect so much data in kernel space that performance problems will require more complex solutions such as AVL trees.<p>
Maps are created with <a class="el" href="map_8c.html#a3">_stp_map_new()</a>. Each map can hold only one type of data; int64, string, or statistics. Each element belonging to a map can have up to 2 keys and a value. Implemented key types are strings and longs.<p>
@@ -25,17 +26,20 @@ For example: <div class="fragment"><pre class="fragment">
map_key_str (mymap, <span class="stringliteral">"birth year"</span>);
map_set_int64 (mymap, 2000);
</pre></div><p>
-All elements have a default value of 0 (or NULL). Elements are only saved to the map when their value is set to something nonzero. This means that querying for the existance of a key is inexpensive because no element is created, just a hash table lookup.<p>
-A list is a special map which has internally ascending long integer keys. Adding a value to a list does not require setting a key first. See <a class="el" href="map_8c.html#a27">_stp_list_add_str()</a> and <a class="el" href="map_8c.html#a28">_stp_list_add_int64()</a>.<h2><a class="anchor" name="status_sec">
+All elements have a default value of 0 (or NULL). Elements are only saved to the map when their value is set to something nonzero. This means that querying for the existance of a key is inexpensive because no element is created, just a hash table lookup.<h3><a class="anchor" name="list_sec">
+Lists</a></h3>
+A list is a special map which has internally ascending long integer keys. Adding a value to a list does not require setting a key first. Create a list with <a class="el" href="map_8c.html#a3">_stp_map_new()</a>. Add to it with <a class="el" href="map_8c.html#a27">_stp_list_add_str()</a> and <a class="el" href="map_8c.html#a28">_stp_list_add_int64()</a>. Clear it with <a class="el" href="map_8c.html#a26">_stp_list_clear()</a>.<h2><a class="anchor" name="status_sec">
Status</a></h2>
-Maps are implemented and tested. Histograms are not yet finished.<p>
-Copy_From_User functions are done.<p>
-If maps overflow or memory runs out for some reason, globals are set but nothing is done yet. I expect to implement a function to tell the system to either ignore it or unload the module and quit.<h2><a class="anchor" name="probe_sec">
+<ul>
+<li>Maps are implemented and tested. Histograms are not yet finished. </li>
+<li>Copy_From_User functions are done. </li>
+<li>If maps overflow or memory runs out for some reason, globals are set but nothing is done yet. I expect to implement a function to tell the system to either ignore it or unload the module and quit. </li>
+<li>Locking and per-cpu data are not yet implemented to be SMP-safe. This is not yet necessary because the current kprobes implementation single-threads probes for us.</li>
+</ul>
+<h2><a class="anchor" name="probe_sec">
Example Probes</a></h2>
-Working sample probe code using the runtime is in runtime/probes.<h2><a class="anchor" name="todo_sec">
+Working sample probe code using the runtime is in runtime/probes. <a href="dir_000000.html">Browse probes.</a><h2><a class="anchor" name="todo_sec">
ToDo</a></h2>
-<a class="el" href="todo.html">Click Here for Complete List </a> The Runtime Library is not actually a library yet. It is just a collection of functions included in the probe boilerplate. Maybe it should stay that way to allow the translator more flexibility in what is included. <hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<a class="el" href="todo.html">Click Here for Complete List </a> <hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/io_8c-source.html b/runtime/docs/html/io_8c-source.html
index a152c946..246f36d8 100644
--- a/runtime/docs/html/io_8c-source.html
+++ b/runtime/docs/html/io_8c-source.html
@@ -1,13 +1,21 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: io.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>io.c</h1><a href="io_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001
-<a name="l00011"></a><a class="code" href="io_8c.html#a4">00011</a> <span class="keywordtype">void</span> <a class="code" href="io_8c.html#a4">dlog</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>io.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** Logs data.</span>
+00002 <span class="comment"> * This function is compatible with printk. In fact it currently</span>
+00003 <span class="comment"> * sends all output to vprintk, after sending "STP: ". This allows</span>
+00004 <span class="comment"> * us to easily detect SystemTap output in the log file.</span>
+00005 <span class="comment"> *</span>
+00006 <span class="comment"> * @param fmt A variable number of args.</span>
+00007 <span class="comment"> * @bug Lines are limited in length by printk buffer.</span>
+00008 <span class="comment"> * @todo Needs replaced with something much faster that does not</span>
+00009 <span class="comment"> * use the system log.</span>
+00010 <span class="comment"> */</span>
+00011 <span class="keywordtype">void</span> dlog (<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
00012 {
00013 va_list args;
00014 printk(<span class="stringliteral">"STP: "</span>);
@@ -23,17 +31,17 @@
00024 <span class="keywordtype">char</span> **modname, <span class="keywordtype">char</span> *namebuf)=(<span class="keywordtype">void</span> *)KALLSYMS_LOOKUP;
00025
00026
-<a name="l00027"></a><a class="code" href="io_8c.html#a0">00027</a> <span class="preprocessor">#define STP_BUF_LEN 8191</span>
+00027 <span class="preprocessor">#define STP_BUF_LEN 8191</span>
00028 <span class="preprocessor"></span>
00029 <span class="comment">/* FIXME. These need to be per-cpu */</span>
-00030 <span class="keyword">static</span> <span class="keywordtype">char</span> _stp_pbuf[<a class="code" href="io_8c.html#a0">STP_BUF_LEN</a>+1];
-00031 <span class="keyword">static</span> <span class="keywordtype">int</span> _stp_pbuf_len = <a class="code" href="io_8c.html#a0">STP_BUF_LEN</a>;
+00030 <span class="keyword">static</span> <span class="keywordtype">char</span> _stp_pbuf[STP_BUF_LEN+1];
+00031 <span class="keyword">static</span> <span class="keywordtype">int</span> _stp_pbuf_len = STP_BUF_LEN;
00032
-<a name="l00033"></a><a class="code" href="io_8c.html#a5">00033</a> <span class="keywordtype">void</span> <a class="code" href="io_8c.html#a5">_stp_print_buf</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
+00033 <span class="keywordtype">void</span> _stp_print_buf (<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...)
00034 {
00035 <span class="keywordtype">int</span> num;
00036 va_list args;
-00037 <span class="keywordtype">char</span> *buf = _stp_pbuf + <a class="code" href="io_8c.html#a0">STP_BUF_LEN</a> - _stp_pbuf_len;
+00037 <span class="keywordtype">char</span> *buf = _stp_pbuf + STP_BUF_LEN - _stp_pbuf_len;
00038 va_start(args, fmt);
00039 num = vscnprintf(buf, _stp_pbuf_len, fmt, args);
00040 va_end(args);
@@ -41,13 +49,13 @@
00042 _stp_pbuf_len -= num;
00043 }
00044
-<a name="l00045"></a><a class="code" href="io_8c.html#a6">00045</a> <span class="keywordtype">void</span> <a class="code" href="io_8c.html#a6">_stp_print_buf_init</a> (<span class="keywordtype">void</span>)
+00045 <span class="keywordtype">void</span> _stp_print_buf_init (<span class="keywordtype">void</span>)
00046 {
-00047 _stp_pbuf_len = <a class="code" href="io_8c.html#a0">STP_BUF_LEN</a>;
+00047 _stp_pbuf_len = STP_BUF_LEN;
00048 _stp_pbuf[0] = 0;
00049 }
00050
-<a name="l00051"></a><a class="code" href="io_8c.html#a7">00051</a> <span class="keywordtype">void</span> <a class="code" href="io_8c.html#a7">_stp_print_symbol</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address)
+00051 <span class="keywordtype">void</span> _stp_print_symbol(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address)
00052 {
00053 <span class="keywordtype">char</span> *modname;
00054 <span class="keyword">const</span> <span class="keywordtype">char</span> *name;
@@ -57,18 +65,18 @@
00058 name = _stp_kallsyms_lookup(address, &amp;size, &amp;offset, &amp;modname, namebuf);
00059
00060 <span class="keywordflow">if</span> (!name)
-00061 <a class="code" href="io_8c.html#a5">_stp_print_buf</a>(<span class="stringliteral">"0x%lx"</span>, address);
-00062 <span class="keywordflow">else</span> {
+00061 _stp_print_buf("0x%lx", address);
+00062 else {
00063 <span class="keywordflow">if</span> (modname)
-00064 <a class="code" href="io_8c.html#a5">_stp_print_buf</a>(<span class="stringliteral">"%s+%#lx/%#lx [%s]"</span>, name, offset,
+00064 _stp_print_buf("%s+%#lx/%#lx [%s]", name, offset,
00065 size, modname);
-00066 <span class="keywordflow">else</span>
-00067 <a class="code" href="io_8c.html#a5">_stp_print_buf</a>(<span class="stringliteral">"%s+%#lx/%#lx"</span>, name, offset, size);
+00066 else
+00067 _stp_print_buf("%s+%#lx/%#lx", name, offset, size);
00068 }
00069 }
00070
00071
-<a name="l00072"></a><a class="code" href="io_8c.html#a8">00072</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="io_8c.html#a8">cur_ret_addr</a> (<span class="keyword">struct</span> pt_regs *regs)
+00072 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> cur_ret_addr (struct pt_regs *regs)
00073 {
00074 <span class="preprocessor">#ifdef __x86_64__</span>
00075 <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *ra = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)regs-&gt;rsp;
@@ -76,12 +84,10 @@
00077 <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *ra = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)regs-&gt;esp;
00078 <span class="preprocessor">#endif</span>
00079 <span class="preprocessor"></span> <span class="keywordflow">if</span> (ra)
-00080 <span class="keywordflow">return</span> *ra;
-00081 <span class="keywordflow">else</span>
-00082 <span class="keywordflow">return</span> 0;
+00080 return *ra;
+00081 else
+00082 return 0;
00083 }
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/kprobe__where__funct_8c-source.html b/runtime/docs/html/kprobe__where__funct_8c-source.html
new file mode 100644
index 00000000..3d7702c1
--- /dev/null
+++ b/runtime/docs/html/kprobe__where__funct_8c-source.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/where_func/kprobe_where_funct.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000004.html">where_func</a></div>
+<h1>kprobe_where_funct.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* kprobe_where_funct.c</span>
+00002 <span class="comment"> this is a simple module to get information about calls to a function that is passed as a module option</span>
+00003 <span class="comment"> Will Cohen</span>
+00004 <span class="comment">*/</span>
+00005
+00006 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
+00007 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
+00008 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
+00009
+00010 <span class="preprocessor">#include "runtime.h"</span>
+00011 <span class="preprocessor">#include "io.c"</span>
+00012 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
+00013 <span class="preprocessor">#include "probes.c"</span>
+00014
+00015 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: where_func"</span>);
+00016 MODULE_AUTHOR(<span class="stringliteral">"Will Cohen and Martin Hunt"</span>);
+00017
+00018 <span class="keyword">static</span> <span class="keywordtype">char</span> default_name[] = <span class="stringliteral">"schedule"</span>;
+00019 <span class="keyword">static</span> <span class="keywordtype">char</span> *funct_name = default_name;
+00020 module_param(funct_name, charp, 0);
+00021 MODULE_PARM_DESC(funct_name, <span class="stringliteral">"function entry name.\n"</span>);
+00022
+00023 <span class="keyword">static</span> <span class="keywordtype">int</span> count_funct = 0;
+00024
+00025 <a class="code" href="structmap__root.html">MAP</a> funct_locations;
+00026
+00027 <span class="keyword">static</span> <span class="keywordtype">int</span> inst_funct(<span class="keyword">struct</span> kprobe *p, <span class="keyword">struct</span> pt_regs *regs)
+00028 {
+00029 <span class="keywordtype">long</span> ret_addr = cur_ret_addr(regs);
+00030 ++count_funct;
+00031 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(funct_locations, ret_addr);
+00032 <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a>(funct_locations, 1);
+00033 <span class="keywordflow">return</span> 0;
+00034 }
+00035
+00036 <span class="comment">/*For each probe you need to allocate a kprobe structure*/</span>
+00037 <span class="keyword">static</span> <span class="keyword">struct </span>kprobe kp[] = {
+00038 {
+00039 .addr = default_name,
+00040 .pre_handler = inst_funct,
+00041 }
+00042 };
+00043 <span class="preprocessor">#define MAX_KPROBES (sizeof(kp)/sizeof(struct kprobe))</span>
+00044 <span class="preprocessor"></span>
+00045 <span class="keywordtype">int</span> init_module(<span class="keywordtype">void</span>)
+00046 {
+00047 <span class="keywordtype">int</span> ret;
+00048
+00049 funct_locations = <a class="code" href="map_8c.html#a3">_stp_map_new</a>(1000, INT64);
+00050
+00051 <span class="keywordflow">if</span> (funct_name)
+00052 kp[0].addr = funct_name;
+00053
+00054 ret = _stp_register_kprobes (kp, MAX_KPROBES);
+00055
+00056 return ret;
+00057 }
+00058
+00059 <span class="keywordtype">void</span> cleanup_module(<span class="keywordtype">void</span>)
+00060 {
+00061 <span class="keyword">struct </span>map_node_int64 *ptr;
+00062
+00063 _stp_unregister_kprobes (kp, MAX_KPROBES);
+00064
+00065 dlog(<span class="stringliteral">"%s() called %d times.\n"</span>, funct_name, count_funct);
+00066 dlog(<span class="stringliteral">"NUM\tCaller Addr\tCaller Name\n"</span>, funct_name);
+00067
+00068 <span class="comment">/* now walk the hash table and print out all the information */</span>
+00069 <a class="code" href="map_8h.html#a8">foreach</a>(funct_locations, ptr) {
+00070 _stp_print_buf_init();
+00071 _stp_print_symbol(<span class="stringliteral">"%s\n"</span>, key1int(ptr));
+00072 dlog(<span class="stringliteral">"%lld\t0x%p\t(%s)\n"</span>, ptr-&gt;val, key1int(ptr), _stp_pbuf);
+00073 }
+00074
+00075 <a class="code" href="map_8c.html#a8">_stp_map_del</a>(funct_locations);
+00076 }
+00077
+00078 MODULE_LICENSE(<span class="stringliteral">"GPL"</span>);
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/map_8c-source.html b/runtime/docs/html/map_8c-source.html
index 03aa6f47..22e39231 100644
--- a/runtime/docs/html/map_8c-source.html
+++ b/runtime/docs/html/map_8c-source.html
@@ -1,675 +1,870 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map.c</h1><a href="map_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
-00002
-00003 <span class="keyword">static</span> <span class="keywordtype">int</span> map_sizes[] = {
-00004 <span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a>),
-00005 sizeof(struct map_node_stat),
-00006 sizeof(struct map_node_str),
-00007 0
-00008 };
-00009
-00010 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> string_hash(<span class="keyword">const</span> <span class="keywordtype">char</span> *key1, <span class="keyword">const</span> <span class="keywordtype">char</span> *key2)
-00011 {
-00012 <span class="keywordtype">int</span> hash = 0, count = 0;
-00013 <span class="keywordtype">char</span> *v1 = (<span class="keywordtype">char</span> *)key1;
-00014 <span class="keywordtype">char</span> *v2 = (<span class="keywordtype">char</span> *)key2;
-00015 <span class="keywordflow">while</span> (*v1 &amp;&amp; count++ &lt; 5) {
-00016 hash += *v1++;
-00017 }
-00018 <span class="keywordflow">while</span> (v2 &amp;&amp; *v2 &amp;&amp; count++ &lt; 5) {
-00019 hash += *v2++;
-00020 }
-00021 <span class="keywordflow">return</span> hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)hash, HASH_TABLE_BITS);
-00022 }
-00023
-00024 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> mixed_hash(<span class="keyword">const</span> <span class="keywordtype">char</span> *key1, <span class="keywordtype">long</span> key2)
-00025 {
-00026 <span class="keywordtype">int</span> hash = 0, count = 0;
-00027 <span class="keywordtype">char</span> *v = (<span class="keywordtype">char</span> *)key1;
-00028 <span class="keywordflow">while</span> (v &amp;&amp; *v &amp;&amp; count++ &lt; 5)
-00029 hash += *v++;
-00030 return hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)(hash ^ key2), HASH_TABLE_BITS);
-00031 }
-00032
-<a name="l00043"></a><a class="code" href="map_8c.html#a3">00043</a> <a class="code" href="structmap__root.html">MAP</a> _stp_map_new(<span class="keywordtype">unsigned</span> max_entries, enum valtype type)
-00044 {
-00045 size_t size;
-00046 <a class="code" href="structmap__root.html">MAP</a> m = (<a class="code" href="structmap__root.html">MAP</a>) <a class="code" href="alloc_8h.html#a5">_stp_valloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__root.html">map_root</a>));
-00047 <span class="keywordflow">if</span> (m == NULL)
-00048 <span class="keywordflow">return</span> NULL;
-00049
-00050 INIT_LIST_HEAD(&amp;m-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00051
-00052 m-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a> = max_entries;
-00053 m-&gt;<a class="code" href="structmap__root.html#o0">type</a> = type;
-00054 <span class="keywordflow">if</span> (type &gt;= <a class="code" href="map_8h.html#a19a17">END</a>) {
-00055 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"map_new: unknown type %d\n"</span>, type);
-00056 <span class="keywordflow">return</span> NULL;
-00057 }
-00058
-00059 <span class="keywordflow">if</span> (max_entries) {
-00060 <span class="keywordtype">void</span> *tmp;
-00061 <span class="keywordtype">int</span> i;
-00062 <span class="keyword">struct </span>list_head *e;
-00063
-00064 INIT_LIST_HEAD(&amp;m-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
-00065 size = map_sizes[type];
-00066 tmp = <a class="code" href="alloc_8h.html#a5">_stp_valloc</a>(max_entries * size);
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map.c</h1><a href="map_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span><span class="comment"></span>
+00002 <span class="comment">/** @file map.c</span>
+00003 <span class="comment"> * @brief Implements maps (associative arrays) and lists</span>
+00004 <span class="comment"> */</span>
+00005
+00006
+00007 <span class="keyword">static</span> <span class="keywordtype">int</span> map_sizes[] = {
+00008 <span class="keyword">sizeof</span>(<span class="keyword">struct </span>map_node_int64),
+00009 sizeof(struct map_node_stat),
+00010 sizeof(struct map_node_str),
+00011 0
+00012 };
+00013
+00014 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> string_hash(<span class="keyword">const</span> <span class="keywordtype">char</span> *key1, <span class="keyword">const</span> <span class="keywordtype">char</span> *key2)
+00015 {
+00016 <span class="keywordtype">int</span> hash = 0, count = 0;
+00017 <span class="keywordtype">char</span> *v1 = (<span class="keywordtype">char</span> *)key1;
+00018 <span class="keywordtype">char</span> *v2 = (<span class="keywordtype">char</span> *)key2;
+00019 <span class="keywordflow">while</span> (*v1 &amp;&amp; count++ &lt; 5) {
+00020 hash += *v1++;
+00021 }
+00022 <span class="keywordflow">while</span> (v2 &amp;&amp; *v2 &amp;&amp; count++ &lt; 5) {
+00023 hash += *v2++;
+00024 }
+00025 <span class="keywordflow">return</span> hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)hash, HASH_TABLE_BITS);
+00026 }
+00027
+00028 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> mixed_hash(<span class="keyword">const</span> <span class="keywordtype">char</span> *key1, <span class="keywordtype">long</span> key2)
+00029 {
+00030 <span class="keywordtype">int</span> hash = 0, count = 0;
+00031 <span class="keywordtype">char</span> *v = (<span class="keywordtype">char</span> *)key1;
+00032 <span class="keywordflow">while</span> (v &amp;&amp; *v &amp;&amp; count++ &lt; 5)
+00033 hash += *v++;
+00034 return hash_long((<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)(hash ^ key2), HASH_TABLE_BITS);
+00035 }
+00036 <span class="comment"></span>
+00037 <span class="comment">/** Create a new map.</span>
+00038 <span class="comment"> * Maps must be created at module initialization time.</span>
+00039 <span class="comment"> * @param max_entries The maximum number of entries allowed. Currently that number will</span>
+00040 <span class="comment"> * be preallocated. If more entries are required, the oldest ones will be deleted. This makes</span>
+00041 <span class="comment"> * it effectively a circular buffer. If max_entries is 0, there will be no maximum and entries</span>
+00042 <span class="comment"> * will be allocated dynamically.</span>
+00043 <span class="comment"> * @param type Type of values stored in this map. </span>
+00044 <span class="comment"> * @return A MAP on success or NULL on failure.</span>
+00045 <span class="comment"> */</span>
+00046
+<a name="l00047"></a><a class="code" href="map_8c.html#a3">00047</a> <a class="code" href="structmap__root.html">MAP</a> _stp_map_new(<span class="keywordtype">unsigned</span> max_entries, enum valtype type)
+00048 {
+00049 size_t size;
+00050 <a class="code" href="structmap__root.html">MAP</a> m = (<a class="code" href="structmap__root.html">MAP</a>) _stp_valloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__root.html">map_root</a>));
+00051 <span class="keywordflow">if</span> (m == NULL)
+00052 <span class="keywordflow">return</span> NULL;
+00053
+00054 INIT_LIST_HEAD(&amp;m-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00055
+00056 m-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a> = max_entries;
+00057 m-&gt;<a class="code" href="structmap__root.html#o0">type</a> = type;
+00058 <span class="keywordflow">if</span> (type &gt;= END) {
+00059 dbug (<span class="stringliteral">"map_new: unknown type %d\n"</span>, type);
+00060 <span class="keywordflow">return</span> NULL;
+00061 }
+00062
+00063 <span class="keywordflow">if</span> (max_entries) {
+00064 <span class="keywordtype">void</span> *tmp;
+00065 <span class="keywordtype">int</span> i;
+00066 <span class="keyword">struct </span>list_head *e;
00067
-00068 <span class="keywordflow">for</span> (i = max_entries - 1; i &gt;= 0; i--) {
-00069 e = i * size + tmp;
-00070 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e=%lx\n"</span>, (<span class="keywordtype">long</span>)e);
-00071 list_add(e, &amp;m-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
-00072 }
-00073 m-&gt;<a class="code" href="structmap__root.html#o14">membuf</a> = tmp;
-00074 }
-00075 <span class="keywordflow">return</span> m;
-00076 }
-00077
-00078 <span class="keyword">static</span> <span class="keywordtype">void</span> map_free_strings(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *n)
-00079 {
-00080 <span class="keyword">struct </span>map_node_str *m = (<span class="keyword">struct </span>map_node_str *)n;
-00081 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"n = %lx\n"</span>, (<span class="keywordtype">long</span>)n);
-00082 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o0">type</a> == STRING) {
-00083 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"val STRING %lx\n"</span>, (<span class="keywordtype">long</span>)m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>);
-00084 <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>)
-00085 _stp_free(m-&gt;str);
-00086 }
-00087 if (m-&gt;n.key1type == STR) {
-00088 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"key1 STR %lx\n"</span>, (<span class="keywordtype">long</span>)<a class="code" href="map_8h.html#a0">key1str</a>(m));
-00089 <span class="keywordflow">if</span> (<a class="code" href="map_8h.html#a0">key1str</a>(m))
-00090 _stp_free(key1str(m));
-00091 }
-00092 if (m-&gt;n.key2type == STR) {
-00093 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"key2 STR %lx\n"</span>, (<span class="keywordtype">long</span>)<a class="code" href="map_8h.html#a1">key2str</a>(m));
-00094 <span class="keywordflow">if</span> (<a class="code" href="map_8h.html#a1">key2str</a>(m))
-00095 _stp_free(key2str(m));
-00096 }
-00097 }
-00098
-<a name="l00104"></a><a class="code" href="map_8c.html#a5">00104</a> <span class="keywordtype">void</span> _stp_map_key_del(<a class="code" href="structmap__root.html">MAP</a> map)
-00105 {
-00106 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *m;
+00068 INIT_LIST_HEAD(&amp;m-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
+00069 size = map_sizes[type];
+00070 tmp = _stp_valloc(max_entries * size);
+00071
+00072 <span class="keywordflow">for</span> (i = max_entries - 1; i &gt;= 0; i--) {
+00073 e = i * size + tmp;
+00074 dbug (<span class="stringliteral">"e=%lx\n"</span>, (<span class="keywordtype">long</span>)e);
+00075 list_add(e, &amp;m-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
+00076 }
+00077 m-&gt;<a class="code" href="structmap__root.html#o14">membuf</a> = tmp;
+00078 }
+00079 <span class="keywordflow">return</span> m;
+00080 }
+00081
+00082 <span class="keyword">static</span> <span class="keywordtype">void</span> map_free_strings(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *n)
+00083 {
+00084 <span class="keyword">struct </span>map_node_str *m = (<span class="keyword">struct </span>map_node_str *)n;
+00085 dbug (<span class="stringliteral">"n = %lx\n"</span>, (<span class="keywordtype">long</span>)n);
+00086 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o0">type</a> == STRING) {
+00087 dbug (<span class="stringliteral">"val STRING %lx\n"</span>, (<span class="keywordtype">long</span>)m-&gt;str);
+00088 <span class="keywordflow">if</span> (m-&gt;str)
+00089 _stp_free(m-&gt;str);
+00090 }
+00091 if (m-&gt;n.key1type == STR) {
+00092 dbug (<span class="stringliteral">"key1 STR %lx\n"</span>, (<span class="keywordtype">long</span>)key1str(m));
+00093 <span class="keywordflow">if</span> (key1str(m))
+00094 _stp_free(key1str(m));
+00095 }
+00096 if (m-&gt;n.key2type == STR) {
+00097 dbug (<span class="stringliteral">"key2 STR %lx\n"</span>, (<span class="keywordtype">long</span>)key2str(m));
+00098 <span class="keywordflow">if</span> (key2str(m))
+00099 _stp_free(key2str(m));
+00100 }
+00101 }
+00102 <span class="comment"></span>
+00103 <span class="comment">/** Deletes the current element.</span>
+00104 <span class="comment"> * If no current element (key) for this map is set, this function does nothing.</span>
+00105 <span class="comment"> * @param map </span>
+00106 <span class="comment"> */</span>
00107
-00108 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"create=%d key=%lx\n"</span>, map-&gt;create, (<span class="keywordtype">long</span>)map-&gt;key);
-00109 <span class="keywordflow">if</span> (map == NULL)
-00110 <span class="keywordflow">return</span>;
+<a name="l00108"></a><a class="code" href="map_8c.html#a5">00108</a> <span class="keywordtype">void</span> _stp_map_key_del(<a class="code" href="structmap__root.html">MAP</a> map)
+00109 {
+00110 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *m;
00111
-00112 <span class="keywordflow">if</span> (map-&gt;create) {
-00113 map-&gt;create = 0;
-00114 map-&gt;key = NULL;
-00115 <span class="keywordflow">return</span>;
-00116 }
-00117
-00118 <span class="keywordflow">if</span> (map-&gt;key == NULL)
+00112 dbug (<span class="stringliteral">"create=%d key=%lx\n"</span>, map-&gt;create, (<span class="keywordtype">long</span>)map-&gt;key);
+00113 <span class="keywordflow">if</span> (map == NULL)
+00114 <span class="keywordflow">return</span>;
+00115
+00116 <span class="keywordflow">if</span> (map-&gt;create) {
+00117 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00118 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = NULL;
00119 <span class="keywordflow">return</span>;
-00120
-00121 m = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;key;
-00122
-00123 <span class="comment">/* remove node from old hash list */</span>
-00124 hlist_del_init(&amp;m-&gt;<a class="code" href="structmap__node.html#o1">hnode</a>);
-00125
-00126 <span class="comment">/* remove from entry list */</span>
-00127 list_del(&amp;m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>);
-00128
-00129 <span class="comment">/* remove any allocated string storage */</span>
-00130 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-&gt;key);
-00131
-00132 <span class="keywordflow">if</span> (map-&gt;maxnum)
-00133 list_add(&amp;m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;pool);
-00134 <span class="keywordflow">else</span>
-00135 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(m);
-00136
-00137 map-&gt;key = NULL;
-00138 map-&gt;num--;
-00139 }
+00120 }
+00121
+00122 <span class="keywordflow">if</span> (map-&gt;key == NULL)
+00123 <span class="keywordflow">return</span>;
+00124
+00125 m = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;key;
+00126
+00127 <span class="comment">/* remove node from old hash list */</span>
+00128 hlist_del_init(&amp;m-&gt;<a class="code" href="structmap__node.html#o1">hnode</a>);
+00129
+00130 <span class="comment">/* remove from entry list */</span>
+00131 list_del(&amp;m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>);
+00132
+00133 <span class="comment">/* remove any allocated string storage */</span>
+00134 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-&gt;key);
+00135
+00136 <span class="keywordflow">if</span> (map-&gt;maxnum)
+00137 list_add(&amp;m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;pool);
+00138 <span class="keywordflow">else</span>
+00139 _stp_free(m);
00140
-<a name="l00149"></a><a class="code" href="map_8c.html#a6">00149</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a6">_stp_map_start</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00150 {
-00151 <span class="keywordflow">if</span> (map == NULL)
-00152 <span class="keywordflow">return</span> NULL;
-00153
-00154 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next);
-00155
-00156 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>))
-00157 <span class="keywordflow">return</span> NULL;
-00158
-00159 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00160 }
-00161
-<a name="l00172"></a><a class="code" href="map_8c.html#a7">00172</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a7">_stp_map_iter</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m)
-00173 {
-00174 <span class="keywordflow">if</span> (map == NULL)
-00175 <span class="keywordflow">return</span> NULL;
-00176
-00177 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx next=%lx prev=%lx map-&gt;head.next=%lx\n"</span>, (<span class="keywordtype">long</span>)m, (<span class="keywordtype">long</span>)m-&gt;lnode.next, (<span class="keywordtype">long</span>)m-&gt;lnode.prev, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next);
-00178
-00179 <span class="keywordflow">if</span> (m-&gt;lnode.next == &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)
-00180 <span class="keywordflow">return</span> NULL;
-00181
-00182 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
-00183 }
-00184
-<a name="l00190"></a><a class="code" href="map_8c.html#a8">00190</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a8">_stp_map_del</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00191 {
-00192 <span class="keywordflow">if</span> (map == NULL)
-00193 <span class="keywordflow">return</span>;
+00141 map-&gt;key = NULL;
+00142 map-&gt;num--;
+00143 }
+00144 <span class="comment"></span>
+00145 <span class="comment">/** Get the first element in a map.</span>
+00146 <span class="comment"> * @param map </span>
+00147 <span class="comment"> * @returns a pointer to the first element.</span>
+00148 <span class="comment"> * This is typically used with _stp_map_iter(). See the foreach() macro</span>
+00149 <span class="comment"> * for typical usage. It probably does what you want anyway.</span>
+00150 <span class="comment"> * @sa foreach</span>
+00151 <span class="comment"> */</span>
+00152
+<a name="l00153"></a><a class="code" href="map_8c.html#a6">00153</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a6">_stp_map_start</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00154 {
+00155 <span class="keywordflow">if</span> (map == NULL)
+00156 <span class="keywordflow">return</span> NULL;
+00157
+00158 dbug (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next);
+00159
+00160 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>))
+00161 <span class="keywordflow">return</span> NULL;
+00162
+00163 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00164 }
+00165 <span class="comment"></span>
+00166 <span class="comment">/** Get the next element in a map.</span>
+00167 <span class="comment"> * @param map </span>
+00168 <span class="comment"> * @param m a pointer to the current element, returned from _stp_map_start()</span>
+00169 <span class="comment"> * or _stp_map_iter().</span>
+00170 <span class="comment"> * @returns a pointer to the next element.</span>
+00171 <span class="comment"> * This is typically used with _stp_map_start(). See the foreach() macro</span>
+00172 <span class="comment"> * for typical usage. It probably does what you want anyway.</span>
+00173 <span class="comment"> * @sa foreach</span>
+00174 <span class="comment"> */</span>
+00175
+<a name="l00176"></a><a class="code" href="map_8c.html#a7">00176</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="map_8c.html#a7">_stp_map_iter</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m)
+00177 {
+00178 <span class="keywordflow">if</span> (map == NULL)
+00179 <span class="keywordflow">return</span> NULL;
+00180
+00181 dbug (<span class="stringliteral">"%lx next=%lx prev=%lx map-&gt;head.next=%lx\n"</span>, (<span class="keywordtype">long</span>)m,
+00182 (<span class="keywordtype">long</span>)m-&gt;lnode.next, (<span class="keywordtype">long</span>)m-&gt;lnode.prev, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next);
+00183
+00184 <span class="keywordflow">if</span> (m-&gt;lnode.next == &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)
+00185 <span class="keywordflow">return</span> NULL;
+00186
+00187 <span class="keywordflow">return</span> (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
+00188 }
+00189 <span class="comment"></span>
+00190 <span class="comment">/** Deletes a map.</span>
+00191 <span class="comment"> * Deletes a map, freeing all memory in all elements. Normally done only when the module exits.</span>
+00192 <span class="comment"> * @param map</span>
+00193 <span class="comment"> */</span>
00194
-00195 <span class="keywordflow">if</span> (!list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)) {
-00196 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00197 <span class="keywordflow">while</span> (ptr &amp;&amp; ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>) {
-00198 map_free_strings(map, ptr);
-00199 ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
-00200 }
-00201 }
-00202 <a class="code" href="alloc_8h.html#a7">_stp_vfree</a>(map-&gt;<a class="code" href="structmap__root.html#o14">membuf</a>);
-00203 <a class="code" href="alloc_8h.html#a7">_stp_vfree</a>(map);
-00204 }
-00205
-00206 <span class="comment">/********************** KEY FUNCTIONS *********************/</span>
-00207
-00208
-<a name="l00218"></a><a class="code" href="map_8c.html#a9">00218</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a9">_stp_map_key_long_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key1, <span class="keywordtype">long</span> key2)
-00219 {
-00220 <span class="keywordtype">unsigned</span> hv;
-00221 <span class="keyword">struct </span>hlist_head *head;
-00222 <span class="keyword">struct </span>hlist_node *e;
-00223
-00224 <span class="keywordflow">if</span> (map == NULL)
-00225 <span class="keywordflow">return</span>;
-00226
-00227 hv = hash_long(key1 ^ key2, HASH_TABLE_BITS);
-00228 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
-00229
-00230 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %ld,%ld is %d\n"</span>, key1, key2, hv);
+<a name="l00195"></a><a class="code" href="map_8c.html#a8">00195</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a8">_stp_map_del</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00196 {
+00197 <span class="keywordflow">if</span> (map == NULL)
+00198 <span class="keywordflow">return</span>;
+00199
+00200 <span class="keywordflow">if</span> (!list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)) {
+00201 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00202 <span class="keywordflow">while</span> (ptr &amp;&amp; ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>) {
+00203 map_free_strings(map, ptr);
+00204 ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
+00205 }
+00206 }
+00207 _stp_vfree(map-&gt;<a class="code" href="structmap__root.html#o14">membuf</a>);
+00208 _stp_vfree(map);
+00209 }
+00210
+00211 <span class="comment">/********************** KEY FUNCTIONS *********************/</span>
+00212
+00213 <span class="comment"></span>
+00214 <span class="comment">/** Set the map's key to two longs.</span>
+00215 <span class="comment"> * This sets the current element based on a key of two strings. If the keys are</span>
+00216 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00217 <span class="comment"> * call.</span>
+00218 <span class="comment"> * @param map</span>
+00219 <span class="comment"> * @param key1 first key</span>
+00220 <span class="comment"> * @param key2 second key</span>
+00221 <span class="comment"> */</span>
+00222
+<a name="l00223"></a><a class="code" href="map_8c.html#a9">00223</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a9">_stp_map_key_long_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key1, <span class="keywordtype">long</span> key2)
+00224 {
+00225 <span class="keywordtype">unsigned</span> hv;
+00226 <span class="keyword">struct </span>hlist_head *head;
+00227 <span class="keyword">struct </span>hlist_node *e;
+00228
+00229 <span class="keywordflow">if</span> (map == NULL)
+00230 <span class="keywordflow">return</span>;
00231
-00232 hlist_for_each(e, head) {
-00233 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
-00234 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
-00235 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"n =%lx key=%ld,%ld\n"</span>, (<span class="keywordtype">long</span>)n, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>, n-&gt;key2.<a class="code" href="unionkey__data.html#o0">val</a>);
-00236 <span class="keywordflow">if</span> (key1 == n-&gt;key1.val &amp;&amp; key2 == n-&gt;key2.val) {
-00237 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
-00238 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00239 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
-00240 <span class="keywordflow">return</span>;
-00241 }
-00242 }
-00243
-00244 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1;
-00245 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2;
-00246 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>;
-00247 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>;
-00248 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
-00249 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
-00250 }
-00251
-<a name="l00261"></a><a class="code" href="map_8c.html#a10">00261</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">char</span> *key2)
-00262 {
-00263 <span class="keywordtype">unsigned</span> hv;
-00264 <span class="keyword">struct </span>hlist_head *head;
-00265 <span class="keyword">struct </span>hlist_node *e;
-00266
-00267 <span class="keywordflow">if</span> (map == NULL)
-00268 <span class="keywordflow">return</span>;
-00269
-00270 <span class="keywordflow">if</span> (key1 == NULL) {
-00271 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = NULL;
-00272 <span class="keywordflow">return</span>;
-00273 }
+00232 hv = hash_long(key1 ^ key2, HASH_TABLE_BITS);
+00233 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
+00234
+00235 dbug (<span class="stringliteral">"hash for %ld,%ld is %d\n"</span>, key1, key2, hv);
+00236
+00237 hlist_for_each(e, head) {
+00238 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
+00239 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
+00240 dbug (<span class="stringliteral">"n =%lx key=%ld,%ld\n"</span>, (<span class="keywordtype">long</span>)n, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>, n-&gt;key2.<a class="code" href="unionkey__data.html#o0">val</a>);
+00241 <span class="keywordflow">if</span> (key1 == n-&gt;key1.val &amp;&amp; key2 == n-&gt;key2.val) {
+00242 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
+00243 dbug (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00244 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00245 <span class="keywordflow">return</span>;
+00246 }
+00247 }
+00248
+00249 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1;
+00250 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2;
+00251 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = LONG;
+00252 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = LONG;
+00253 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
+00254 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
+00255 }
+00256 <span class="comment"></span>
+00257 <span class="comment">/** Set the map's key to two strings.</span>
+00258 <span class="comment"> * This sets the current element based on a key of two strings. If the keys are</span>
+00259 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00260 <span class="comment"> * call.</span>
+00261 <span class="comment"> * @param map</span>
+00262 <span class="comment"> * @param key1 first key</span>
+00263 <span class="comment"> * @param key2 second key</span>
+00264 <span class="comment"> */</span>
+00265
+<a name="l00266"></a><a class="code" href="map_8c.html#a10">00266</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">char</span> *key2)
+00267 {
+00268 <span class="keywordtype">unsigned</span> hv;
+00269 <span class="keyword">struct </span>hlist_head *head;
+00270 <span class="keyword">struct </span>hlist_node *e;
+00271
+00272 <span class="keywordflow">if</span> (map == NULL)
+00273 <span class="keywordflow">return</span>;
00274
-00275 hv = string_hash(key1, key2);
-00276 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
-00277
-00278 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %s,%s is %d\n"</span>, key1, key2, hv);
+00275 <span class="keywordflow">if</span> (key1 == NULL) {
+00276 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = NULL;
+00277 <span class="keywordflow">return</span>;
+00278 }
00279
-00280 hlist_for_each(e, head) {
-00281 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
-00282 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
-00283 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%s,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
-00284 <span class="keywordflow">if</span> (strcmp(key1, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0
-00285 &amp;&amp; (key2 == NULL || strcmp(key2, n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0)) {
-00286 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
-00287 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00288 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
-00289 <span class="keywordflow">return</span>;
-00290 }
-00291 }
-00292
-00293 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1;
-00294 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2;
-00295 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>;
-00296 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>;
-00297 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
-00298 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
-00299 }
-00300
-<a name="l00310"></a><a class="code" href="map_8c.html#a11">00310</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a11">_stp_map_key_str_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">long</span> key2)
-00311 {
-00312 <span class="keywordtype">unsigned</span> hv;
-00313 <span class="keyword">struct </span>hlist_head *head;
-00314 <span class="keyword">struct </span>hlist_node *e;
-00315
-00316 <span class="keywordflow">if</span> (map == NULL)
-00317 <span class="keywordflow">return</span>;
-00318
-00319 <span class="keywordflow">if</span> (key1 == NULL) {
-00320 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = NULL;
-00321 <span class="keywordflow">return</span>;
-00322 }
+00280 hv = string_hash(key1, key2);
+00281 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
+00282
+00283 dbug (<span class="stringliteral">"hash for %s,%s is %d\n"</span>, key1, key2, hv);
+00284
+00285 hlist_for_each(e, head) {
+00286 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
+00287 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
+00288 dbug (<span class="stringliteral">"e =%lx key=%s,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
+00289 <span class="keywordflow">if</span> (strcmp(key1, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0
+00290 &amp;&amp; (key2 == NULL || strcmp(key2, n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0)) {
+00291 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
+00292 dbug (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00293 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00294 <span class="keywordflow">return</span>;
+00295 }
+00296 }
+00297
+00298 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1;
+00299 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2;
+00300 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = STR;
+00301 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = STR;
+00302 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
+00303 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
+00304 }
+00305 <span class="comment"></span>
+00306 <span class="comment">/** Set the map's key to a string and a long.</span>
+00307 <span class="comment"> * This sets the current element based on a key of a string and a long. If the keys are</span>
+00308 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00309 <span class="comment"> * call.</span>
+00310 <span class="comment"> * @param map</span>
+00311 <span class="comment"> * @param key1 first key</span>
+00312 <span class="comment"> * @param key2 second key</span>
+00313 <span class="comment"> */</span>
+00314
+<a name="l00315"></a><a class="code" href="map_8c.html#a11">00315</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a11">_stp_map_key_str_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key1, <span class="keywordtype">long</span> key2)
+00316 {
+00317 <span class="keywordtype">unsigned</span> hv;
+00318 <span class="keyword">struct </span>hlist_head *head;
+00319 <span class="keyword">struct </span>hlist_node *e;
+00320
+00321 <span class="keywordflow">if</span> (map == NULL)
+00322 <span class="keywordflow">return</span>;
00323
-00324 hv = mixed_hash(key1, key2);
-00325 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
-00326
-00327 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %s,%ld is %d\n"</span>, key1, key2, hv);
+00324 <span class="keywordflow">if</span> (key1 == NULL) {
+00325 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = NULL;
+00326 <span class="keywordflow">return</span>;
+00327 }
00328
-00329 hlist_for_each(e, head) {
-00330 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
-00331 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
-00332 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%s,%ld\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,(<span class="keywordtype">long</span>)n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>);
-00333 <span class="keywordflow">if</span> (strcmp(key1, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0 &amp;&amp; key2 == n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>) {
-00334 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
-00335 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00336 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
-00337 <span class="keywordflow">return</span>;
-00338 }
-00339 }
-00340
-00341 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1;
-00342 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2;
-00343 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>;
-00344 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>;
-00345 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
-00346 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
-00347 }
-00348
-<a name="l00358"></a><a class="code" href="map_8c.html#a12">00358</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a12">_stp_map_key_long_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key1, <span class="keywordtype">char</span> *key2)
-00359 {
-00360 <span class="keywordtype">unsigned</span> hv;
-00361 <span class="keyword">struct </span>hlist_head *head;
-00362 <span class="keyword">struct </span>hlist_node *e;
-00363
-00364 <span class="keywordflow">if</span> (map == NULL)
-00365 <span class="keywordflow">return</span>;
-00366
-00367 hv = mixed_hash(key2, key1);
-00368 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
-00369 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"hash for %ld,%s is %d\n"</span>, key1, key2, hv);
-00370
-00371 hlist_for_each(e, head) {
-00372 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
-00373 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
-00374 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"e =%lx key=%ld,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>,n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
-00375 <span class="keywordflow">if</span> (key1 == n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> &amp;&amp; strcmp(key2, n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0) {
-00376 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
-00377 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00378 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
-00379 <span class="keywordflow">return</span>;
-00380 }
-00381 }
-00382
-00383 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1;
-00384 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2;
-00385 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = <a class="code" href="map_8h.html#a18a12">LONG</a>;
-00386 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a13">STR</a>;
-00387 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
-00388 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
-00389 }
-00390
-<a name="l00399"></a><a class="code" href="map_8c.html#a13">00399</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a13">_stp_map_key_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key)
-00400 {
-00401 <span class="keywordflow">if</span> (map == NULL)
-00402 <span class="keywordflow">return</span>;
-00403 <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(map, key, NULL);
-00404 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a11">NONE</a>;
-00405 }
-00406
-<a name="l00415"></a><a class="code" href="map_8c.html#a14">00415</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key)
-00416 {
-00417 <span class="keywordflow">if</span> (map == NULL)
-00418 <span class="keywordflow">return</span>;
-00419 <a class="code" href="map_8c.html#a9">_stp_map_key_long_long</a>(map, key, 0);
-00420 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = <a class="code" href="map_8h.html#a18a11">NONE</a>;
-00421 }
-00422
-00423 <span class="comment">/********************** SET/GET VALUES *********************/</span>
-00424
-00425 <span class="keyword">static</span> <span class="keywordtype">void</span> map_copy_keys(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m)
-00426 {
-00427 m-&gt;key1type = map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a>;
-00428 m-&gt;key2type = map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a>;
-00429 <span class="keywordflow">switch</span> (map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a>) {
-00430 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a13">STR</a>:
-00431 m-&gt;key1.str = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1);
-00432 strcpy(m-&gt;key1.str, map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
-00433 <span class="keywordflow">break</span>;
-00434 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a12">LONG</a>:
-00435 m-&gt;key1.val = map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>;
-00436 <span class="keywordflow">break</span>;
-00437 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a11">NONE</a>:
-00438 <span class="comment">/* ERROR */</span>
-00439 <span class="keywordflow">break</span>;
-00440 }
-00441 <span class="keywordflow">switch</span> (map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a>) {
-00442 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a13">STR</a>:
-00443 m-&gt;key2.<a class="code" href="unionkey__data.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1);
-00444 strcpy(m-&gt;key2.str, map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
-00445 <span class="keywordflow">break</span>;
-00446 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a12">LONG</a>:
-00447 m-&gt;key2.<a class="code" href="unionkey__data.html#o0">val</a> = map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>;
-00448 <span class="keywordflow">break</span>;
-00449 <span class="keywordflow">case</span> <a class="code" href="map_8h.html#a18a11">NONE</a>:
+00329 hv = mixed_hash(key1, key2);
+00330 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
+00331
+00332 dbug (<span class="stringliteral">"hash for %s,%ld is %d\n"</span>, key1, key2, hv);
+00333
+00334 hlist_for_each(e, head) {
+00335 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
+00336 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
+00337 dbug (<span class="stringliteral">"e =%lx key=%s,%ld\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>,(<span class="keywordtype">long</span>)n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>);
+00338 <span class="keywordflow">if</span> (strcmp(key1, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0 &amp;&amp; key2 == n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>) {
+00339 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
+00340 dbug (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00341 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00342 <span class="keywordflow">return</span>;
+00343 }
+00344 }
+00345
+00346 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key1;
+00347 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key2;
+00348 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = STR;
+00349 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = LONG;
+00350 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
+00351 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
+00352 }
+00353 <span class="comment"></span>
+00354 <span class="comment">/** Set the map's key to a long and a string.</span>
+00355 <span class="comment"> * This sets the current element based on a key of a long and a string. If the keys are</span>
+00356 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00357 <span class="comment"> * call.</span>
+00358 <span class="comment"> * @param map</span>
+00359 <span class="comment"> * @param key1 first key</span>
+00360 <span class="comment"> * @param key2 second key</span>
+00361 <span class="comment"> */</span>
+00362
+<a name="l00363"></a><a class="code" href="map_8c.html#a12">00363</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a12">_stp_map_key_long_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key1, <span class="keywordtype">char</span> *key2)
+00364 {
+00365 <span class="keywordtype">unsigned</span> hv;
+00366 <span class="keyword">struct </span>hlist_head *head;
+00367 <span class="keyword">struct </span>hlist_node *e;
+00368
+00369 <span class="keywordflow">if</span> (map == NULL)
+00370 <span class="keywordflow">return</span>;
+00371
+00372 hv = mixed_hash(key2, key1);
+00373 head = &amp;map-&gt;<a class="code" href="structmap__root.html#o13">hashes</a>[hv];
+00374 dbug (<span class="stringliteral">"hash for %ld,%s is %d\n"</span>, key1, key2, hv);
+00375
+00376 hlist_for_each(e, head) {
+00377 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *n =
+00378 (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)((long)e - <span class="keyword">sizeof</span>(<span class="keyword">struct </span>hlist_node));
+00379 dbug (<span class="stringliteral">"e =%lx key=%ld,%s\n"</span>, (<span class="keywordtype">long</span>)e, n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>,n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
+00380 <span class="keywordflow">if</span> (key1 == n-&gt;<a class="code" href="structmap__node.html#o2">key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> &amp;&amp; strcmp(key2, n-&gt;<a class="code" href="structmap__node.html#o3">key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) == 0) {
+00381 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = n;
+00382 dbug (<span class="stringliteral">"saving key %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00383 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00384 <span class="keywordflow">return</span>;
+00385 }
+00386 }
+00387
+00388 map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a> = key1;
+00389 map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a> = key2;
+00390 map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a> = LONG;
+00391 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = STR;
+00392 map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a> = head;
+00393 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 1;
+00394 }
+00395 <span class="comment"></span>
+00396 <span class="comment">/** Set the map's key to a string.</span>
+00397 <span class="comment"> * This sets the current element based on a string key. If the key is</span>
+00398 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00399 <span class="comment"> * call.</span>
+00400 <span class="comment"> * @param map</span>
+00401 <span class="comment"> * @param key</span>
+00402 <span class="comment"> */</span>
+00403
+<a name="l00404"></a><a class="code" href="map_8c.html#a13">00404</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a13">_stp_map_key_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *key)
+00405 {
+00406 <span class="keywordflow">if</span> (map == NULL)
+00407 <span class="keywordflow">return</span>;
+00408 <a class="code" href="map_8c.html#a10">_stp_map_key_str_str</a>(map, key, NULL);
+00409 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = NONE;
+00410 }
+00411 <span class="comment"></span>
+00412 <span class="comment">/** Set the map's key to a long.</span>
+00413 <span class="comment"> * This sets the current element based on a long key. If the key is</span>
+00414 <span class="comment"> * not found, a new element will not be created until a &lt;i&gt;_stp_map_set_xxx&lt;/i&gt;</span>
+00415 <span class="comment"> * call.</span>
+00416 <span class="comment"> * @param map</span>
+00417 <span class="comment"> * @param key </span>
+00418 <span class="comment"> */</span>
+00419
+<a name="l00420"></a><a class="code" href="map_8c.html#a14">00420</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">long</span> key)
+00421 {
+00422 <span class="keywordflow">if</span> (map == NULL)
+00423 <span class="keywordflow">return</span>;
+00424 <a class="code" href="map_8c.html#a9">_stp_map_key_long_long</a>(map, key, 0);
+00425 map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a> = NONE;
+00426 }
+00427
+00428 <span class="comment">/********************** SET/GET VALUES *********************/</span>
+00429
+00430 <span class="keyword">static</span> <span class="keywordtype">void</span> map_copy_keys(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *m)
+00431 {
+00432 m-&gt;key1type = map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a>;
+00433 m-&gt;key2type = map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a>;
+00434 <span class="keywordflow">switch</span> (map-&gt;<a class="code" href="structmap__root.html#o8">c_key1type</a>) {
+00435 <span class="keywordflow">case</span> STR:
+00436 m-&gt;key1.str = _stp_alloc(strlen(map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1);
+00437 strcpy(m-&gt;key1.str, map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
+00438 <span class="keywordflow">break</span>;
+00439 <span class="keywordflow">case</span> LONG:
+00440 m-&gt;key1.val = map-&gt;<a class="code" href="structmap__root.html#o11">c_key1</a>.<a class="code" href="unionkey__data.html#o0">val</a>;
+00441 <span class="keywordflow">break</span>;
+00442 <span class="keywordflow">case</span> NONE:
+00443 <span class="comment">/* ERROR */</span>
+00444 <span class="keywordflow">break</span>;
+00445 }
+00446 <span class="keywordflow">switch</span> (map-&gt;<a class="code" href="structmap__root.html#o9">c_key2type</a>) {
+00447 <span class="keywordflow">case</span> STR:
+00448 m-&gt;key2.<a class="code" href="unionkey__data.html#o1">str</a> = _stp_alloc(strlen(map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>) + 1);
+00449 strcpy(m-&gt;key2.str, map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o1">str</a>);
00450 <span class="keywordflow">break</span>;
-00451 }
-00452
-00453 <span class="comment">/* add node to new hash list */</span>
-00454 hlist_add_head(&amp;m-&gt;hnode, map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a>);
-00455
-00456 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = m;
-00457 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
-00458 map-&gt;<a class="code" href="structmap__root.html#o2">num</a>++;
-00459 }
-00460
-00461 <span class="keyword">static</span> <span class="keywordtype">void</span> __stp_map_set_int64(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val, <span class="keywordtype">int</span> add)
-00462 {
-00463 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m;
-00464
-00465 <span class="keywordflow">if</span> (map == NULL)
-00466 return;
-00467
-00468 if (map-&gt;create) {
-00469 <span class="keywordflow">if</span> (val == 0)
-00470 return;
-00471
-00472 if (map-&gt;maxnum) {
-00473 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
-00474 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
-00475 <span class="comment">/* ERROR. FIXME */</span>
-00476 <span class="keywordflow">return</span>;
-00477 }
-00478 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00479 hlist_del_init(&amp;m-&gt;<a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>);
-00480 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
-00481 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
-00482 } <span class="keywordflow">else</span> {
-00483 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
-00484 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
-00485 }
-00486 list_move_tail(&amp;m-&gt;<a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00487 } <span class="keywordflow">else</span> {
-00488 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)
-00489 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmap__node__int64.html">map_node_int64</a>));
-00490 <span class="comment">/* add node to list */</span>
-00491 list_add_tail(&amp;m-&gt;<a class="code" href="structmap__node__int64.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00492 }
-00493
-00494 <span class="comment">/* copy the key(s) */</span>
-00495 map_copy_keys(map, &amp;m-&gt;<a class="code" href="structmap__node__int64.html#o0">n</a>);
-00496
-00497 <span class="comment">/* set the value */</span>
-00498 m-&gt;<a class="code" href="structmap__node__int64.html#o1">val</a> = val;
-00499 } <span class="keywordflow">else</span> {
-00500 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00501 return;
-00502
-00503 if (val) {
-00504 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00505 <span class="keywordflow">if</span> (add)
-00506 m-&gt;val += val;
-00507 else
-00508 m-&gt;val = val;
-00509 } else if (!add) {
-00510 <span class="comment">/* setting value to 0 is the same as deleting */</span>
-00511 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
-00512 }
-00513 }
-00514 }
-00515
-<a name="l00525"></a><a class="code" href="map_8c.html#a17">00525</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
-00526 {
-00527 __stp_map_set_int64 (map, val, 0);
-00528 }
-00529
-00530
-<a name="l00541"></a><a class="code" href="map_8c.html#a18">00541</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
-00542 {
-00543 __stp_map_set_int64 (map, val, 1);
-00544 }
-00545
-<a name="l00551"></a><a class="code" href="map_8c.html#a19">00551</a> int64_t <a class="code" href="map_8c.html#a19">_stp_map_get_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00552 {
-00553 <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *m;
-00554 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00555 <span class="keywordflow">return</span> 0;
-00556 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00557 m = (<span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00558 <span class="keywordflow">return</span> m-&gt;<a class="code" href="structmap__node__int64.html#o1">val</a>;
-00559 }
-00560
-<a name="l00571"></a><a class="code" href="map_8c.html#a20">00571</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *val)
-00572 {
-00573 <span class="keyword">struct </span>map_node_str *m;
-00574
-00575 <span class="keywordflow">if</span> (map == NULL)
-00576 <span class="keywordflow">return</span>;
+00451 <span class="keywordflow">case</span> LONG:
+00452 m-&gt;key2.<a class="code" href="unionkey__data.html#o0">val</a> = map-&gt;<a class="code" href="structmap__root.html#o12">c_key2</a>.<a class="code" href="unionkey__data.html#o0">val</a>;
+00453 <span class="keywordflow">break</span>;
+00454 <span class="keywordflow">case</span> NONE:
+00455 <span class="keywordflow">break</span>;
+00456 }
+00457
+00458 <span class="comment">/* add node to new hash list */</span>
+00459 hlist_add_head(&amp;m-&gt;hnode, map-&gt;<a class="code" href="structmap__root.html#o10">c_keyhead</a>);
+00460
+00461 map-&gt;<a class="code" href="structmap__root.html#o6">key</a> = m;
+00462 map-&gt;<a class="code" href="structmap__root.html#o7">create</a> = 0;
+00463 map-&gt;<a class="code" href="structmap__root.html#o2">num</a>++;
+00464 }
+00465
+00466 <span class="keyword">static</span> <span class="keywordtype">void</span> __stp_map_set_int64(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val, <span class="keywordtype">int</span> add)
+00467 {
+00468 <span class="keyword">struct </span>map_node_int64 *m;
+00469
+00470 <span class="keywordflow">if</span> (map == NULL)
+00471 return;
+00472
+00473 if (map-&gt;create) {
+00474 <span class="keywordflow">if</span> (val == 0)
+00475 return;
+00476
+00477 if (map-&gt;maxnum) {
+00478 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
+00479 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
+00480 <span class="comment">/* ERROR. FIXME */</span>
+00481 <span class="keywordflow">return</span>;
+00482 }
+00483 m = (<span class="keyword">struct </span>map_node_int64 *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00484 hlist_del_init(&amp;m-&gt;n.hnode);
+00485 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
+00486 dbug (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
+00487 } <span class="keywordflow">else</span> {
+00488 m = (<span class="keyword">struct </span>map_node_int64 *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
+00489 dbug (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
+00490 }
+00491 list_move_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00492 } <span class="keywordflow">else</span> {
+00493 m = (<span class="keyword">struct </span>map_node_int64 *)
+00494 _stp_calloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_int64));
+00495 <span class="comment">/* add node to list */</span>
+00496 list_add_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00497 }
+00498
+00499 <span class="comment">/* copy the key(s) */</span>
+00500 map_copy_keys(map, &amp;m-&gt;n);
+00501
+00502 <span class="comment">/* set the value */</span>
+00503 m-&gt;val = val;
+00504 } <span class="keywordflow">else</span> {
+00505 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00506 return;
+00507
+00508 if (val) {
+00509 m = (<span class="keyword">struct </span>map_node_int64 *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00510 <span class="keywordflow">if</span> (add)
+00511 m-&gt;val += val;
+00512 else
+00513 m-&gt;val = val;
+00514 } else if (!add) {
+00515 <span class="comment">/* setting value to 0 is the same as deleting */</span>
+00516 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
+00517 }
+00518 }
+00519 }
+00520 <span class="comment"></span>
+00521 <span class="comment">/** Set the current element's value to an int64.</span>
+00522 <span class="comment"> * This sets the current element's value to an int64. The map must have been created</span>
+00523 <span class="comment"> * to hold int64s using _stp_map_new()</span>
+00524 <span class="comment"> *</span>
+00525 <span class="comment"> * If the element doesn't exist, it is created. If no current element (key)</span>
+00526 <span class="comment"> * is set for the map, this function does nothing.</span>
+00527 <span class="comment"> * @param map</span>
+00528 <span class="comment"> * @param val new value</span>
+00529 <span class="comment"> * @sa _stp_map_add_int64</span>
+00530 <span class="comment"> */</span>
+<a name="l00531"></a><a class="code" href="map_8c.html#a17">00531</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
+00532 {
+00533 __stp_map_set_int64 (map, val, 0);
+00534 }
+00535
+00536 <span class="comment"></span>
+00537 <span class="comment">/** Adds an int64 to the current element's value.</span>
+00538 <span class="comment"> * This adds an int64 to the current element's value. The map must have been created</span>
+00539 <span class="comment"> * to hold int64s using _stp_map_new()</span>
+00540 <span class="comment"> *</span>
+00541 <span class="comment"> * If the element doesn't exist, it is created. If no current element (key)</span>
+00542 <span class="comment"> * is set for the map, this function does nothing.</span>
+00543 <span class="comment"> * @param map</span>
+00544 <span class="comment"> * @param val value</span>
+00545 <span class="comment"> * @sa _stp_map_set_int64</span>
+00546 <span class="comment"> */</span>
+00547
+<a name="l00548"></a><a class="code" href="map_8c.html#a18">00548</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
+00549 {
+00550 __stp_map_set_int64 (map, val, 1);
+00551 }
+00552 <span class="comment"></span>
+00553 <span class="comment">/** Gets the current element's value.</span>
+00554 <span class="comment"> * @param map</span>
+00555 <span class="comment"> * @returns The value. If the current element is not set or doesn't exist, returns 0.</span>
+00556 <span class="comment"> */</span>
+00557
+<a name="l00558"></a><a class="code" href="map_8c.html#a19">00558</a> int64_t <a class="code" href="map_8c.html#a19">_stp_map_get_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00559 {
+00560 <span class="keyword">struct </span>map_node_int64 *m;
+00561 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00562 <span class="keywordflow">return</span> 0;
+00563 dbug (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00564 m = (<span class="keyword">struct </span>map_node_int64 *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00565 <span class="keywordflow">return</span> m-&gt;val;
+00566 }
+00567 <span class="comment"></span>
+00568 <span class="comment">/** Set the current element's value to a string.</span>
+00569 <span class="comment"> * This sets the current element's value to an string. The map must have been created</span>
+00570 <span class="comment"> * to hold int64s using &lt;i&gt;_stp_map_new(xxx, STRING)&lt;/i&gt;</span>
+00571 <span class="comment"> *</span>
+00572 <span class="comment"> * If the element doesn't exist, it is created. If no current element (key)</span>
+00573 <span class="comment"> * is set for the map, this function does nothing.</span>
+00574 <span class="comment"> * @param map</span>
+00575 <span class="comment"> * @param val new string</span>
+00576 <span class="comment"> */</span>
00577
-00578 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
-00579 <span class="keywordflow">if</span> (val == NULL)
-00580 <span class="keywordflow">return</span>;
+<a name="l00578"></a><a class="code" href="map_8c.html#a20">00578</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *val)
+00579 {
+00580 <span class="keyword">struct </span>map_node_str *m;
00581
-00582 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>) {
-00583 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
-00584 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
-00585 <span class="comment">/* ERROR. FIXME */</span>
-00586 <span class="keywordflow">return</span>;
-00587 }
-00588 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00589 hlist_del_init(&amp;m-&gt;<a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>);
-00590 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
-00591 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
-00592 } <span class="keywordflow">else</span> {
-00593 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
-00594 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
-00595 }
-00596 list_move_tail(&amp;m-&gt;<a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00597 } <span class="keywordflow">else</span> {
-00598 m = (<span class="keyword">struct </span>map_node_str *)
-00599 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_str));
-00600 <span class="comment">/* add node to list */</span>
-00601 list_add_tail(&amp;m-&gt;<a class="code" href="structmap__node__str.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00602 }
-00603
-00604 <span class="comment">/* copy the key(s) */</span>
-00605 map_copy_keys(map, &amp;m-&gt;<a class="code" href="structmap__node__str.html#o0">n</a>);
-00606
-00607 <span class="comment">/* set the value */</span>
-00608 m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(val) + 1);
-00609 strcpy(m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>, val);
-00610 } <span class="keywordflow">else</span> {
-00611 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00612 <span class="keywordflow">return</span>;
+00582 <span class="keywordflow">if</span> (map == NULL)
+00583 <span class="keywordflow">return</span>;
+00584
+00585 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
+00586 <span class="keywordflow">if</span> (val == NULL)
+00587 <span class="keywordflow">return</span>;
+00588
+00589 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>) {
+00590 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
+00591 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
+00592 <span class="comment">/* ERROR. FIXME */</span>
+00593 <span class="keywordflow">return</span>;
+00594 }
+00595 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00596 hlist_del_init(&amp;m-&gt;n.hnode);
+00597 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
+00598 dbug (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
+00599 } <span class="keywordflow">else</span> {
+00600 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
+00601 dbug (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
+00602 }
+00603 list_move_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00604 } <span class="keywordflow">else</span> {
+00605 m = (<span class="keyword">struct </span>map_node_str *)
+00606 _stp_calloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_str));
+00607 <span class="comment">/* add node to list */</span>
+00608 list_add_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00609 }
+00610
+00611 <span class="comment">/* copy the key(s) */</span>
+00612 map_copy_keys(map, &amp;m-&gt;n);
00613
-00614 <span class="keywordflow">if</span> (val) {
-00615 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00616 <span class="keywordflow">if</span> (m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>)
-00617 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>);
-00618 m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a> = <a class="code" href="alloc_8h.html#a3">_stp_alloc</a>(strlen(val) + 1);
-00619 strcpy(m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>, val);
-00620 } <span class="keywordflow">else</span> {
-00621 <span class="comment">/* setting value to 0 is the same as deleting */</span>
-00622 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
-00623 }
-00624 }
-00625 }
-00626
-<a name="l00632"></a><a class="code" href="map_8c.html#a21">00632</a> <span class="keywordtype">char</span> *<a class="code" href="map_8c.html#a21">_stp_map_get_str</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00633 {
-00634 <span class="keyword">struct </span>map_node_str *m;
-00635 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00636 <span class="keywordflow">return</span> NULL;
-00637 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00638 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00639 <span class="keywordflow">return</span> m-&gt;<a class="code" href="structmap__node__str.html#o1">str</a>;
-00640 }
-00641
-<a name="l00656"></a><a class="code" href="map_8c.html#a22">00656</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map, <a class="code" href="structstat.html">stat</a> * stats)
-00657 {
-00658 <span class="keyword">struct </span>map_node_stat *m;
-00659
-00660 <span class="keywordflow">if</span> (map == NULL)
-00661 <span class="keywordflow">return</span>;
-00662 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"set_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00663
-00664 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
-00665 <span class="keywordflow">if</span> (stats == NULL)
-00666 <span class="keywordflow">return</span>;
-00667
-00668 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>) {
-00669 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
-00670 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
-00671 <span class="comment">/* ERROR. FIXME */</span>
-00672 <span class="keywordflow">return</span>;
-00673 }
-00674 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00675 hlist_del_init(&amp;m-&gt;<a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o1">hnode</a>);
-00676 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
-00677 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
-00678 } <span class="keywordflow">else</span> {
-00679 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
-00680 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
-00681 }
-00682 list_move_tail(&amp;m-&gt;<a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00683 } <span class="keywordflow">else</span> {
-00684 m = (<span class="keyword">struct </span>map_node_stat *)
-00685 <a class="code" href="alloc_8h.html#a4">_stp_calloc</a>(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_stat));
-00686 <span class="comment">/* add node to list */</span>
-00687 list_add_tail(&amp;m-&gt;<a class="code" href="structmap__node__stat.html#o0">n</a>.<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
-00688 }
-00689
-00690 <span class="comment">/* copy the key(s) */</span>
-00691 map_copy_keys(map, &amp;m-&gt;<a class="code" href="structmap__node__stat.html#o0">n</a>);
-00692
-00693 <span class="comment">/* set the value */</span>
-00694 memcpy(&amp;m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>));
-00695 } <span class="keywordflow">else</span> {
-00696 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00697 <span class="keywordflow">return</span>;
-00698
-00699 <span class="keywordflow">if</span> (stats) {
-00700 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00701 memcpy(&amp;m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>));
-00702 } <span class="keywordflow">else</span> {
-00703 <span class="comment">/* setting value to NULL is the same as deleting */</span>
-00704 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
-00705 }
-00706 }
-00707 }
-00708
-<a name="l00715"></a><a class="code" href="map_8c.html#a23">00715</a> <a class="code" href="structstat.html">stat</a> *<a class="code" href="map_8c.html#a23">_stp_map_get_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00716 {
-00717 <span class="keyword">struct </span>map_node_stat *m;
-00718 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00719 <span class="keywordflow">return</span> NULL;
-00720 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00721 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00722 <span class="keywordflow">return</span> &amp;m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>;
-00723 }
-00724
-<a name="l00736"></a><a class="code" href="map_8c.html#a24">00736</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
-00737 {
-00738 <span class="keyword">struct </span>map_node_stat *m;
-00739 <span class="keywordflow">if</span> (map == NULL)
-00740 <span class="keywordflow">return</span>;
-00741
-00742 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
-00743 <a class="code" href="structstat.html">stat</a> st = { 1, val, val, val };
-00744 <span class="comment">/* histogram */</span>
-00745 <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(map, &amp;st);
-00746 <span class="keywordflow">return</span>;
-00747 }
+00614 <span class="comment">/* set the value */</span>
+00615 m-&gt;str = _stp_alloc(strlen(val) + 1);
+00616 strcpy(m-&gt;str, val);
+00617 } <span class="keywordflow">else</span> {
+00618 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00619 <span class="keywordflow">return</span>;
+00620
+00621 <span class="keywordflow">if</span> (val) {
+00622 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00623 <span class="keywordflow">if</span> (m-&gt;str)
+00624 _stp_free(m-&gt;str);
+00625 m-&gt;str = _stp_alloc(strlen(val) + 1);
+00626 strcpy(m-&gt;str, val);
+00627 } <span class="keywordflow">else</span> {
+00628 <span class="comment">/* setting value to 0 is the same as deleting */</span>
+00629 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
+00630 }
+00631 }
+00632 }
+00633 <span class="comment"></span>
+00634 <span class="comment">/** Gets the current element's value.</span>
+00635 <span class="comment"> * @param map</span>
+00636 <span class="comment"> * @returns A string pointer. If the current element is not set or doesn't exist, returns NULL.</span>
+00637 <span class="comment"> */</span>
+00638
+<a name="l00639"></a><a class="code" href="map_8c.html#a21">00639</a> <span class="keywordtype">char</span> *<a class="code" href="map_8c.html#a21">_stp_map_get_str</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00640 {
+00641 <span class="keyword">struct </span>map_node_str *m;
+00642 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00643 <span class="keywordflow">return</span> NULL;
+00644 dbug (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00645 m = (<span class="keyword">struct </span>map_node_str *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00646 <span class="keywordflow">return</span> m-&gt;str;
+00647 }
+00648 <span class="comment"></span>
+00649 <span class="comment">/** Set the current element's value to a stat.</span>
+00650 <span class="comment"> * This sets the current element's value to an stat struct. The map must have been created</span>
+00651 <span class="comment"> * to hold stats using &lt;i&gt;_stp_map_new(xxx, STAT)&lt;/i&gt;. This function would only be used</span>
+00652 <span class="comment"> * if we wanted to set stats to something other than the normal initial values (count = 0,</span>
+00653 <span class="comment"> * sum = 0, etc). It may be deleted if it doesn't turn out to be useful.</span>
+00654 <span class="comment"> * @sa _stp_map_stat_add </span>
+00655 <span class="comment"> *</span>
+00656 <span class="comment"> * If the element doesn't exist, it is created. If no current element (key)</span>
+00657 <span class="comment"> * is set for the map, this function does nothing.</span>
+00658 <span class="comment"> * @param map</span>
+00659 <span class="comment"> * @param stats pointer to stats struct.</span>
+00660 <span class="comment"> * @todo Histograms don't work yet.</span>
+00661 <span class="comment"> */</span>
+00662
+<a name="l00663"></a><a class="code" href="map_8c.html#a22">00663</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map, <a class="code" href="structstat.html">stat</a> * stats)
+00664 {
+00665 <span class="keyword">struct </span>map_node_stat *m;
+00666
+00667 <span class="keywordflow">if</span> (map == NULL)
+00668 <span class="keywordflow">return</span>;
+00669 dbug (<span class="stringliteral">"set_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00670
+00671 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
+00672 <span class="keywordflow">if</span> (stats == NULL)
+00673 <span class="keywordflow">return</span>;
+00674
+00675 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>) {
+00676 <span class="keywordflow">if</span> (list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>)) {
+00677 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a>) {
+00678 <span class="comment">/* ERROR. FIXME */</span>
+00679 <span class="keywordflow">return</span>;
+00680 }
+00681 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00682 hlist_del_init(&amp;m-&gt;n.hnode);
+00683 map_free_strings(map, (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)m);
+00684 dbug (<span class="stringliteral">"got %lx off head\n"</span>, (<span class="keywordtype">long</span>)m);
+00685 } <span class="keywordflow">else</span> {
+00686 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>.next;
+00687 dbug (<span class="stringliteral">"got %lx off pool\n"</span>, (<span class="keywordtype">long</span>)m);
+00688 }
+00689 list_move_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00690 } <span class="keywordflow">else</span> {
+00691 m = (<span class="keyword">struct </span>map_node_stat *)
+00692 _stp_calloc(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> map_node_stat));
+00693 <span class="comment">/* add node to list */</span>
+00694 list_add_tail(&amp;m-&gt;n.lnode, &amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>);
+00695 }
+00696
+00697 <span class="comment">/* copy the key(s) */</span>
+00698 map_copy_keys(map, &amp;m-&gt;n);
+00699
+00700 <span class="comment">/* set the value */</span>
+00701 memcpy(&amp;m-&gt;stats, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>));
+00702 } <span class="keywordflow">else</span> {
+00703 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00704 <span class="keywordflow">return</span>;
+00705
+00706 <span class="keywordflow">if</span> (stats) {
+00707 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00708 memcpy(&amp;m-&gt;stats, stats, <span class="keyword">sizeof</span>(<a class="code" href="structstat.html">stat</a>));
+00709 } <span class="keywordflow">else</span> {
+00710 <span class="comment">/* setting value to NULL is the same as deleting */</span>
+00711 <a class="code" href="map_8c.html#a5">_stp_map_key_del</a>(map);
+00712 }
+00713 }
+00714 }
+00715 <span class="comment"></span>
+00716 <span class="comment">/** Gets the current element's value.</span>
+00717 <span class="comment"> * @param map</span>
+00718 <span class="comment"> * @returns A pointer to the stats struct. If the current element is not set </span>
+00719 <span class="comment"> * or doesn't exist, returns NULL.</span>
+00720 <span class="comment"> */</span>
+00721
+<a name="l00722"></a><a class="code" href="map_8c.html#a23">00722</a> <a class="code" href="structstat.html">stat</a> *<a class="code" href="map_8c.html#a23">_stp_map_get_stat</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00723 {
+00724 <span class="keyword">struct </span>map_node_stat *m;
+00725 <span class="keywordflow">if</span> (map == NULL || map-&gt;<a class="code" href="structmap__root.html#o7">create</a> || map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00726 <span class="keywordflow">return</span> NULL;
+00727 dbug (<span class="stringliteral">"%lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00728 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00729 <span class="keywordflow">return</span> &amp;m-&gt;stats;
+00730 }
+00731 <span class="comment"></span>
+00732 <span class="comment">/** Add to the current element's statistics.</span>
+00733 <span class="comment"> * Increments the statistics counter by one and the sum by &lt;i&gt;val&lt;/i&gt;.</span>
+00734 <span class="comment"> * Adjusts minimum, maximum, and histogram.</span>
+00735 <span class="comment"> *</span>
+00736 <span class="comment"> * If the element doesn't exist, it is created. If no current element (key)</span>
+00737 <span class="comment"> * is set for the map, this function does nothing.</span>
+00738 <span class="comment"> * @param map</span>
+00739 <span class="comment"> * @param val value to add to the statistics</span>
+00740 <span class="comment"> * @todo Histograms don't work yet.</span>
+00741 <span class="comment"> */</span>
+00742
+<a name="l00743"></a><a class="code" href="map_8c.html#a24">00743</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
+00744 {
+00745 <span class="keyword">struct </span>map_node_stat *m;
+00746 <span class="keywordflow">if</span> (map == NULL)
+00747 <span class="keywordflow">return</span>;
00748
-00749 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
-00750 <span class="keywordflow">return</span>;
-00751
-00752 <a class="code" href="runtime_8h.html#a0">dbug</a> (<span class="stringliteral">"add_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
-00753 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
-00754 m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o0">count</a>++;
-00755 m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o1">sum</a> += val;
-00756 <span class="keywordflow">if</span> (val &gt; m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a>)
-00757 m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o3">max</a> = val;
-00758 <span class="keywordflow">if</span> (val &lt; m-&gt;stats.min)
-00759 m-&gt;<a class="code" href="structmap__node__stat.html#o1">stats</a>.<a class="code" href="structstat.html#o2">min</a> = val;
-00760 <span class="comment">/* histogram */</span>
-00761 }
-00762
-00763 <span class="comment">/********************** List Functions *********************/</span>
-00764
-<a name="l00776"></a><a class="code" href="map_8c.html#a25">00776</a> <a class="code" href="structmap__root.html">MAP</a> <a class="code" href="map_8c.html#a25">_stp_list_new</a>(<span class="keywordtype">unsigned</span> max_entries, <span class="keyword">enum</span> valtype type)
-00777 {
-00778 <a class="code" href="structmap__root.html">MAP</a> map = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (max_entries, type);
-00779 map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a> = 1;
-00780 <span class="keywordflow">return</span> map;
-00781 }
+00749 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o7">create</a>) {
+00750 <a class="code" href="structstat.html">stat</a> st = { 1, val, val, val };
+00751 <span class="comment">/* histogram */</span>
+00752 <a class="code" href="map_8c.html#a22">_stp_map_set_stat</a>(map, &amp;st);
+00753 <span class="keywordflow">return</span>;
+00754 }
+00755
+00756 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o6">key</a> == NULL)
+00757 <span class="keywordflow">return</span>;
+00758
+00759 dbug (<span class="stringliteral">"add_stat %lx\n"</span>, (<span class="keywordtype">long</span>)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>);
+00760 m = (<span class="keyword">struct </span>map_node_stat *)map-&gt;<a class="code" href="structmap__root.html#o6">key</a>;
+00761 m-&gt;stats.count++;
+00762 m-&gt;stats.sum += val;
+00763 <span class="keywordflow">if</span> (val &gt; m-&gt;stats.max)
+00764 m-&gt;stats.max = val;
+00765 <span class="keywordflow">if</span> (val &lt; m-&gt;stats.min)
+00766 m-&gt;stats.min = val;
+00767 <span class="comment">/* histogram */</span>
+00768 }
+00769
+00770 <span class="comment">/********************** List Functions *********************/</span>
+00771 <span class="comment"></span>
+00772 <span class="comment">/** Create a new list.</span>
+00773 <span class="comment"> * A list is a map that internally has an incrementing long key for each member.</span>
+00774 <span class="comment"> * Lists do not wrap if elements are added to exceed their maximum size.</span>
+00775 <span class="comment"> * @param max_entries The maximum number of entries allowed. Currently that number will</span>
+00776 <span class="comment"> * be preallocated. If max_entries is 0, there will be no maximum and entries</span>
+00777 <span class="comment"> * will be allocated dynamically.</span>
+00778 <span class="comment"> * @param type Type of values stored in this list. </span>
+00779 <span class="comment"> * @return A MAP on success or NULL on failure.</span>
+00780 <span class="comment"> * @sa foreach</span>
+00781 <span class="comment"> */</span>
00782
-<a name="l00788"></a><a class="code" href="map_8c.html#a26">00788</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a26">_stp_list_clear</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00789 {
-00790 <span class="keywordflow">if</span> (map == NULL)
-00791 <span class="keywordflow">return</span>;
-00792
-00793 <span class="keywordflow">if</span> (!list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)) {
-00794 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
-00795
-00796 <span class="keywordflow">while</span> (ptr &amp;&amp; ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>) {
-00797 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *next = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
-00798
-00799 <span class="comment">/* remove node from old hash list */</span>
-00800 hlist_del_init(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o1">hnode</a>);
-00801
-00802 <span class="comment">/* remove from entry list */</span>
-00803 list_del(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>);
-00804
-00805 <span class="comment">/* remove any allocated string storage */</span>
-00806 map_free_strings(map, ptr);
-00807
-00808 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>)
-00809 list_add(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
-00810 <span class="keywordflow">else</span>
-00811 <a class="code" href="alloc_8h.html#a6">_stp_free</a>(ptr);
-00812
-00813 map-&gt;<a class="code" href="structmap__root.html#o2">num</a>--;
-00814 ptr = next;
-00815 }
-00816 }
-00817
-00818 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o2">num</a> != 0) {
-00819 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: list is supposed to be empty (has %d)\n"</span>, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
-00820 }
-00821 }
-00822
-<a name="l00828"></a><a class="code" href="map_8c.html#a27">00828</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a27">_stp_list_add_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *str)
-00829 {
-00830 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
-00831 <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(map, str);
-00832 }
-00833
-<a name="l00839"></a><a class="code" href="map_8c.html#a28">00839</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a28">_stp_list_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
-00840 {
-00841 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
-00842 <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(map, val);
-00843 }
-00844
-<a name="l00850"></a><a class="code" href="map_8c.html#a29">00850</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="map_8c.html#a29">_stp_list_size</a>(<a class="code" href="structmap__root.html">MAP</a> map)
-00851 {
-00852 <span class="keywordflow">return</span> map-&gt;<a class="code" href="structmap__root.html#o2">num</a>;
-00853 }
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<a name="l00783"></a><a class="code" href="map_8c.html#a25">00783</a> <a class="code" href="structmap__root.html">MAP</a> <a class="code" href="map_8c.html#a25">_stp_list_new</a>(<span class="keywordtype">unsigned</span> max_entries, <span class="keyword">enum</span> valtype type)
+00784 {
+00785 <a class="code" href="structmap__root.html">MAP</a> map = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (max_entries, type);
+00786 map-&gt;<a class="code" href="structmap__root.html#o3">no_wrap</a> = 1;
+00787 <span class="keywordflow">return</span> map;
+00788 }
+00789 <span class="comment"></span>
+00790 <span class="comment">/** Clears a list.</span>
+00791 <span class="comment"> * All elements in the list are deleted.</span>
+00792 <span class="comment"> * @param map </span>
+00793 <span class="comment"> */</span>
+00794
+<a name="l00795"></a><a class="code" href="map_8c.html#a26">00795</a> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a26">_stp_list_clear</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00796 {
+00797 <span class="keywordflow">if</span> (map == NULL)
+00798 <span class="keywordflow">return</span>;
+00799
+00800 <span class="keywordflow">if</span> (!list_empty(&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>)) {
+00801 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *ptr = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)map-&gt;<a class="code" href="structmap__root.html#o4">head</a>.next;
+00802
+00803 <span class="keywordflow">while</span> (ptr &amp;&amp; ptr != (<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)&amp;map-&gt;<a class="code" href="structmap__root.html#o4">head</a>) {
+00804 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *next = (<span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *)ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>.next;
+00805
+00806 <span class="comment">/* remove node from old hash list */</span>
+00807 hlist_del_init(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o1">hnode</a>);
+00808
+00809 <span class="comment">/* remove from entry list */</span>
+00810 list_del(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>);
+00811
+00812 <span class="comment">/* remove any allocated string storage */</span>
+00813 map_free_strings(map, ptr);
+00814
+00815 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o1">maxnum</a>)
+00816 list_add(&amp;ptr-&gt;<a class="code" href="structmap__node.html#o0">lnode</a>, &amp;map-&gt;<a class="code" href="structmap__root.html#o5">pool</a>);
+00817 <span class="keywordflow">else</span>
+00818 _stp_free(ptr);
+00819
+00820 map-&gt;<a class="code" href="structmap__root.html#o2">num</a>--;
+00821 ptr = next;
+00822 }
+00823 }
+00824
+00825 <span class="keywordflow">if</span> (map-&gt;<a class="code" href="structmap__root.html#o2">num</a> != 0) {
+00826 dlog (<span class="stringliteral">"ERROR: list is supposed to be empty (has %d)\n"</span>, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
+00827 }
+00828 }
+00829 <span class="comment"></span>
+00830 <span class="comment">/** Adds a string to a list.</span>
+00831 <span class="comment"> * @param map</span>
+00832 <span class="comment"> * @param str</span>
+00833 <span class="comment"> */</span>
+00834
+<a name="l00835"></a><a class="code" href="map_8c.html#a27">00835</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a27">_stp_list_add_str</a>(<a class="code" href="structmap__root.html">MAP</a> map, <span class="keywordtype">char</span> *str)
+00836 {
+00837 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
+00838 <a class="code" href="map_8c.html#a20">_stp_map_set_str</a>(map, str);
+00839 }
+00840 <span class="comment"></span>
+00841 <span class="comment">/** Adds an int64 to a list.</span>
+00842 <span class="comment"> * @param map</span>
+00843 <span class="comment"> * @param val</span>
+00844 <span class="comment"> */</span>
+00845
+<a name="l00846"></a><a class="code" href="map_8c.html#a28">00846</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="map_8c.html#a28">_stp_list_add_int64</a>(<a class="code" href="structmap__root.html">MAP</a> map, int64_t val)
+00847 {
+00848 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a>(map, map-&gt;<a class="code" href="structmap__root.html#o2">num</a>);
+00849 <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a>(map, val);
+00850 }
+00851 <span class="comment"></span>
+00852 <span class="comment">/** Get the number of elements in a list.</span>
+00853 <span class="comment"> * @param map</span>
+00854 <span class="comment"> * @returns The number of elements in a list.</span>
+00855 <span class="comment"> */</span>
+00856
+<a name="l00857"></a><a class="code" href="map_8c.html#a29">00857</a> <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="map_8c.html#a29">_stp_list_size</a>(<a class="code" href="structmap__root.html">MAP</a> map)
+00858 {
+00859 <span class="keywordflow">return</span> map-&gt;<a class="code" href="structmap__root.html#o2">num</a>;
+00860 }
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/map_8c.html b/runtime/docs/html/map_8c.html
index d69f77a8..22df45e4 100644
--- a/runtime/docs/html/map_8c.html
+++ b/runtime/docs/html/map_8c.html
@@ -1,17 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map.c File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map.c File Reference</h1>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map.c File Reference</h1>Implements maps (associative arrays) and lists. <a href="#_details">More...</a>
+<p>
+
<p>
<a href="map_8c-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmap__root.html">MAP</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a3">_stp_map_new</a> (unsigned max_entries, enum <a class="el" href="map_8h.html#a19">valtype</a> type)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmap__root.html">MAP</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a3">_stp_map_new</a> (unsigned max_entries, enum valtype type)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new map. <a href="#a3"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a5">_stp_map_key_del</a> (<a class="el" href="structmap__root.html">MAP</a> map)</td></tr>
@@ -68,7 +69,7 @@
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a24">_stp_map_stat_add</a> (<a class="el" href="structmap__root.html">MAP</a> map, int64_t val)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add to the current element's statistics. <a href="#a24"></a><br></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmap__root.html">MAP</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a25">_stp_list_new</a> (unsigned max_entries, enum <a class="el" href="map_8h.html#a19">valtype</a> type)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmap__root.html">MAP</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a25">_stp_list_new</a> (unsigned max_entries, enum valtype type)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new list. <a href="#a25"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8c.html#a26">_stp_list_clear</a> (<a class="el" href="structmap__root.html">MAP</a> map)</td></tr>
@@ -84,7 +85,12 @@
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of elements in a list. <a href="#a29"></a><br></td></tr>
</table>
-<hr><h2>Function Documentation</h2>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Implements maps (associative arrays) and lists.
+<p>
+
+<p>
+Definition in file <a class="el" href="map_8c-source.html">map.c</a>.<hr><h2>Function Documentation</h2>
<a class="anchor" name="a28" doxytag="map.c::_stp_list_add_int64"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
@@ -129,9 +135,9 @@ Adds an int64 to a list.
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00839">839</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00846">846</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8c-source.html#l00415">_stp_map_key_long()</a>, <a class="el" href="map_8c-source.html#l00525">_stp_map_set_int64()</a>, and <a class="el" href="map_8h-source.html#l00053">map_root::num</a>. </td>
+References <a class="el" href="map_8c-source.html#l00420">_stp_map_key_long()</a>, <a class="el" href="map_8c-source.html#l00531">_stp_map_set_int64()</a>, and <a class="el" href="map_8h-source.html#l00062">map_root::num</a>. </td>
</tr>
</table>
<a class="anchor" name="a27" doxytag="map.c::_stp_list_add_str"></a><p>
@@ -178,11 +184,9 @@ Adds a string to a list.
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00828">828</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
-<p>
-References <a class="el" href="map_8c-source.html#l00415">_stp_map_key_long()</a>, <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>, and <a class="el" href="map_8h-source.html#l00053">map_root::num</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00835">835</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-Referenced by <a class="el" href="copy_8c-source.html#l00115">_stp_copy_argv_from_user()</a>. </td>
+References <a class="el" href="map_8c-source.html#l00420">_stp_map_key_long()</a>, <a class="el" href="map_8c-source.html#l00578">_stp_map_set_str()</a>, and <a class="el" href="map_8h-source.html#l00062">map_root::num</a>. </td>
</tr>
</table>
<a class="anchor" name="a26" doxytag="map.c::_stp_list_clear"></a><p>
@@ -196,7 +200,7 @@ Referenced by <a class="el" href="copy_8c-source.html#l00115">_stp_copy_argv_fro
<td class="md" nowrap valign="top"><a class="el" href="structmap__root.html">MAP</a>&nbsp;</td>
<td class="mdname1" valign="top" nowrap> <em>map</em> </td>
<td class="md" valign="top">&nbsp;)&nbsp;</td>
- <td class="md" nowrap><code> [inline]</code></td>
+ <td class="md" nowrap></td>
</tr>
</table>
</td>
@@ -219,9 +223,9 @@ All elements in the list are deleted. <dl compact><dt><b>Parameters:</b></dt><dd
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00788">788</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00795">795</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00057">_stp_free()</a>, <a class="el" href="io_8c-source.html#l00011">dlog()</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, <a class="el" href="map_8h-source.html#l00022">map_node::hnode</a>, <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>, <a class="el" href="map_8h-source.html#l00050">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00053">map_root::num</a>, and <a class="el" href="map_8h-source.html#l00063">map_root::pool</a>. </td>
+References <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, <a class="el" href="map_8h-source.html#l00031">map_node::hnode</a>, <a class="el" href="map_8h-source.html#l00030">map_node::lnode</a>, <a class="el" href="map_8h-source.html#l00059">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00062">map_root::num</a>, and <a class="el" href="map_8h-source.html#l00072">map_root::pool</a>. </td>
</tr>
</table>
<a class="anchor" name="a25" doxytag="map.c::_stp_list_new"></a><p>
@@ -238,7 +242,7 @@ References <a class="el" href="alloc_8h-source.html#l00057">_stp_free()</a>, <a
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
- <td class="md" nowrap>enum <a class="el" href="map_8h.html#a19">valtype</a>&nbsp;</td>
+ <td class="md" nowrap>enum valtype&nbsp;</td>
<td class="mdname" nowrap> <em>type</em></td>
</tr>
<tr>
@@ -270,9 +274,9 @@ A list is a map that internally has an incrementing long key for each member. Li
<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="map_8h.html#a8">foreach</a> </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00776">776</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00783">783</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>, and <a class="el" href="map_8h-source.html#l00056">map_root::no_wrap</a>. </td>
+References <a class="el" href="map_8c-source.html#l00047">_stp_map_new()</a>, and <a class="el" href="map_8h-source.html#l00065">map_root::no_wrap</a>. </td>
</tr>
</table>
<a class="anchor" name="a29" doxytag="map.c::_stp_list_size"></a><p>
@@ -310,9 +314,9 @@ Get the number of elements in a list.
<dl compact><dt><b>Returns:</b></dt><dd>The number of elements in a list. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00850">850</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00857">857</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00053">map_root::num</a>. </td>
+References <a class="el" href="map_8h-source.html#l00062">map_root::num</a>. </td>
</tr>
</table>
<a class="anchor" name="a18" doxytag="map.c::_stp_map_add_int64"></a><p>
@@ -358,9 +362,10 @@ If the element doesn't exist, it is created. If no current element (key) is set
<tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>value </td></tr>
</table>
</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="map_8c.html#a17">_stp_map_set_int64</a> </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00541">541</a> of file <a class="el" href="map_8c-source.html">map.c</a>. </td>
+Definition at line <a class="el" href="map_8c-source.html#l00548">548</a> of file <a class="el" href="map_8c-source.html">map.c</a>. </td>
</tr>
</table>
<a class="anchor" name="a8" doxytag="map.c::_stp_map_del"></a><p>
@@ -397,9 +402,9 @@ Deletes a map, freeing all memory in all elements. Normally done only when the m
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00190">190</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00195">195</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00067">_stp_vfree()</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>, and <a class="el" href="map_8h-source.html#l00081">map_root::membuf</a>. </td>
+References <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, <a class="el" href="map_8h-source.html#l00030">map_node::lnode</a>, and <a class="el" href="map_8h-source.html#l00090">map_root::membuf</a>. </td>
</tr>
</table>
<a class="anchor" name="a19" doxytag="map.c::_stp_map_get_int64"></a><p>
@@ -437,9 +442,9 @@ Gets the current element's value.
<dl compact><dt><b>Returns:</b></dt><dd>The value. If the current element is not set or doesn't exist, returns 0. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00551">551</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00558">558</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, and <a class="el" href="map_8h-source.html#l00032">map_node_int64::val</a>. </td>
+References <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, and <a class="el" href="map_8h-source.html#l00075">map_root::key</a>. </td>
</tr>
</table>
<a class="anchor" name="a23" doxytag="map.c::_stp_map_get_stat"></a><p>
@@ -477,9 +482,9 @@ Gets the current element's value.
<dl compact><dt><b>Returns:</b></dt><dd>A pointer to the stats struct. If the current element is not set or doesn't exist, returns NULL. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00715">715</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00722">722</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, and <a class="el" href="map_8h-source.html#l00042">map_node_stat::stats</a>. </td>
+References <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, and <a class="el" href="map_8h-source.html#l00075">map_root::key</a>. </td>
</tr>
</table>
<a class="anchor" name="a21" doxytag="map.c::_stp_map_get_str"></a><p>
@@ -517,9 +522,9 @@ Gets the current element's value.
<dl compact><dt><b>Returns:</b></dt><dd>A string pointer. If the current element is not set or doesn't exist, returns NULL. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00632">632</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00639">639</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, and <a class="el" href="map_8h-source.html#l00037">map_node_str::str</a>. </td>
+References <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, and <a class="el" href="map_8h-source.html#l00075">map_root::key</a>. </td>
</tr>
</table>
<a class="anchor" name="a7" doxytag="map.c::_stp_map_iter"></a><p>
@@ -568,9 +573,9 @@ Get the next element in a map.
<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="map_8h.html#a8">foreach</a> </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00172">172</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00176">176</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, and <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>. </td>
+References <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, and <a class="el" href="map_8h-source.html#l00030">map_node::lnode</a>. </td>
</tr>
</table>
<a class="anchor" name="a5" doxytag="map.c::_stp_map_key_del"></a><p>
@@ -607,11 +612,11 @@ If no current element (key) for this map is set, this function does nothing. <dl
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00104">104</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00108">108</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00057">_stp_free()</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00022">map_node::hnode</a>, and <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>.
+References <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00031">map_node::hnode</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, and <a class="el" href="map_8h-source.html#l00030">map_node::lnode</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00663">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00578">_stp_map_set_str()</a>. </td>
</tr>
</table>
<a class="anchor" name="a14" doxytag="map.c::_stp_map_key_long"></a><p>
@@ -658,11 +663,11 @@ This sets the current element based on a long key. If the key is not found, a ne
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00415">415</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00420">420</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, and <a class="el" href="map_8h.html#a18a11">NONE</a>.
+References <a class="el" href="map_8c-source.html#l00223">_stp_map_key_long_long()</a>, and <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00839">_stp_list_add_int64()</a>, and <a class="el" href="map_8c-source.html#l00828">_stp_list_add_str()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00846">_stp_list_add_int64()</a>, and <a class="el" href="map_8c-source.html#l00835">_stp_list_add_str()</a>. </td>
</tr>
</table>
<a class="anchor" name="a9" doxytag="map.c::_stp_map_key_long_long"></a><p>
@@ -716,11 +721,11 @@ This sets the current element based on a key of two strings. If the keys are not
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00218">218</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00223">223</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00074">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00071">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00075">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00073">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00078">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00023">map_node::key1</a>, <a class="el" href="map_8h.html#a18a12">LONG</a>, and <a class="el" href="map_8h-source.html#l00012">key_data::val</a>.
+References <a class="el" href="map_8h-source.html#l00083">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00080">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00084">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00082">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00087">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00032">map_node::key1</a>, and <a class="el" href="map_8h-source.html#l00020">key_data::val</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00415">_stp_map_key_long()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00420">_stp_map_key_long()</a>. </td>
</tr>
</table>
<a class="anchor" name="a12" doxytag="map.c::_stp_map_key_long_str"></a><p>
@@ -774,9 +779,9 @@ This sets the current element based on a key of a long and a string. If the keys
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00358">358</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00363">363</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00074">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00071">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00075">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00073">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00078">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00023">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00024">map_node::key2</a>, <a class="el" href="map_8h.html#a18a12">LONG</a>, <a class="el" href="map_8h.html#a18a13">STR</a>, <a class="el" href="map_8h-source.html#l00013">key_data::str</a>, and <a class="el" href="map_8h-source.html#l00012">key_data::val</a>. </td>
+References <a class="el" href="map_8h-source.html#l00083">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00080">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00084">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00082">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00087">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00032">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00033">map_node::key2</a>, <a class="el" href="map_8h-source.html#l00021">key_data::str</a>, and <a class="el" href="map_8h-source.html#l00020">key_data::val</a>. </td>
</tr>
</table>
<a class="anchor" name="a13" doxytag="map.c::_stp_map_key_str"></a><p>
@@ -823,9 +828,9 @@ This sets the current element based on a string key. If the key is not found, a
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00399">399</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00404">404</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, and <a class="el" href="map_8h.html#a18a11">NONE</a>. </td>
+References <a class="el" href="map_8c-source.html#l00266">_stp_map_key_str_str()</a>, and <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>. </td>
</tr>
</table>
<a class="anchor" name="a11" doxytag="map.c::_stp_map_key_str_long"></a><p>
@@ -879,9 +884,9 @@ This sets the current element based on a key of a string and a long. If the keys
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00310">310</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00315">315</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00074">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00071">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00075">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00073">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00078">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00023">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00024">map_node::key2</a>, <a class="el" href="map_8h.html#a18a12">LONG</a>, <a class="el" href="map_8h.html#a18a13">STR</a>, <a class="el" href="map_8h-source.html#l00013">key_data::str</a>, and <a class="el" href="map_8h-source.html#l00012">key_data::val</a>. </td>
+References <a class="el" href="map_8h-source.html#l00083">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00080">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00084">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00082">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00087">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00032">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00033">map_node::key2</a>, <a class="el" href="map_8h-source.html#l00021">key_data::str</a>, and <a class="el" href="map_8h-source.html#l00020">key_data::val</a>. </td>
</tr>
</table>
<a class="anchor" name="a10" doxytag="map.c::_stp_map_key_str_str"></a><p>
@@ -935,11 +940,11 @@ This sets the current element based on a key of two strings. If the keys are not
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00261">261</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00266">266</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8h-source.html#l00074">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00071">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00075">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00072">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00073">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00078">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00023">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00024">map_node::key2</a>, <a class="el" href="map_8h.html#a18a13">STR</a>, and <a class="el" href="map_8h-source.html#l00013">key_data::str</a>.
+References <a class="el" href="map_8h-source.html#l00083">map_root::c_key1</a>, <a class="el" href="map_8h-source.html#l00080">map_root::c_key1type</a>, <a class="el" href="map_8h-source.html#l00084">map_root::c_key2</a>, <a class="el" href="map_8h-source.html#l00081">map_root::c_key2type</a>, <a class="el" href="map_8h-source.html#l00082">map_root::c_keyhead</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00087">map_root::hashes</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00032">map_node::key1</a>, <a class="el" href="map_8h-source.html#l00033">map_node::key2</a>, and <a class="el" href="map_8h-source.html#l00021">key_data::str</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00399">_stp_map_key_str()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00404">_stp_map_key_str()</a>. </td>
</tr>
</table>
<a class="anchor" name="a3" doxytag="map.c::_stp_map_new"></a><p>
@@ -956,7 +961,7 @@ Referenced by <a class="el" href="map_8c-source.html#l00399">_stp_map_key_str()<
<tr>
<td class="md" nowrap align="right"></td>
<td class="md"></td>
- <td class="md" nowrap>enum <a class="el" href="map_8h.html#a19">valtype</a>&nbsp;</td>
+ <td class="md" nowrap>enum valtype&nbsp;</td>
<td class="mdname" nowrap> <em>type</em></td>
</tr>
<tr>
@@ -987,11 +992,11 @@ Maps must be created at module initialization time. <dl compact><dt><b>Parameter
<dl compact><dt><b>Returns:</b></dt><dd>A MAP on success or NULL on failure. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00043">43</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00047">47</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00043">_stp_valloc()</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h.html#a19a17">END</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, <a class="el" href="map_8h-source.html#l00050">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00081">map_root::membuf</a>, <a class="el" href="map_8h-source.html#l00063">map_root::pool</a>, and <a class="el" href="map_8h-source.html#l00047">map_root::type</a>.
+References <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, <a class="el" href="map_8h-source.html#l00059">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00090">map_root::membuf</a>, <a class="el" href="map_8h-source.html#l00072">map_root::pool</a>, and <a class="el" href="map_8h-source.html#l00058">map_root::type</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00776">_stp_list_new()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00783">_stp_list_new()</a>. </td>
</tr>
</table>
<a class="anchor" name="a17" doxytag="map.c::_stp_map_set_int64"></a><p>
@@ -1037,11 +1042,12 @@ If the element doesn't exist, it is created. If no current element (key) is set
<tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>new value </td></tr>
</table>
</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="map_8c.html#a18">_stp_map_add_int64</a> </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00525">525</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00531">531</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00839">_stp_list_add_int64()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00846">_stp_list_add_int64()</a>. </td>
</tr>
</table>
<a class="anchor" name="a22" doxytag="map.c::_stp_map_set_stat"></a><p>
@@ -1090,11 +1096,11 @@ If the element doesn't exist, it is created. If no current element (key) is set
<dl compact><dt><b><a class="el" href="todo.html#_todo000002">Todo:</a></b></dt><dd>Histograms don't work yet. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00656">656</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00663">663</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00028">_stp_calloc()</a>, <a class="el" href="map_8c-source.html#l00104">_stp_map_key_del()</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, <a class="el" href="map_8h-source.html#l00022">map_node::hnode</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>, <a class="el" href="map_8h-source.html#l00050">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00041">map_node_stat::n</a>, <a class="el" href="map_8h-source.html#l00056">map_root::no_wrap</a>, <a class="el" href="map_8h-source.html#l00063">map_root::pool</a>, and <a class="el" href="map_8h-source.html#l00042">map_node_stat::stats</a>.
+References <a class="el" href="map_8c-source.html#l00108">_stp_map_key_del()</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00059">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00065">map_root::no_wrap</a>, and <a class="el" href="map_8h-source.html#l00072">map_root::pool</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00743">_stp_map_stat_add()</a>. </td>
</tr>
</table>
<a class="anchor" name="a20" doxytag="map.c::_stp_map_set_str"></a><p>
@@ -1142,11 +1148,11 @@ If the element doesn't exist, it is created. If no current element (key) is set
</dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00571">571</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00578">578</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="alloc_8h-source.html#l00012">_stp_alloc()</a>, <a class="el" href="alloc_8h-source.html#l00028">_stp_calloc()</a>, <a class="el" href="alloc_8h-source.html#l00057">_stp_free()</a>, <a class="el" href="map_8c-source.html#l00104">_stp_map_key_del()</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00059">map_root::head</a>, <a class="el" href="map_8h-source.html#l00022">map_node::hnode</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00021">map_node::lnode</a>, <a class="el" href="map_8h-source.html#l00050">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00036">map_node_str::n</a>, <a class="el" href="map_8h-source.html#l00056">map_root::no_wrap</a>, <a class="el" href="map_8h-source.html#l00063">map_root::pool</a>, and <a class="el" href="map_8h-source.html#l00037">map_node_str::str</a>.
+References <a class="el" href="map_8c-source.html#l00108">_stp_map_key_del()</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, <a class="el" href="map_8h-source.html#l00068">map_root::head</a>, <a class="el" href="map_8h-source.html#l00075">map_root::key</a>, <a class="el" href="map_8h-source.html#l00059">map_root::maxnum</a>, <a class="el" href="map_8h-source.html#l00065">map_root::no_wrap</a>, and <a class="el" href="map_8h-source.html#l00072">map_root::pool</a>.
<p>
-Referenced by <a class="el" href="map_8c-source.html#l00828">_stp_list_add_str()</a>. </td>
+Referenced by <a class="el" href="map_8c-source.html#l00835">_stp_list_add_str()</a>. </td>
</tr>
</table>
<a class="anchor" name="a6" doxytag="map.c::_stp_map_start"></a><p>
@@ -1185,9 +1191,9 @@ Get the first element in a map.
<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="map_8h.html#a8">foreach</a> </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00149">149</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00153">153</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, and <a class="el" href="map_8h-source.html#l00059">map_root::head</a>. </td>
+References <a class="el" href="map_8h-source.html#l00068">map_root::head</a>. </td>
</tr>
</table>
<a class="anchor" name="a24" doxytag="map.c::_stp_map_stat_add"></a><p>
@@ -1236,13 +1242,11 @@ If the element doesn't exist, it is created. If no current element (key) is set
<dl compact><dt><b><a class="el" href="todo.html#_todo000003">Todo:</a></b></dt><dd>Histograms don't work yet. </dd></dl>
<p>
-Definition at line <a class="el" href="map_8c-source.html#l00736">736</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
+Definition at line <a class="el" href="map_8c-source.html#l00743">743</a> of file <a class="el" href="map_8c-source.html">map.c</a>.
<p>
-References <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, <a class="el" href="map_8h-source.html#l00005">stat::count</a>, <a class="el" href="map_8h-source.html#l00070">map_root::create</a>, <a class="el" href="runtime_8h-source.html#l00020">dbug</a>, <a class="el" href="map_8h-source.html#l00066">map_root::key</a>, <a class="el" href="map_8h-source.html#l00007">stat::max</a>, <a class="el" href="map_8h-source.html#l00007">stat::min</a>, <a class="el" href="map_8h-source.html#l00042">map_node_stat::stats</a>, and <a class="el" href="map_8h-source.html#l00006">stat::sum</a>. </td>
+References <a class="el" href="map_8c-source.html#l00663">_stp_map_set_stat()</a>, <a class="el" href="map_8h-source.html#l00079">map_root::create</a>, and <a class="el" href="map_8h-source.html#l00075">map_root::key</a>. </td>
</tr>
</table>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/map_8h-source.html b/runtime/docs/html/map_8h-source.html
index 7ecc890f..443fb9c9 100644
--- a/runtime/docs/html/map_8h-source.html
+++ b/runtime/docs/html/map_8h-source.html
@@ -1,146 +1,162 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map.h</h1><a href="map_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
-00002 <span class="preprocessor">#include &lt;linux/types.h&gt;</span>
-00003
-<a name="l00004"></a><a class="code" href="structstat.html">00004</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
-<a name="l00005"></a><a class="code" href="structstat.html#o0">00005</a> int64_t count;
-<a name="l00006"></a><a class="code" href="structstat.html#o1">00006</a> int64_t sum;
-<a name="l00007"></a><a class="code" href="structstat.html#o2">00007</a> int64_t min, max;
-<a name="l00008"></a><a class="code" href="structstat.html#o4">00008</a> int64_t histogram[BUCKETS];
-00009 } <a class="code" href="structstat.html">stat</a>;
-00010
-<a name="l00011"></a><a class="code" href="unionkey__data.html">00011</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> {
-<a name="l00012"></a><a class="code" href="unionkey__data.html#o0">00012</a> <span class="keywordtype">long</span> <a class="code" href="unionkey__data.html#o0">val</a>;
-<a name="l00013"></a><a class="code" href="unionkey__data.html#o1">00013</a> <span class="keywordtype">char</span> *<a class="code" href="unionkey__data.html#o1">str</a>;
-00014 };
-00015
-<a name="l00016"></a><a class="code" href="map_8h.html#a18">00016</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> { <a class="code" href="map_8h.html#a18a11">NONE</a>, <a class="code" href="map_8h.html#a18a12">LONG</a>, <a class="code" href="map_8h.html#a18a13">STR</a> } __attribute__ ((packed));
-<a name="l00017"></a><a class="code" href="map_8h.html#a19">00017</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a19">valtype</a> { <a class="code" href="map_8h.html#a19a14">INT64</a>, <a class="code" href="map_8h.html#a19a15">STAT</a>, <a class="code" href="map_8h.html#a19a16">STRING</a>, <a class="code" href="map_8h.html#a19a17">END</a> };
-00018
-00019 <span class="comment">/* all map nodes have the following structure */</span>
-<a name="l00020"></a><a class="code" href="structmap__node.html">00020</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> {
-<a name="l00021"></a><a class="code" href="structmap__node.html#o0">00021</a> <span class="keyword">struct </span>list_head lnode;
-<a name="l00022"></a><a class="code" href="structmap__node.html#o1">00022</a> <span class="keyword">struct </span>hlist_node hnode;
-<a name="l00023"></a><a class="code" href="structmap__node.html#o2">00023</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key1;
-<a name="l00024"></a><a class="code" href="structmap__node.html#o3">00024</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key2;
-<a name="l00025"></a><a class="code" href="structmap__node.html#o4">00025</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__node.html#o4">key1type</a>;
-<a name="l00026"></a><a class="code" href="structmap__node.html#o5">00026</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__node.html#o5">key2type</a>;
-00027 };
-00028
-00029 <span class="comment">/* specific map nodes with data attached */</span>
-<a name="l00030"></a><a class="code" href="structmap__node__int64.html">00030</a> <span class="keyword">struct </span><a class="code" href="structmap__node__int64.html">map_node_int64</a> {
-<a name="l00031"></a><a class="code" href="structmap__node__int64.html#o0">00031</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
-<a name="l00032"></a><a class="code" href="structmap__node__int64.html#o1">00032</a> int64_t <a class="code" href="structmap__node__int64.html#o1">val</a>;
-00033 };
-00034
-<a name="l00035"></a><a class="code" href="structmap__node__str.html">00035</a> <span class="keyword">struct </span><a class="code" href="structmap__node__str.html">map_node_str</a> {
-<a name="l00036"></a><a class="code" href="structmap__node__str.html#o0">00036</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
-<a name="l00037"></a><a class="code" href="structmap__node__str.html#o1">00037</a> <span class="keywordtype">char</span> *<a class="code" href="structmap__node__str.html#o1">str</a>;
-00038 };
-00039
-<a name="l00040"></a><a class="code" href="structmap__node__stat.html">00040</a> <span class="keyword">struct </span><a class="code" href="structmap__node__stat.html">map_node_stat</a> {
-<a name="l00041"></a><a class="code" href="structmap__node__stat.html#o0">00041</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
-<a name="l00042"></a><a class="code" href="structmap__node__stat.html#o1">00042</a> <a class="code" href="structstat.html">stat</a> <a class="code" href="structmap__node__stat.html#o1">stats</a>;
-00043 };
-00044
-<a name="l00045"></a><a class="code" href="structmap__root.html">00045</a> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> {
-00046 <span class="comment">/* type of the values stored in the array */</span>
-<a name="l00047"></a><a class="code" href="structmap__root.html#o0">00047</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a19">valtype</a> <a class="code" href="structmap__root.html#o0">type</a>;
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map.h</h1><a href="map_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span><span class="comment"></span>
+00002 <span class="comment">/** @file map.h</span>
+00003 <span class="comment"> * @brief Header file for maps and lists</span>
+00004 <span class="comment"> */</span>
+00005
+00006 <span class="preprocessor">#include &lt;linux/types.h&gt;</span>
+00007 <span class="comment"></span>
+00008 <span class="comment">/** Statistics are stored in this struct</span>
+00009 <span class="comment">*/</span>
+<a name="l00010"></a><a class="code" href="structstat.html">00010</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+00011 int64_t count;
+00012 int64_t sum;
+00013 int64_t min, max;
+00014 int64_t histogram[BUCKETS];
+00015 } <a class="code" href="structstat.html">stat</a>;
+00016 <span class="comment"></span>
+00017 <span class="comment">/** Keys are either longs or char *</span>
+00018 <span class="comment"> */</span>
+<a name="l00019"></a><a class="code" href="unionkey__data.html">00019</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> {
+00020 <span class="keywordtype">long</span> val;
+00021 <span class="keywordtype">char</span> *str;
+00022 };
+00023
+00024 <span class="keyword">enum</span> keytype { NONE, LONG, STR } __attribute__ ((packed));
+00025 <span class="keyword">enum</span> valtype { INT64, STAT, STRING, END };
+00026 <span class="comment"></span>
+00027 <span class="comment">/** all map nodes have the following structure </span>
+00028 <span class="comment">*/</span>
+<a name="l00029"></a><a class="code" href="structmap__node.html">00029</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> {
+00030 <span class="keyword">struct </span>list_head lnode;
+00031 <span class="keyword">struct </span>hlist_node hnode;
+00032 <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key1;
+00033 <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> key2;
+00034 <span class="keyword">enum</span> keytype key1type;
+00035 <span class="keyword">enum</span> keytype key2type;
+00036 };
+00037
+00038 <span class="comment">/* specific map nodes with data attached */</span>
+00039 <span class="keyword">struct </span>map_node_int64 {
+00040 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
+00041 int64_t val;
+00042 };
+00043
+00044 <span class="keyword">struct </span>map_node_str {
+00045 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
+00046 <span class="keywordtype">char</span> *str;
+00047 };
00048
-00049 <span class="comment">/* maximum number of elements allowed in the array. */</span>
-<a name="l00050"></a><a class="code" href="structmap__root.html#o1">00050</a> <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o1">maxnum</a>;
-00051
-00052 <span class="comment">/* current number of elements */</span>
-<a name="l00053"></a><a class="code" href="structmap__root.html#o2">00053</a> <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o2">num</a>;
-00054
-00055 <span class="comment">/* when more than maxnum elements, wrap or discard */</span>
-<a name="l00056"></a><a class="code" href="structmap__root.html#o3">00056</a> <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o3">no_wrap</a>;
-00057
-00058 <span class="comment">/* linked list of current entries */</span>
-<a name="l00059"></a><a class="code" href="structmap__root.html#o4">00059</a> <span class="keyword">struct </span>list_head head;
+00049 <span class="keyword">struct </span>map_node_stat {
+00050 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> n;
+00051 <a class="code" href="structstat.html">stat</a> stats;
+00052 };
+00053 <span class="comment"></span>
+00054 <span class="comment">/** This structure contains all information about a map.</span>
+00055 <span class="comment"> * It is allocated once when _stp_map_new() is called.</span>
+00056 <span class="comment"> */</span>
+<a name="l00057"></a><a class="code" href="structmap__root.html">00057</a> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> {
+00058 <span class="keyword">enum</span> valtype type; <span class="comment">/** type of the values stored in the array */</span>
+<a name="l00059"></a><a class="code" href="structmap__root.html#o1">00059</a> <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o1">maxnum</a>; <span class="comment">/** maximum number of elements allowed in the array. */</span>
00060
-00061 <span class="comment">/* pool of unused entries. Used only when entries are statically allocated */</span>
-00062 <span class="comment">/* at startup. */</span>
-<a name="l00063"></a><a class="code" href="structmap__root.html#o5">00063</a> <span class="keyword">struct </span>list_head pool;
-00064
-00065 <span class="comment">/* saved key entry for lookups */</span>
-<a name="l00066"></a><a class="code" href="structmap__root.html#o6">00066</a> <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *<a class="code" href="structmap__root.html#o6">key</a>;
-00067
-00068 <span class="comment">/* this is the creation data saved between the key functions and the */</span>
-00069 <span class="comment">/* set/get functions */</span>
-<a name="l00070"></a><a class="code" href="structmap__root.html#o7">00070</a> u_int8_t <a class="code" href="structmap__root.html#o7">create</a>;
-<a name="l00071"></a><a class="code" href="structmap__root.html#o8">00071</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__root.html#o8">c_key1type</a>;
-<a name="l00072"></a><a class="code" href="structmap__root.html#o9">00072</a> <span class="keyword">enum</span> <a class="code" href="map_8h.html#a18">keytype</a> <a class="code" href="structmap__root.html#o9">c_key2type</a>;
-<a name="l00073"></a><a class="code" href="structmap__root.html#o10">00073</a> <span class="keyword">struct </span>hlist_head *<a class="code" href="structmap__root.html#o10">c_keyhead</a>;
-<a name="l00074"></a><a class="code" href="structmap__root.html#o11">00074</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key1;
-<a name="l00075"></a><a class="code" href="structmap__root.html#o12">00075</a> <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key2;
+00061 <span class="comment">/* current number of elements */</span>
+<a name="l00062"></a><a class="code" href="structmap__root.html#o2">00062</a> <span class="keywordtype">int</span> <a class="code" href="structmap__root.html#o2">num</a>;
+00063
+00064 <span class="comment">/* when more than maxnum elements, wrap or discard */</span>
+00065 <span class="keywordtype">int</span> no_wrap;
+00066
+00067 <span class="comment">/* linked list of current entries */</span>
+00068 <span class="keyword">struct </span>list_head head;
+00069
+00070 <span class="comment">/* pool of unused entries. Used only when entries are statically allocated */</span>
+00071 <span class="comment">/* at startup. */</span>
+00072 <span class="keyword">struct </span>list_head pool;
+00073
+00074 <span class="comment">/* saved key entry for lookups */</span>
+00075 <span class="keyword">struct </span><a class="code" href="structmap__node.html">map_node</a> *key;
00076
-00077 <span class="comment">/* the hash table for this array */</span>
-<a name="l00078"></a><a class="code" href="structmap__root.html#o13">00078</a> <span class="keyword">struct </span>hlist_head hashes[HASH_TABLE_SIZE];
-00079
-00080 <span class="comment">/* pointer to allocated memory space */</span>
-<a name="l00081"></a><a class="code" href="structmap__root.html#o14">00081</a> <span class="keywordtype">void</span> *<a class="code" href="structmap__root.html#o14">membuf</a>;
-00082 };
-00083
-<a name="l00084"></a><a class="code" href="map_8h.html#a10">00084</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> *<a class="code" href="structmap__root.html">MAP</a>;
+00077 <span class="comment">/* this is the creation data saved between the key functions and the */</span>
+00078 <span class="comment">/* set/get functions */</span>
+00079 u_int8_t create;
+00080 <span class="keyword">enum</span> keytype c_key1type;
+00081 <span class="keyword">enum</span> keytype c_key2type;
+00082 <span class="keyword">struct </span>hlist_head *c_keyhead;
+00083 <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key1;
+00084 <span class="keyword">union </span><a class="code" href="unionkey__data.html">key_data</a> c_key2;
00085
-<a name="l00086"></a><a class="code" href="map_8h.html#a0">00086</a> <span class="preprocessor">#define key1str(ptr) (ptr-&gt;n.key1.str)</span>
-<a name="l00087"></a><a class="code" href="map_8h.html#a1">00087</a> <span class="preprocessor"></span><span class="preprocessor">#define key2str(ptr) (ptr-&gt;n.key2.str)</span>
-<a name="l00088"></a><a class="code" href="map_8h.html#a2">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define key1int(ptr) (ptr-&gt;n.key1.val)</span>
-<a name="l00089"></a><a class="code" href="map_8h.html#a3">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define key2int(ptr) (ptr-&gt;n.key2.val)</span>
-00090 <span class="preprocessor"></span>
-<a name="l00091"></a><a class="code" href="map_8h.html#a4">00091</a> <span class="preprocessor">#define _stp_map_key2(map, key1, key2) \</span>
-00092 <span class="preprocessor"> ({ \</span>
-00093 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key1), char[])) \</span>
-00094 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
-00095 <span class="preprocessor"> _stp_map_key_str_str (map, (char *)(key1), (char *)(key2)); \</span>
-00096 <span class="preprocessor"> else \</span>
-00097 <span class="preprocessor"> _stp_map_key_str_long (map, (char *)(key1), (long)(key2)); \</span>
-00098 <span class="preprocessor"> else \</span>
-00099 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
-00100 <span class="preprocessor"> _stp_map_key_long_str (map, (long)(key1), (char *)(key2)); \</span>
-00101 <span class="preprocessor"> else \</span>
-00102 <span class="preprocessor"> _stp_map_key_long_long (map, (long)(key1), (long)(key2)); \</span>
-00103 <span class="preprocessor"> })</span>
-00104 <span class="preprocessor"></span>
-<a name="l00105"></a><a class="code" href="map_8h.html#a5">00105</a> <span class="preprocessor">#define _stp_map_key(map, key) \</span>
-00106 <span class="preprocessor"> ({ \</span>
-00107 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key), char[])) \</span>
-00108 <span class="preprocessor"> _stp_map_key_str (map, (char *)(key)); \</span>
+00086 <span class="comment">/* the hash table for this array */</span>
+00087 <span class="keyword">struct </span>hlist_head hashes[HASH_TABLE_SIZE];
+00088
+00089 <span class="comment">/* pointer to allocated memory space */</span>
+00090 <span class="keywordtype">void</span> *membuf;
+00091 };
+00092 <span class="comment"></span>
+00093 <span class="comment">/** All maps are of this type.</span>
+00094 <span class="comment"> */</span>
+<a name="l00095"></a><a class="code" href="map_8h.html#a10">00095</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structmap__root.html">map_root</a> *<a class="code" href="structmap__root.html">MAP</a>;
+00096
+00097 <span class="preprocessor">#define key1str(ptr) (ptr-&gt;n.key1.str)</span>
+00098 <span class="preprocessor"></span><span class="preprocessor">#define key2str(ptr) (ptr-&gt;n.key2.str)</span>
+00099 <span class="preprocessor"></span><span class="preprocessor">#define key1int(ptr) (ptr-&gt;n.key1.val)</span>
+00100 <span class="preprocessor"></span><span class="preprocessor">#define key2int(ptr) (ptr-&gt;n.key2.val)</span>
+00101 <span class="preprocessor"></span>
+00102 <span class="preprocessor">#define _stp_map_key2(map, key1, key2) \</span>
+00103 <span class="preprocessor"> ({ \</span>
+00104 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key1), char[])) \</span>
+00105 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
+00106 <span class="preprocessor"> _stp_map_key_str_str (map, (char *)(key1), (char *)(key2)); \</span>
+00107 <span class="preprocessor"> else \</span>
+00108 <span class="preprocessor"> _stp_map_key_str_long (map, (char *)(key1), (long)(key2)); \</span>
00109 <span class="preprocessor"> else \</span>
-00110 <span class="preprocessor"> _stp_map_key_long (map, (long)(key)); \</span>
-00111 <span class="preprocessor"> })</span>
-00112 <span class="preprocessor"></span>
-<a name="l00113"></a><a class="code" href="map_8h.html#a6">00113</a> <span class="preprocessor">#define _stp_map_set(map, val) \</span>
-00114 <span class="preprocessor"> ({ \</span>
-00115 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (val), char[])) \</span>
-00116 <span class="preprocessor"> _stp_map_set_str (map, (char *)(val)); \</span>
-00117 <span class="preprocessor"> else \</span>
-00118 <span class="preprocessor"> _stp_map_set_int64 (map, (int64_t)(val)); \</span>
-00119 <span class="preprocessor"> })</span>
-00120 <span class="preprocessor"></span>
-<a name="l00121"></a><a class="code" href="map_8h.html#a7">00121</a> <span class="preprocessor">#define _stp_list_add(map, val) \</span>
-00122 <span class="preprocessor"> ({ \</span>
-00123 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (val), char[])) \</span>
-00124 <span class="preprocessor"> _stp_list_add_str (map, (char *)(val)); \</span>
-00125 <span class="preprocessor"> else \</span>
-00126 <span class="preprocessor"> _stp_list_add_int64 (map, (int64_t)(val)); \</span>
-00127 <span class="preprocessor"> })</span>
-00128 <span class="preprocessor"></span>
-00129
-<a name="l00138"></a><a class="code" href="map_8h.html#a8">00138</a> <span class="preprocessor">#define foreach(map, ptr) \</span>
-00139 <span class="preprocessor"> for (ptr = (typeof(ptr))_stp_map_start(map); ptr; \</span>
-00140 <span class="preprocessor"> ptr = (typeof(ptr))_stp_map_iter (map, (struct map_node *)ptr))</span>
-00141 <span class="preprocessor"></span>
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+00110 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key2), char[])) \</span>
+00111 <span class="preprocessor"> _stp_map_key_long_str (map, (long)(key1), (char *)(key2)); \</span>
+00112 <span class="preprocessor"> else \</span>
+00113 <span class="preprocessor"> _stp_map_key_long_long (map, (long)(key1), (long)(key2)); \</span>
+00114 <span class="preprocessor"> })</span>
+00115 <span class="preprocessor"></span>
+00116 <span class="preprocessor">#define _stp_map_key(map, key) \</span>
+00117 <span class="preprocessor"> ({ \</span>
+00118 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (key), char[])) \</span>
+00119 <span class="preprocessor"> _stp_map_key_str (map, (char *)(key)); \</span>
+00120 <span class="preprocessor"> else \</span>
+00121 <span class="preprocessor"> _stp_map_key_long (map, (long)(key)); \</span>
+00122 <span class="preprocessor"> })</span>
+00123 <span class="preprocessor"></span>
+00124 <span class="preprocessor">#define _stp_map_set(map, val) \</span>
+00125 <span class="preprocessor"> ({ \</span>
+00126 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (val), char[])) \</span>
+00127 <span class="preprocessor"> _stp_map_set_str (map, (char *)(val)); \</span>
+00128 <span class="preprocessor"> else \</span>
+00129 <span class="preprocessor"> _stp_map_set_int64 (map, (int64_t)(val)); \</span>
+00130 <span class="preprocessor"> })</span>
+00131 <span class="preprocessor"></span>
+00132 <span class="preprocessor">#define _stp_list_add(map, val) \</span>
+00133 <span class="preprocessor"> ({ \</span>
+00134 <span class="preprocessor"> if (__builtin_types_compatible_p (typeof (val), char[])) \</span>
+00135 <span class="preprocessor"> _stp_list_add_str (map, (char *)(val)); \</span>
+00136 <span class="preprocessor"> else \</span>
+00137 <span class="preprocessor"> _stp_list_add_int64 (map, (int64_t)(val)); \</span>
+00138 <span class="preprocessor"> })</span>
+00139 <span class="preprocessor"></span>
+00140 <span class="comment"></span>
+00141 <span class="comment">/** Loop through all elements of a map.</span>
+00142 <span class="comment"> * @param map </span>
+00143 <span class="comment"> * @param ptr pointer to a map_node_stat, map_node_int64 or map_node_str</span>
+00144 <span class="comment"> *</span>
+00145 <span class="comment"> * @b Example:</span>
+00146 <span class="comment"> * @include foreach.c</span>
+00147 <span class="comment"> */</span>
+00148
+<a name="l00149"></a><a class="code" href="map_8h.html#a8">00149</a> <span class="preprocessor">#define foreach(map, ptr) \</span>
+00150 <span class="preprocessor"> for (ptr = (typeof(ptr))_stp_map_start(map); ptr; \</span>
+00151 <span class="preprocessor"> ptr = (typeof(ptr))_stp_map_iter (map, (struct map_node *)ptr))</span>
+00152 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/map_8h.html b/runtime/docs/html/map_8h.html
index 2d35515b..ae26cf69 100644
--- a/runtime/docs/html/map_8h.html
+++ b/runtime/docs/html/map_8h.html
@@ -1,56 +1,69 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map.h File Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map.h File Reference</h1><code>#include &lt;linux/types.h&gt;</code><br>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map.h File Reference</h1>Header file for maps and lists. <a href="#_details">More...</a>
+<p>
+<code>#include &lt;linux/types.h&gt;</code><br>
<p>
<a href="map_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a0">key1str</a>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.str)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a0" doxytag="map.h::key1str"></a>
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>key1str</b>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.str)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a1">key2str</a>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.str)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1" doxytag="map.h::key2str"></a>
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>key2str</b>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.str)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a2">key1int</a>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.val)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a2" doxytag="map.h::key1int"></a>
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>key1int</b>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.val)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a3">key2int</a>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.val)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a3" doxytag="map.h::key2int"></a>
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>key2int</b>(ptr)&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.val)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a4">_stp_map_key2</a>(map, key1, key2)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_stp_map_key2</b>(map, key1, key2)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a5">_stp_map_key</a>(map, key)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_stp_map_key</b>(map, key)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a6">_stp_map_set</a>(map, val)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_stp_map_set</b>(map, val)</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a7">_stp_list_add</a>(map, val)</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><b>_stp_list_add</b>(map, val)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a8">foreach</a>(map, ptr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Loop through all elements of a map. <a href="#a8"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Typedefs</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef <a class="el" href="structmap__root.html">map_root</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a10">MAP</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a10" doxytag="map.h::MAP"></a>
+typedef <a class="el" href="structmap__root.html">map_root</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a10">MAP</a></td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">All maps are of this type. <br></td></tr>
<tr><td colspan="2"><br><h2>Enumerations</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a18">keytype</a> { <a class="el" href="map_8h.html#a18a11">NONE</a>,
-<a class="el" href="map_8h.html#a18a12">LONG</a>,
-<a class="el" href="map_8h.html#a18a13">STR</a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>keytype</b> { <b>NONE</b>,
+<b>LONG</b>,
+<b>STR</b>
}</td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a19">valtype</a> { <a class="el" href="map_8h.html#a19a14">INT64</a>,
-<a class="el" href="map_8h.html#a19a15">STAT</a>,
-<a class="el" href="map_8h.html#a19a16">STRING</a>,
-<a class="el" href="map_8h.html#a19a17">END</a>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>valtype</b> { <b>INT64</b>,
+<b>STAT</b>,
+<b>STRING</b>,
+<b>END</b>
}</td></tr>
<tr><td colspan="2"><br><h2>Variables</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a9">packed</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9" doxytag="map.h::packed"></a>
+enum keytype&nbsp;</td><td class="memItemRight" valign="bottom"><b>packed</b></td></tr>
</table>
-<hr><h2>Define Documentation</h2>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Header file for maps and lists.
+<p>
+
+<p>
+Definition in file <a class="el" href="map_8h-source.html">map.h</a>.<hr><h2>Define Documentation</h2>
<a class="anchor" name="a7" doxytag="map.h::_stp_list_add"></a><p>
<table class="mdTable" cellpadding="2" cellspacing="0">
<tr>
@@ -87,7 +100,7 @@
})
</pre></div>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00121">121</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
+Definition at line <a class="el" href="map_8h-source.html#l00132">132</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
</tr>
</table>
<a class="anchor" name="a5" doxytag="map.h::_stp_map_key"></a><p>
@@ -126,7 +139,7 @@ Definition at line <a class="el" href="map_8h-source.html#l00121">121</a> of fil
})
</pre></div>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00105">105</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
+Definition at line <a class="el" href="map_8h-source.html#l00116">116</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
</tr>
</table>
<a class="anchor" name="a4" doxytag="map.h::_stp_map_key2"></a><p>
@@ -174,7 +187,7 @@ Definition at line <a class="el" href="map_8h-source.html#l00105">105</a> of fil
})
</pre></div>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00091">91</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
+Definition at line <a class="el" href="map_8h-source.html#l00102">102</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
</tr>
</table>
<a class="anchor" name="a6" doxytag="map.h::_stp_map_set"></a><p>
@@ -213,7 +226,7 @@ Definition at line <a class="el" href="map_8h-source.html#l00091">91</a> of file
})
</pre></div>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00113">113</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
+Definition at line <a class="el" href="map_8h-source.html#l00124">124</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
</tr>
</table>
<a class="anchor" name="a8" doxytag="map.h::foreach"></a><p>
@@ -251,12 +264,12 @@ Definition at line <a class="el" href="map_8h-source.html#l00113">113</a> of fil
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>map</em>&nbsp;</td><td></td></tr>
- <tr><td valign="top"></td><td valign="top"><em>ptr</em>&nbsp;</td><td>pointer to a <a class="el" href="structmap__node__stat.html">map_node_stat</a>, <a class="el" href="structmap__node__int64.html">map_node_int64</a> or <a class="el" href="structmap__node__str.html">map_node_str</a></td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>ptr</em>&nbsp;</td><td>pointer to a map_node_stat, map_node_int64 or map_node_str</td></tr>
</table>
</dl>
<b>Example:</b> <div class="fragment"><pre class="fragment"><span class="comment">/* example showing how to print all the stats in a map using foreach() */</span>
-<span class="keyword">struct </span><a class="code" href="structmap__node__stat.html">map_node_stat</a> *ptr;
+<span class="keyword">struct </span>map_node_stat *ptr;
<a class="code" href="map_8h.html#a8">foreach</a> (map, ptr)
printf ("map[%s,%ld] = [c=%lld s=%lld min=%lld max=%lld]\n", key1str(ptr),
@@ -265,254 +278,9 @@ Definition at line <a class="el" href="map_8h-source.html#l00113">113</a> of fil
</pre></div>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00138">138</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a2" doxytag="map.h::key1int"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">#define key1int </td>
- <td class="md" valign="top">(&nbsp;</td>
- <td class="md" nowrap valign="top">ptr&nbsp;</td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top">&nbsp;)&nbsp;</td>
- <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.val)</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00088">88</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a0" doxytag="map.h::key1str"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">#define key1str </td>
- <td class="md" valign="top">(&nbsp;</td>
- <td class="md" nowrap valign="top">ptr&nbsp;</td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top">&nbsp;)&nbsp;</td>
- <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key1.str)</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00086">86</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a3" doxytag="map.h::key2int"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">#define key2int </td>
- <td class="md" valign="top">(&nbsp;</td>
- <td class="md" nowrap valign="top">ptr&nbsp;</td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top">&nbsp;)&nbsp;</td>
- <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.val)</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00089">89</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a1" doxytag="map.h::key2str"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">#define key2str </td>
- <td class="md" valign="top">(&nbsp;</td>
- <td class="md" nowrap valign="top">ptr&nbsp;</td>
- <td class="mdname1" valign="top" nowrap> </td>
- <td class="md" valign="top">&nbsp;)&nbsp;</td>
- <td class="md" nowrap>&nbsp;&nbsp;&nbsp;(ptr-&gt;n.key2.str)</td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00087">87</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<hr><h2>Typedef Documentation</h2>
-<a class="anchor" name="a10" doxytag="map.h::MAP"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">typedef struct <a class="el" href="structmap__root.html">map_root</a>* <a class="el" href="structmap__root.html">MAP</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00084">84</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<hr><h2>Enumeration Type Documentation</h2>
-<a class="anchor" name="a18" doxytag="map.h::keytype"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-<dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="a18a11" doxytag="NONE"></a>NONE</em>&nbsp;</td><td>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a18a12" doxytag="LONG"></a>LONG</em>&nbsp;</td><td>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a18a13" doxytag="STR"></a>STR</em>&nbsp;</td><td>
-</td></tr>
-</table>
-</dl>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00016">16</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="a19" doxytag="map.h::valtype"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a19">valtype</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-<dl compact><dt><b>Enumeration values: </b></dt><dd>
-<table border="0" cellspacing="2" cellpadding="0">
-<tr><td valign="top"><em><a class="anchor" name="a19a14" doxytag="INT64"></a>INT64</em>&nbsp;</td><td>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a19a15" doxytag="STAT"></a>STAT</em>&nbsp;</td><td>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a19a16" doxytag="STRING"></a>STRING</em>&nbsp;</td><td>
-</td></tr>
-<tr><td valign="top"><em><a class="anchor" name="a19a17" doxytag="END"></a>END</em>&nbsp;</td><td>
-</td></tr>
-</table>
-</dl>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00017">17</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<hr><h2>Variable Documentation</h2>
-<a class="anchor" name="a9" doxytag="map.h::packed"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> <a class="el" href="map_8h.html#a9">packed</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
- </td>
+Definition at line <a class="el" href="map_8h-source.html#l00149">149</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
</tr>
</table>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/pages.html b/runtime/docs/html/pages.html
index d79b953e..0760af31 100644
--- a/runtime/docs/html/pages.html
+++ b/runtime/docs/html/pages.html
@@ -1,19 +1,14 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Page Index</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindexHL" href="pages.html">Related&nbsp;Pages</a></div>
<h1>SystemTap Related Pages</h1>Here is a list of all related documentation pages:<ul>
-<li><a class="el" href="bug.html">Bug List</a>
-
<li><a class="el" href="todo.html">Todo List</a>
</ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/probes.html b/runtime/docs/html/probes.html
new file mode 100644
index 00000000..b25bf2c7
--- /dev/null
+++ b/runtime/docs/html/probes.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: Example Probes</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1><a class="anchor" name="probes">Example Probes</a></h1><hr size="1"><address style="align: right;"><small>
+Generated on Mon Mar 21 23:24:22 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_2README-source.html b/runtime/docs/html/probes_2README-source.html
new file mode 100644
index 00000000..2f787b1a
--- /dev/null
+++ b/runtime/docs/html/probes_2README-source.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/README Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @dir probes</span>
+00002 <span class="comment">This directory contains working example probes that demonstrate and test</span>
+00003 <span class="comment">the runtime library. They are tested on i386 and x86_64.</span>
+00004 <span class="comment">*/</span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_2shellsnoop_2README-source.html b/runtime/docs/html/probes_2shellsnoop_2README-source.html
new file mode 100644
index 00000000..2a2ac71d
--- /dev/null
+++ b/runtime/docs/html/probes_2shellsnoop_2README-source.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/shellsnoop/README Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">shellsnoop</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @dir shellsnoop</span>
+00002 <span class="comment">Snoops on what commands are being run by shells.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment">This is a translation of on an old dtr probe. It demonstrates maps,</span>
+00005 <span class="comment">lists, and how to use _stp_copy_argv_from_user() and _stp_strncpy_from_user().</span>
+00006 <span class="comment"></span>
+00007 <span class="comment">Original dtr source:</span>
+00008 <span class="comment"></span>
+00009 <span class="comment">\verbatim</span>
+00010 <span class="comment"># shellsnoop.probe - snoop shell execution as it occurs.</span>
+00011 <span class="comment"># clone of dtrace shellsnoop example</span>
+00012 <span class="comment"></span>
+00013 <span class="comment">global {</span>
+00014 <span class="comment"> long @pids[long];</span>
+00015 <span class="comment">}</span>
+00016 <span class="comment"></span>
+00017 <span class="comment">probe do_execve:entry {</span>
+00018 <span class="comment"> char __user *vstr;</span>
+00019 <span class="comment"> char str[256];</span>
+00020 <span class="comment"> int len;</span>
+00021 <span class="comment"></span>
+00022 <span class="comment"> /* watch shells only */</span>
+00023 <span class="comment">/* FIXME: detect more shells, like csh, tcsh, zsh */</span>
+00024
+00025 <span class="keywordflow">if</span> (!strcmp(current-&gt;comm,<span class="stringliteral">"bash"</span>) || !strcmp(current-&gt;comm,<span class="stringliteral">"sh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"zsh"</span>)
+00026 || !strcmp(current-&gt;comm, <span class="stringliteral">"tcsh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"pdksh"</span>))
+00027 {
+00028 dlog (<span class="stringliteral">"%d\t%d\t%d\t%s "</span>, current-&gt;uid, current-&gt;pid, current-&gt;parent-&gt;pid, filename);
+00029 @pids[current-&gt;pid] = 1;
+00030
+00031 <span class="comment">/* print out argv, ignoring argv[0] */</span>
+00032 <span class="keywordflow">if</span> (argv) argv++;
+00033 while (argv != NULL)
+00034 {
+00035 <span class="keywordflow">if</span> (get_user (vstr, argv))
+00036 break;
+00037 if (!vstr)
+00038 break;
+00039 len = dtr_strncpy_from_user(str, vstr, 256);
+00040 str[len] = 0;
+00041 printk ("%s ", str);
+00042 argv++;
+00043 }
+00044 printk ("\n");
+00045 }
+00046 }
+00047
+00048 # use filp_open because copy_from_user not needed there
+00049 probe filp_open:entry {
+00050 <span class="keywordflow">if</span> (@pids[current-&gt;pid])
+00051 dlog ("%d\t%d\t%s\tO %s\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, filename);
+00052 }
+00053
+00054 probe sys_read:entry {
+00055 <span class="keywordflow">if</span> (@pids[current-&gt;pid])
+00056 dlog ("%d\t%d\t%s\tR %d\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, fd);
+00057 }
+00058
+00059 probe sys_write:entry {
+00060 size_t len;
+00061 <span class="keywordtype">char</span> str[256];
+00062 <span class="keywordflow">if</span> (@pids[current-&gt;pid])
+00063 {
+00064 <span class="keywordflow">if</span> (count &lt; 64) len = count;
+00065 else len = 64;
+00066 if (len = dtr_strncpy_from_user(str, buf, len)) {
+00067 str[len] = 0;
+00068 dlog (<span class="stringliteral">"%d\t%d\t%s\tW %s\n"</span>, current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, str);
+00069 }
+00070 }
+00071 }
+00072 \endverbatim
+00073 */
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_2tasklet_2README-source.html b/runtime/docs/html/probes_2tasklet_2README-source.html
new file mode 100644
index 00000000..bef82d09
--- /dev/null
+++ b/runtime/docs/html/probes_2tasklet_2README-source.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/tasklet/README Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000002.html">tasklet</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @dir tasklet</span>
+00002 <span class="comment">Sample probe in a tasklet. Useful for interrupt context testing.</span>
+00003 <span class="comment"></span>
+00004 <span class="comment">\verbatim</span>
+00005 <span class="comment">&gt; ./build</span>
+00006 <span class="comment">&gt; insmod stp_tasklet.ko</span>
+00007 <span class="comment">&gt; rmmod stp_tasklet.ko</span>
+00008 <span class="comment">\endverbatim</span>
+00009 <span class="comment"></span>
+00010 <span class="comment">*/</span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_2test4_2README-source.html b/runtime/docs/html/probes_2test4_2README-source.html
new file mode 100644
index 00000000..2a5a48f3
--- /dev/null
+++ b/runtime/docs/html/probes_2test4_2README-source.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/test4/README Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">test4</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @dir test4</span>
+00002 <span class="comment">This example probe tracks file opens, reads and writes.</span>
+00003 <span class="comment">It demonstrates maps, stats, and iterators.</span>
+00004 <span class="comment"></span>
+00005 <span class="comment">This is a translation of on an old dtr probe. Original source is</span>
+00006 <span class="comment">\verbatim</span>
+00007 <span class="comment">global {</span>
+00008 <span class="comment"> long @opens[string];</span>
+00009 <span class="comment"> sum @reads[string], @writes[string];</span>
+00010 <span class="comment">}</span>
+00011 <span class="comment"></span>
+00012 <span class="comment">probe sys_open:entry {</span>
+00013 <span class="comment"> @opens[current-&gt;comm]++;</span>
+00014 <span class="comment">}</span>
+00015 <span class="comment"></span>
+00016 <span class="comment">probe sys_read:entry {</span>
+00017 <span class="comment"> @reads[current-&gt;comm] &lt;&lt; count;</span>
+00018 <span class="comment">}</span>
+00019 <span class="comment"></span>
+00020 <span class="comment">probe sys_write:entry {</span>
+00021 <span class="comment"> @writes[current-&gt;comm] &lt;&lt; count;</span>
+00022 <span class="comment">}</span>
+00023 <span class="comment">\endverbatim</span>
+00024 <span class="comment">*/</span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_2where__func_2README-source.html b/runtime/docs/html/probes_2where__func_2README-source.html
new file mode 100644
index 00000000..a9995043
--- /dev/null
+++ b/runtime/docs/html/probes_2where__func_2README-source.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/where_func/README Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000004.html">where_func</a></div>
+<h1>README</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/** @dir where_func</span>
+00002 <span class="comment">This is a silly little instrumentation routine to instrument functions</span>
+00003 <span class="comment">entry by name. It makes use of the SystemTap runtime libraries to break</span>
+00004 <span class="comment">down the number of times the function by caller. </span>
+00005 <span class="comment"></span>
+00006 <span class="comment">It demonstrates kprobes, passing a module parameter, using the print buffer,</span>
+00007 <span class="comment">and using _stp_print_symbol() to map the addresses back to locations </span>
+00008 <span class="comment">in functions.</span>
+00009 <span class="comment"></span>
+00010 <span class="comment">By default it instruments schedule().</span>
+00011 <span class="comment"></span>
+00012 <span class="comment">The instrumentation module is built by having the kernel that is going</span>
+00013 <span class="comment">to be instrumented currently on the machine and doing </span>
+00014 <span class="comment">\code</span>
+00015 <span class="comment">./build</span>
+00016 <span class="comment">\endcode</span>
+00017 <span class="comment">The instrumentation is inserted as root with:</span>
+00018 <span class="comment">\code</span>
+00019 <span class="comment">/sbin/insmod kprobe_funct_where.ko funct_name=function_name</span>
+00020 <span class="comment">\endcode</span>
+00021 <span class="comment">The instrumentation is removed as root with:</span>
+00022 <span class="comment">\code</span>
+00023 <span class="comment">/sbin/rmmod kprobe_funct_where</span>
+00024 <span class="comment">\endcode</span>
+00025 <span class="comment">-Will Cohen</span>
+00026 <span class="comment">*/</span>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/probes_8c-source.html b/runtime/docs/html/probes_8c-source.html
index 58c3fa98..3446e997 100644
--- a/runtime/docs/html/probes_8c-source.html
+++ b/runtime/docs/html/probes_8c-source.html
@@ -1,24 +1,32 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: probes.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>probes.c</h1><a href="probes_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
-00002
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>probes.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
+00002 <span class="comment"></span>
+00003 <span class="comment">/** Create a new map.</span>
+00004 <span class="comment"> * Maps must be created at module initialization time.</span>
+00005 <span class="comment"> * @param max_entries The maximum number of entries allowed. Currently that </span>
+00006 <span class="comment"> * will be allocated dynamically.</span>
+00007 <span class="comment"> * @param type Type of values stored in this map. </span>
+00008 <span class="comment"> * @return A MAP on success or NULL on failure.</span>
+00009 <span class="comment"> */</span>
+00010
+00011
00012 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> long (*_stp_lookup_name)(<span class="keywordtype">char</span> *name)=(<span class="keywordtype">void</span> *)KALLSYMS_LOOKUP_NAME;
00013
-<a name="l00014"></a><a class="code" href="probes_8c.html#a1">00014</a> <span class="keywordtype">void</span> <a class="code" href="probes_8c.html#a1">_stp_unregister_jprobes</a> (<span class="keyword">struct</span> jprobe *probes, <span class="keywordtype">int</span> num_probes)
+00014 <span class="keywordtype">void</span> _stp_unregister_jprobes (<span class="keyword">struct</span> jprobe *probes, <span class="keywordtype">int</span> num_probes)
00015 {
00016 <span class="keywordtype">int</span> i;
00017 <span class="keywordflow">for</span> (i = 0; i &lt; num_probes; i++)
00018 unregister_jprobe(&amp;probes[i]);
-00019 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"All jprobes removed\n"</span>);
+00019 dlog ("All jprobes removed\n");
00020 }
00021
-<a name="l00022"></a><a class="code" href="probes_8c.html#a2">00022</a> <span class="keywordtype">int</span> <a class="code" href="probes_8c.html#a2">_stp_register_jprobes</a> (<span class="keyword">struct</span> jprobe *probes, <span class="keywordtype">int</span> num_probes)
+00022 <span class="keywordtype">int</span> _stp_register_jprobes (struct jprobe *probes, <span class="keywordtype">int</span> num_probes)
00023 {
00024 <span class="keywordtype">int</span> i, ret ;
00025 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr;
@@ -26,33 +34,33 @@
00027 <span class="keywordflow">for</span> (i = 0; i &lt; num_probes; i++) {
00028 addr =_stp_lookup_name((<span class="keywordtype">char</span> *)probes[i].kp.addr);
00029 <span class="keywordflow">if</span> (addr == 0) {
-00030 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: function %s not found!\n"</span>,
+00030 dlog (<span class="stringliteral">"ERROR: function %s not found!\n"</span>,
00031 (<span class="keywordtype">char</span> *)probes[i].kp.addr);
00032 ret = -1; <span class="comment">/* FIXME */</span>
00033 <span class="keywordflow">goto</span> out;
00034 }
-00035 <a class="code" href="io_8c.html#a4">dlog</a>(<span class="stringliteral">"inserting jprobe at %s (%p)\n"</span>, probes[i].kp.addr, addr);
+00035 dlog(<span class="stringliteral">"inserting jprobe at %s (%p)\n"</span>, probes[i].kp.addr, addr);
00036 probes[i].kp.addr = (kprobe_opcode_t *)addr;
00037 ret = register_jprobe(&amp;probes[i]);
00038 <span class="keywordflow">if</span> (ret)
-00039 <span class="keywordflow">goto</span> out;
+00039 goto out;
00040 }
-00041 <span class="keywordflow">return</span> 0;
+00041 return 0;
00042 out:
-00043 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"probe module initialization failed. Exiting...\n"</span>);
-00044 <a class="code" href="probes_8c.html#a1">_stp_unregister_jprobes</a>(probes, i);
-00045 <span class="keywordflow">return</span> ret;
+00043 dlog ("probe module initialization failed. Exiting...\n");
+00044 _stp_unregister_jprobes(probes, i);
+00045 return ret;
00046 }
00047
-<a name="l00048"></a><a class="code" href="probes_8c.html#a3">00048</a> <span class="keywordtype">void</span> <a class="code" href="probes_8c.html#a3">_stp_unregister_kprobes</a> (<span class="keyword">struct</span> kprobe *probes, <span class="keywordtype">int</span> num_probes)
+00048 <span class="keywordtype">void</span> _stp_unregister_kprobes (struct kprobe *probes, <span class="keywordtype">int</span> num_probes)
00049 {
00050 <span class="keywordtype">int</span> i;
00051 <span class="keywordflow">for</span> (i = 0; i &lt; num_probes; i++)
00052 unregister_kprobe(&amp;probes[i]);
-00053 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"All kprobes removed\n"</span>);
+00053 dlog ("All kprobes removed\n");
00054 }
00055
-<a name="l00056"></a><a class="code" href="probes_8c.html#a4">00056</a> <span class="keywordtype">int</span> <a class="code" href="probes_8c.html#a4">_stp_register_kprobes</a> (<span class="keyword">struct</span> kprobe *probes, <span class="keywordtype">int</span> num_probes)
+00056 <span class="keywordtype">int</span> _stp_register_kprobes (struct kprobe *probes, <span class="keywordtype">int</span> num_probes)
00057 {
00058 <span class="keywordtype">int</span> i, ret ;
00059 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr;
@@ -60,26 +68,24 @@
00061 <span class="keywordflow">for</span> (i = 0; i &lt; num_probes; i++) {
00062 addr =_stp_lookup_name((<span class="keywordtype">char</span> *)probes[i].addr);
00063 <span class="keywordflow">if</span> (addr == 0) {
-00064 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: function %s not found!\n"</span>,
+00064 dlog (<span class="stringliteral">"ERROR: function %s not found!\n"</span>,
00065 (<span class="keywordtype">char</span> *)probes[i].addr);
00066 ret = -1; <span class="comment">/* FIXME */</span>
00067 <span class="keywordflow">goto</span> out;
00068 }
-00069 <a class="code" href="io_8c.html#a4">dlog</a>(<span class="stringliteral">"inserting kprobe at %s (%p)\n"</span>, probes[i].addr, addr);
+00069 dlog(<span class="stringliteral">"inserting kprobe at %s (%p)\n"</span>, probes[i].addr, addr);
00070 probes[i].addr = (kprobe_opcode_t *)addr;
00071 ret = register_kprobe(&amp;probes[i]);
00072 <span class="keywordflow">if</span> (ret)
-00073 <span class="keywordflow">goto</span> out;
+00073 goto out;
00074 }
-00075 <span class="keywordflow">return</span> 0;
+00075 return 0;
00076 out:
-00077 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"probe module initialization failed. Exiting...\n"</span>);
-00078 <a class="code" href="probes_8c.html#a3">_stp_unregister_kprobes</a>(probes, i);
-00079 <span class="keywordflow">return</span> ret;
+00077 dlog ("probe module initialization failed. Exiting...\n");
+00078 _stp_unregister_kprobes(probes, i);
+00079 return ret;
00080 }
00081
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/runtime_8h-source.html b/runtime/docs/html/runtime_8h-source.html
index 10312ec7..ec00eb2b 100644
--- a/runtime/docs/html/runtime_8h-source.html
+++ b/runtime/docs/html/runtime_8h-source.html
@@ -1,12 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: runtime.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>runtime.h</h1><a href="runtime_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>runtime.h</h1><div class="fragment"><pre class="fragment">00001
00002 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
00003 <span class="preprocessor">#include &lt;linux/kernel.h&gt;</span>
00004 <span class="preprocessor">#include &lt;linux/miscdevice.h&gt;</span>
@@ -22,13 +21,11 @@
00014 <span class="preprocessor">#include &lt;asm/uaccess.h&gt;</span>
00015 <span class="preprocessor">#include &lt;linux/kallsyms.h&gt;</span>
00016
-00017 <span class="preprocessor">#include "<a class="code" href="alloc_8h.html">alloc.h</a>"</span>
+00017 <span class="preprocessor">#include "alloc.h"</span>
00018 <span class="preprocessor">#include "<a class="code" href="map_8h.html">map.h</a>"</span>
00019
-<a name="l00020"></a><a class="code" href="runtime_8h.html#a0">00020</a> <span class="preprocessor">#define dbug(args...) ;</span>
+00020 <span class="preprocessor">#define dbug(args...) ;</span>
00021 <span class="preprocessor"></span>
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/shellsnoop_2dtr_8c-source.html b/runtime/docs/html/shellsnoop_2dtr_8c-source.html
new file mode 100644
index 00000000..7f6aa12c
--- /dev/null
+++ b/runtime/docs/html/shellsnoop_2dtr_8c-source.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/shellsnoop/dtr.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">shellsnoop</a></div>
+<h1>dtr.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
+00002 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
+00003 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
+00004
+00005 <span class="preprocessor">#include "runtime.h"</span>
+00006 <span class="preprocessor">#include "io.c"</span>
+00007 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
+00008 <span class="preprocessor">#include "copy.c"</span>
+00009 <span class="preprocessor">#include "probes.c"</span>
+00010
+00011 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: shellsnoop"</span>);
+00012 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00013
+00014 <a class="code" href="structmap__root.html">MAP</a> pids, arglist ;
+00015
+00016 <span class="keywordtype">int</span> inst_do_execve (<span class="keywordtype">char</span> * filename, <span class="keywordtype">char</span> __user *__user *argv, <span class="keywordtype">char</span> __user *__user *envp, <span class="keyword">struct</span> pt_regs * regs)
+00017 {
+00018 <span class="keyword">struct </span>map_node_str *ptr;
+00019
+00020 <span class="comment">/* watch shells only */</span>
+00021 <span class="comment">/* FIXME: detect more shells, like csh, tcsh, zsh */</span>
+00022
+00023 <span class="keywordflow">if</span> (!strcmp(current-&gt;comm,<span class="stringliteral">"bash"</span>) || !strcmp(current-&gt;comm,<span class="stringliteral">"sh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"zsh"</span>)
+00024 || !strcmp(current-&gt;comm, <span class="stringliteral">"tcsh"</span>) || !strcmp(current-&gt;comm, <span class="stringliteral">"pdksh"</span>))
+00025 {
+00026 dlog (<span class="stringliteral">"%d\t%d\t%d\t%s "</span>, current-&gt;uid, current-&gt;pid, current-&gt;parent-&gt;pid, filename);
+00027
+00028 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00029 <a class="code" href="map_8c.html#a17">_stp_map_set_int64</a> (pids, 1);
+00030
+00031 <a class="code" href="map_8c.html#a26">_stp_list_clear</a> (arglist);
+00032 _stp_copy_argv_from_user (arglist, argv);
+00033 <a class="code" href="map_8h.html#a8">foreach</a> (arglist, ptr)
+00034 printk ("%s ", ptr-&gt;str);
+00035 printk ("\n");
+00036 }
+00037 jprobe_return();
+00038 return 0;
+00039 }
+00040
+00041 struct file * inst_filp_open (const <span class="keywordtype">char</span> * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
+00042 {
+00043 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00044 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00045 dlog (<span class="stringliteral">"%d\t%d\t%s\tO %s\n"</span>, current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, filename);
+00046
+00047 jprobe_return();
+00048 <span class="keywordflow">return</span> 0;
+00049 }
+00050
+00051 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
+00052 {
+00053 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00054 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00055 dlog (<span class="stringliteral">"%d\t%d\t%s\tR %d\n"</span>, current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, fd);
+00056
+00057 jprobe_return();
+00058 <span class="keywordflow">return</span> 0;
+00059 }
+00060
+00061 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
+00062 {
+00063 size_t len;
+00064 <span class="keywordtype">char</span> str[256];
+00065 <a class="code" href="map_8c.html#a14">_stp_map_key_long</a> (pids, current-&gt;pid);
+00066 <span class="keywordflow">if</span> (_stp_map_get_int64 (pids))
+00067 {
+00068 <span class="keywordflow">if</span> (count &lt; 64)
+00069 len = count;
+00070 else
+00071 len = 64;
+00072 len = _stp_strncpy_from_user(str, buf, len);
+00073 if (len &lt; 0) len = 0;
+00074 str[len] = 0;
+00075 dlog ("%d\t%d\t%s\tW %s\n", current-&gt;pid, current-&gt;parent-&gt;pid, current-&gt;comm, str);
+00076 }
+00077
+00078 jprobe_return();
+00079 return 0;
+00080 }
+00081
+00082 static struct jprobe dtr_probes[] = {
+00083 {
+00084 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"do_execve"</span>,
+00085 .entry = (kprobe_opcode_t *) inst_do_execve
+00086 },
+00087 {
+00088 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"filp_open"</span>,
+00089 .entry = (kprobe_opcode_t *) inst_filp_open
+00090 },
+00091 {
+00092 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
+00093 .entry = (kprobe_opcode_t *) inst_sys_read
+00094 },
+00095 {
+00096 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
+00097 .entry = (kprobe_opcode_t *) inst_sys_write
+00098 },
+00099 };
+00100
+00101 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
+00102 <span class="preprocessor"></span>
+00103 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
+00104 {
+00105 <span class="keywordtype">int</span> ret;
+00106
+00107 pids = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (10000, INT64);
+00108 arglist = <a class="code" href="map_8c.html#a25">_stp_list_new</a> (10, STRING);
+00109
+00110 ret = _stp_register_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00111
+00112 dlog(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
+00113 <span class="keywordflow">return</span> ret;
+00114 }
+00115
+00116 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
+00117 {
+00118 _stp_unregister_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00119 <a class="code" href="map_8c.html#a8">_stp_map_del</a> (pids);
+00120 dlog(<span class="stringliteral">"EXIT\n"</span>);
+00121 }
+00122
+00123 module_init(init_dtr);
+00124 module_exit(cleanup_dtr);
+00125 MODULE_LICENSE(<span class="stringliteral">"GPL"</span>);
+00126
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/stack_8c-source.html b/runtime/docs/html/stack_8c-source.html
index 34f7b76e..d6b1e224 100644
--- a/runtime/docs/html/stack_8c-source.html
+++ b/runtime/docs/html/stack_8c-source.html
@@ -1,12 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: stack.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>stack.c</h1><a href="stack_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>stack.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* -*- linux-c -*- */</span>
00002
00003 <span class="preprocessor">#ifdef __x86_64__</span>
00004 <span class="preprocessor"></span><span class="comment">/* ripped out of arch/x86_64/kernel/traps.c */</span>
@@ -14,19 +13,19 @@
00006
00007 <span class="keyword">static</span> <span class="keywordtype">int</span> _stp_printk_address(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> address)
00008 {
-00009 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset = 0, symsize;
-00010 <span class="keyword">const</span> <span class="keywordtype">char</span> *symname;
-00011 <span class="keywordtype">char</span> *modname;
-00012 <span class="keywordtype">char</span> *delim = <span class="stringliteral">":"</span>;
-00013 <span class="keywordtype">char</span> namebuf[128];
-00014
-00015 symname = _stp_kallsyms_lookup(address, &amp;symsize, &amp;offset, &amp;modname, namebuf);
-00016 <span class="keywordflow">if</span> (!symname)
-00017 return printk("[&lt;%016lx&gt;]", address);
-00018 if (!modname)
-00019 modname = delim = "";
-00020 return printk("&lt;%016lx&gt;{%s%s%s%s%+ld}<span class="stringliteral">",</span>
-00021 <span class="stringliteral"> address,delim,modname,delim,symname,offset); </span>
+00009 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> offset = 0, symsize;
+00010 <span class="keyword">const</span> <span class="keywordtype">char</span> *symname;
+00011 <span class="keywordtype">char</span> *modname;
+00012 <span class="keywordtype">char</span> *delim = <span class="stringliteral">":"</span>;
+00013 <span class="keywordtype">char</span> namebuf[128];
+00014
+00015 symname = _stp_kallsyms_lookup(address, &amp;symsize, &amp;offset, &amp;modname, namebuf);
+00016 <span class="keywordflow">if</span> (!symname)
+00017 return printk("[&lt;%016lx&gt;]", address);
+00018 if (!modname)
+00019 modname = delim = "";
+00020 return printk("&lt;%016lx&gt;{%s%s%s%s%+ld}<span class="stringliteral">",</span>
+00021 <span class="stringliteral"> address,delim,modname,delim,symname,offset); </span>
00022 <span class="stringliteral">}</span>
00023 <span class="stringliteral"></span>
00024 <span class="stringliteral">void _stp_show_trace(unsigned long *stack)</span>
@@ -114,7 +113,7 @@
00106 <span class="stringliteral"> p &lt; (void *)tinfo + THREAD_SIZE - 3;</span>
00107 <span class="stringliteral">}</span>
00108 <span class="stringliteral"></span>
-<a name="l00109"></a><a class="code" href="stack_8c.html#a1">00109</a> <span class="stringliteral">int __kernel_text_address(unsigned long addr)</span>
+00109 <span class="stringliteral">int __kernel_text_address(unsigned long addr)</span>
00110 <span class="stringliteral">{</span>
00111 <span class="stringliteral"> if (core_kernel_text(addr))</span>
00112 <span class="stringliteral"> return 1;</span>
@@ -147,7 +146,7 @@
00139 <span class="stringliteral"> return ebp;</span>
00140 <span class="stringliteral">}</span>
00141 <span class="stringliteral"></span>
-<a name="l00142"></a><a class="code" href="stack_8c.html#a3">00142</a> <span class="stringliteral">void show_trace(struct task_struct *task, unsigned long * stack)</span>
+00142 <span class="stringliteral">void show_trace(struct task_struct *task, unsigned long * stack)</span>
00143 <span class="stringliteral">{</span>
00144 <span class="stringliteral"> unsigned long ebp;</span>
00145 <span class="stringliteral"></span>
@@ -174,14 +173,12 @@
00166 <span class="stringliteral"> }</span>
00167 <span class="stringliteral">}</span>
00168 <span class="stringliteral"></span>
-<a name="l00169"></a><a class="code" href="stack_8c.html#a4">00169</a> <span class="stringliteral">void dump_stack(void)</span>
+00169 <span class="stringliteral">void dump_stack(void)</span>
00170 <span class="stringliteral">{</span>
00171 <span class="stringliteral"> unsigned long stack;</span>
00172 <span class="stringliteral"> show_trace(current, &amp;stack);</span>
00173 <span class="stringliteral">}</span>
00174 <span class="stringliteral">#endif</span>
-</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/stp__tasklet_8c-source.html b/runtime/docs/html/stp__tasklet_8c-source.html
new file mode 100644
index 00000000..5e9413ae
--- /dev/null
+++ b/runtime/docs/html/stp__tasklet_8c-source.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/tasklet/stp_tasklet.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000002.html">tasklet</a></div>
+<h1>stp_tasklet.c</h1><div class="fragment"><pre class="fragment">00001 <span class="comment">/* Framework for putting a jprobe in a tasklet. */</span>
+00002 <span class="comment">/* Useful for testing probes in interrupt context. */</span>
+00003 <span class="comment">/* Doesn't do anything useful as is. Put test code in the inst func */</span>
+00004
+00005 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
+00006 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
+00007 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
+00008
+00009 <span class="preprocessor">#include "runtime.h"</span>
+00010 <span class="preprocessor">#include "io.c"</span>
+00011 <span class="preprocessor">#include "probes.c"</span>
+00012
+00013 MODULE_DESCRIPTION(<span class="stringliteral">"test jprobes of tasklets"</span>);
+00014 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00015
+00016 <span class="keywordtype">void</span> inst__rcu_process_callbacks(<span class="keyword">struct</span> rcu_ctrlblk *rcp,
+00017 <span class="keyword">struct</span> rcu_state *rsp, <span class="keyword">struct</span> rcu_data *rdp)
+00018 {
+00019 dlog (<span class="stringliteral">"interrupt=%d\n"</span>, in_interrupt());
+00020 jprobe_return();
+00021 }
+00022
+00023 <span class="keyword">static</span> <span class="keyword">struct </span>jprobe stp_probes[] = {
+00024 {
+00025 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"__rcu_process_callbacks"</span>,
+00026 .entry = (kprobe_opcode_t *) inst__rcu_process_callbacks
+00027 },
+00028 };
+00029 <span class="preprocessor">#define MAX_STP_PROBES (sizeof(stp_probes)/sizeof(struct jprobe))</span>
+00030 <span class="preprocessor"></span>
+00031
+00032 <span class="keyword">static</span> <span class="keywordtype">int</span> init_stp(<span class="keywordtype">void</span>)
+00033 {
+00034 <span class="keywordtype">int</span> ret = _stp_register_jprobes (stp_probes, MAX_STP_PROBES);
+00035 dlog(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
+00036 <span class="keywordflow">return</span> ret;
+00037 }
+00038
+00039 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_stp(<span class="keywordtype">void</span>)
+00040 {
+00041 _stp_unregister_jprobes (stp_probes, MAX_STP_PROBES);
+00042 dlog (<span class="stringliteral">"EXIT\n"</span>);
+00043 }
+00044
+00045 module_init(init_stp);
+00046 module_exit(cleanup_stp);
+00047 MODULE_LICENSE(<span class="stringliteral">"GPL"</span>);
+00048
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/structmap__node.html b/runtime/docs/html/structmap__node.html
index 1d8a69ea..9902b165 100644
--- a/runtime/docs/html/structmap__node.html
+++ b/runtime/docs/html/structmap__node.html
@@ -1,192 +1,44 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map_node Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map_node Struct Reference</h1><code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map_node Struct Reference</h1>all map nodes have the following structure
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">list_head&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o0">lnode</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">hlist_node&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o1">hnode</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o2">key1</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o3">key2</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="map_node::lnode"></a>
+list_head&nbsp;</td><td class="memItemRight" valign="bottom"><b>lnode</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o4">key1type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="map_node::hnode"></a>
+hlist_node&nbsp;</td><td class="memItemRight" valign="bottom"><b>hnode</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__node.html#o5">key2type</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="map_node::key1"></a>
+<a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>key1</b></td></tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o1" doxytag="map_node::hnode"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct hlist_node <a class="el" href="structmap__node.html#o1">map_node::hnode</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o3" doxytag="map_node::key2"></a>
+<a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>key2</b></td></tr>
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00022">22</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, <a class="el" href="map_8c-source.html#l00104">_stp_map_key_del()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o2" doxytag="map_node::key1"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">union <a class="el" href="unionkey__data.html">key_data</a> <a class="el" href="structmap__node.html#o2">map_node::key1</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o4" doxytag="map_node::key1type"></a>
+enum keytype&nbsp;</td><td class="memItemRight" valign="bottom"><b>key1type</b></td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o5" doxytag="map_node::key2type"></a>
+enum keytype&nbsp;</td><td class="memItemRight" valign="bottom"><b>key2type</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00023">23</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o4" doxytag="map_node::key1type"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> <a class="el" href="structmap__node.html#o4">map_node::key1type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+all map nodes have the following structure
<p>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00025">25</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o3" doxytag="map_node::key2"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">union <a class="el" href="unionkey__data.html">key_data</a> <a class="el" href="structmap__node.html#o3">map_node::key2</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00024">24</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o5" doxytag="map_node::key2type"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> <a class="el" href="structmap__node.html#o5">map_node::key2type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00026">26</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o0" doxytag="map_node::lnode"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct list_head <a class="el" href="structmap__node.html#o0">map_node::lnode</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00021">21</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, <a class="el" href="map_8c-source.html#l00190">_stp_map_del()</a>, <a class="el" href="map_8c-source.html#l00172">_stp_map_iter()</a>, <a class="el" href="map_8c-source.html#l00104">_stp_map_key_del()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
- </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
+Definition at line <a class="el" href="map_8h-source.html#l00029">29</a> of file <a class="el" href="map_8h-source.html">map.h</a>.<hr>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="map_8h-source.html">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/structmap__root.html b/runtime/docs/html/structmap__root.html
index cd50216b..a55fe7b8 100644
--- a/runtime/docs/html/structmap__root.html
+++ b/runtime/docs/html/structmap__root.html
@@ -1,457 +1,75 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: map_root Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>map_root Struct Reference</h1><code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>map_root Struct Reference</h1>This structure contains all information about a map.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a19">valtype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o0">type</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o1">maxnum</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o2">num</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o3">no_wrap</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">list_head&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o4">head</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">list_head&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o5">pool</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structmap__node.html">map_node</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o6">key</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">u_int8_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o7">create</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o8">c_key1type</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o9">c_key2type</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">hlist_head *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o10">c_keyhead</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o11">c_key1</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="map_root::type"></a>
+enum valtype&nbsp;</td><td class="memItemRight" valign="bottom"><b>type</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o12">c_key2</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="map_root::maxnum"></a>
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o1">maxnum</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">hlist_head&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o13">hashes</a> [HASH_TABLE_SIZE]</td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">type of the values stored in the array <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="map_root::num"></a>
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o2">num</a></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmap__root.html#o14">membuf</a></td></tr>
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">maximum number of elements allowed in the array. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o3" doxytag="map_root::no_wrap"></a>
+int&nbsp;</td><td class="memItemRight" valign="bottom"><b>no_wrap</b></td></tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o11" doxytag="map_root::c_key1"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">union <a class="el" href="unionkey__data.html">key_data</a> <a class="el" href="structmap__root.html#o11">map_root::c_key1</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o4" doxytag="map_root::head"></a>
+list_head&nbsp;</td><td class="memItemRight" valign="bottom"><b>head</b></td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o5" doxytag="map_root::pool"></a>
+list_head&nbsp;</td><td class="memItemRight" valign="bottom"><b>pool</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00074">74</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o8" doxytag="map_root::c_key1type"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> <a class="el" href="structmap__root.html#o8">map_root::c_key1type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o6" doxytag="map_root::key"></a>
+<a class="el" href="structmap__node.html">map_node</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>key</b></td></tr>
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00071">71</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o12" doxytag="map_root::c_key2"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">union <a class="el" href="unionkey__data.html">key_data</a> <a class="el" href="structmap__root.html#o12">map_root::c_key2</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o7" doxytag="map_root::create"></a>
+u_int8_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>create</b></td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o8" doxytag="map_root::c_key1type"></a>
+enum keytype&nbsp;</td><td class="memItemRight" valign="bottom"><b>c_key1type</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00075">75</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o9" doxytag="map_root::c_key2type"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a18">keytype</a> <a class="el" href="structmap__root.html#o9">map_root::c_key2type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o9" doxytag="map_root::c_key2type"></a>
+enum keytype&nbsp;</td><td class="memItemRight" valign="bottom"><b>c_key2type</b></td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o10" doxytag="map_root::c_keyhead"></a>
+hlist_head *&nbsp;</td><td class="memItemRight" valign="bottom"><b>c_keyhead</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00072">72</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00415">_stp_map_key_long()</a>, <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00399">_stp_map_key_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o10" doxytag="map_root::c_keyhead"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct hlist_head* <a class="el" href="structmap__root.html#o10">map_root::c_keyhead</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o11" doxytag="map_root::c_key1"></a>
+<a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>c_key1</b></td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o12" doxytag="map_root::c_key2"></a>
+<a class="el" href="unionkey__data.html">key_data</a>&nbsp;</td><td class="memItemRight" valign="bottom"><b>c_key2</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00073">73</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o7" doxytag="map_root::create"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">u_int8_t <a class="el" href="structmap__root.html#o7">map_root::create</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o13" doxytag="map_root::hashes"></a>
+hlist_head&nbsp;</td><td class="memItemRight" valign="bottom"><b>hashes</b> [HASH_TABLE_SIZE]</td></tr>
-<p>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o14" doxytag="map_root::membuf"></a>
+void *&nbsp;</td><td class="memItemRight" valign="bottom"><b>membuf</b></td></tr>
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00070">70</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00551">_stp_map_get_int64()</a>, <a class="el" href="map_8c-source.html#l00715">_stp_map_get_stat()</a>, <a class="el" href="map_8c-source.html#l00632">_stp_map_get_str()</a>, <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>, and <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o13" doxytag="map_root::hashes"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct hlist_head <a class="el" href="structmap__root.html#o13">map_root::hashes</a>[HASH_TABLE_SIZE] </td>
- </tr>
- </table>
- </td>
- </tr>
</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+This structure contains all information about a map.
<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00078">78</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o4" doxytag="map_root::head"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct list_head <a class="el" href="structmap__root.html#o4">map_root::head</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
+It is allocated once when <a class="el" href="map_8c.html#a3">_stp_map_new()</a> is called.
<p>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00059">59</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, <a class="el" href="map_8c-source.html#l00190">_stp_map_del()</a>, <a class="el" href="map_8c-source.html#l00172">_stp_map_iter()</a>, <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>, and <a class="el" href="map_8c-source.html#l00149">_stp_map_start()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o6" doxytag="map_root::key"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct <a class="el" href="structmap__node.html">map_node</a>* <a class="el" href="structmap__root.html#o6">map_root::key</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00066">66</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00551">_stp_map_get_int64()</a>, <a class="el" href="map_8c-source.html#l00715">_stp_map_get_stat()</a>, <a class="el" href="map_8c-source.html#l00632">_stp_map_get_str()</a>, <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>, and <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o1" doxytag="map_root::maxnum"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int <a class="el" href="structmap__root.html#o1">map_root::maxnum</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00050">50</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o14" doxytag="map_root::membuf"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">void* <a class="el" href="structmap__root.html#o14">map_root::membuf</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00081">81</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00190">_stp_map_del()</a>, and <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o3" doxytag="map_root::no_wrap"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int <a class="el" href="structmap__root.html#o3">map_root::no_wrap</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00056">56</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00776">_stp_list_new()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o2" doxytag="map_root::num"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int <a class="el" href="structmap__root.html#o2">map_root::num</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00053">53</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="copy_8c-source.html#l00115">_stp_copy_argv_from_user()</a>, <a class="el" href="map_8c-source.html#l00839">_stp_list_add_int64()</a>, <a class="el" href="map_8c-source.html#l00828">_stp_list_add_str()</a>, <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, and <a class="el" href="map_8c-source.html#l00850">_stp_list_size()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o5" doxytag="map_root::pool"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">struct list_head <a class="el" href="structmap__root.html#o5">map_root::pool</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00063">63</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00788">_stp_list_clear()</a>, <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>, <a class="el" href="map_8c-source.html#l00656">_stp_map_set_stat()</a>, and <a class="el" href="map_8c-source.html#l00571">_stp_map_set_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o0" doxytag="map_root::type"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">enum <a class="el" href="map_8h.html#a19">valtype</a> <a class="el" href="structmap__root.html#o0">map_root::type</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00047">47</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00043">_stp_map_new()</a>. </td>
- </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
+Definition at line <a class="el" href="map_8h-source.html#l00057">57</a> of file <a class="el" href="map_8h-source.html">map.h</a>.<hr>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="map_8h-source.html">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/structstat.html b/runtime/docs/html/structstat.html
index 50829d8d..8f010fa8 100644
--- a/runtime/docs/html/structstat.html
+++ b/runtime/docs/html/structstat.html
@@ -1,165 +1,41 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: stat Struct Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>stat Struct Reference</h1><code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>stat Struct Reference</h1>Statistics are stored in this struct.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstat.html#o0">count</a></td></tr>
-
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstat.html#o1">sum</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="stat::count"></a>
+int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>count</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstat.html#o2">min</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="stat::sum"></a>
+int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>sum</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstat.html#o3">max</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o2" doxytag="stat::min"></a>
+int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>min</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstat.html#o4">histogram</a> [BUCKETS]</td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o3" doxytag="stat::max"></a>
+int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>max</b></td></tr>
-</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o0" doxytag="stat::count"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int64_t <a class="el" href="structstat.html#o0">stat::count</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o4" doxytag="stat::histogram"></a>
+int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>histogram</b> [BUCKETS]</td></tr>
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00005">5</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
</table>
-<a class="anchor" name="o4" doxytag="stat::histogram"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int64_t <a class="el" href="structstat.html#o4">stat::histogram</a>[BUCKETS] </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00008">8</a> of file <a class="el" href="map_8h-source.html">map.h</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o3" doxytag="stat::max"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int64_t <a class="el" href="structstat.html#o3">stat::max</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Statistics are stored in this struct.
<p>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00007">7</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o2" doxytag="stat::min"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int64_t <a class="el" href="structstat.html#o2">stat::min</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00007">7</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o1" doxytag="stat::sum"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">int64_t <a class="el" href="structstat.html#o1">stat::sum</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00006">6</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00736">_stp_map_stat_add()</a>. </td>
- </tr>
-</table>
-<hr>The documentation for this struct was generated from the following file:<ul>
+Definition at line <a class="el" href="map_8h-source.html#l00010">10</a> of file <a class="el" href="map_8h-source.html">map.h</a>.<hr>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="map_8h-source.html">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/test4_2dtr_8c-source.html b/runtime/docs/html/test4_2dtr_8c-source.html
new file mode 100644
index 00000000..21acb158
--- /dev/null
+++ b/runtime/docs/html/test4_2dtr_8c-source.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>SystemTap: probes/test4/dtr.c Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.1 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<div class="nav">
+<a class="el" href="dir_000000.html">probes</a>&nbsp;/&nbsp;<a class="el" href="dir_000003.html">test4</a></div>
+<h1>dtr.c</h1><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#define HASH_TABLE_BITS 8</span>
+00002 <span class="preprocessor"></span><span class="preprocessor">#define HASH_TABLE_SIZE (1&lt;&lt;HASH_TABLE_BITS)</span>
+00003 <span class="preprocessor"></span><span class="preprocessor">#define BUCKETS 16 </span><span class="comment">/* largest histogram width */</span>
+00004
+00005 <span class="preprocessor">#include "runtime.h"</span>
+00006 <span class="preprocessor">#include "io.c"</span>
+00007 <span class="preprocessor">#include "<a class="code" href="map_8c.html">map.c</a>"</span>
+00008 <span class="preprocessor">#include "probes.c"</span>
+00009
+00010 MODULE_DESCRIPTION(<span class="stringliteral">"SystemTap probe: test4"</span>);
+00011 MODULE_AUTHOR(<span class="stringliteral">"Martin Hunt &lt;hunt@redhat.com&gt;"</span>);
+00012
+00013 <a class="code" href="structmap__root.html">MAP</a> opens, reads, writes;
+00014
+00015 asmlinkage <span class="keywordtype">long</span> inst_sys_open (<span class="keyword">const</span> <span class="keywordtype">char</span> __user * filename, <span class="keywordtype">int</span> flags, <span class="keywordtype">int</span> mode)
+00016 {
+00017 <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (opens, current-&gt;comm);
+00018 <a class="code" href="map_8c.html#a18">_stp_map_add_int64</a> (opens, 1);
+00019 jprobe_return();
+00020 <span class="keywordflow">return</span> 0;
+00021 }
+00022
+00023 asmlinkage ssize_t inst_sys_read (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keywordtype">char</span> __user * buf, size_t count)
+00024 {
+00025 <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (reads, current-&gt;comm);
+00026 <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a> (reads, count);
+00027 jprobe_return();
+00028 <span class="keywordflow">return</span> 0;
+00029 }
+00030
+00031 asmlinkage ssize_t inst_sys_write (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fd, <span class="keyword">const</span> <span class="keywordtype">char</span> __user * buf, size_t count)
+00032 {
+00033 <a class="code" href="map_8c.html#a13">_stp_map_key_str</a> (writes, current-&gt;comm);
+00034 <a class="code" href="map_8c.html#a24">_stp_map_stat_add</a> (writes, count);
+00035 jprobe_return();
+00036 <span class="keywordflow">return</span> 0;
+00037 }
+00038
+00039 <span class="keyword">static</span> <span class="keyword">struct </span>jprobe dtr_probes[] = {
+00040 {
+00041 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_open"</span>,
+00042 .entry = (kprobe_opcode_t *) inst_sys_open
+00043 },
+00044 {
+00045 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_read"</span>,
+00046 .entry = (kprobe_opcode_t *) inst_sys_read
+00047 },
+00048 {
+00049 .kp.addr = (kprobe_opcode_t *)<span class="stringliteral">"sys_write"</span>,
+00050 .entry = (kprobe_opcode_t *) inst_sys_write
+00051 },
+00052 };
+00053
+00054 <span class="preprocessor">#define MAX_DTR_ROUTINE (sizeof(dtr_probes)/sizeof(struct jprobe))</span>
+00055 <span class="preprocessor"></span>
+00056 <span class="keyword">static</span> <span class="keywordtype">int</span> init_dtr(<span class="keywordtype">void</span>)
+00057 {
+00058 <span class="keywordtype">int</span> ret;
+00059
+00060 opens = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, INT64);
+00061 reads = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, STAT);
+00062 writes = <a class="code" href="map_8c.html#a3">_stp_map_new</a> (1000, STAT);
+00063
+00064 ret = _stp_register_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00065
+00066 dlog(<span class="stringliteral">"instrumentation is enabled...\n"</span>);
+00067 <span class="keywordflow">return</span> ret;
+00068
+00069 }
+00070
+00071 <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup_dtr(<span class="keywordtype">void</span>)
+00072 {
+00073 <span class="keyword">struct </span>map_node_stat *st;
+00074 <span class="keyword">struct </span>map_node_int64 *ptr;
+00075
+00076 _stp_unregister_jprobes (dtr_probes, MAX_DTR_ROUTINE);
+00077
+00078 <span class="keywordflow">for</span> (ptr = (<span class="keyword">struct</span> map_node_int64 *)<a class="code" href="map_8c.html#a6">_stp_map_start</a>(opens); ptr;
+00079 ptr = (<span class="keyword">struct</span> map_node_int64 *)_stp_map_iter (opens,(<span class="keyword">struct</span> <a class="code" href="structmap__node.html">map_node</a> *)ptr))
+00080 dlog ("opens[%s] = %lld\n", key1str(ptr), ptr-&gt;val);
+00081 dlog ("\n");
+00082
+00083 for (st = (struct map_node_stat *)_stp_map_start(reads); st;
+00084 st = (struct map_node_stat *)_stp_map_iter (reads,(struct <a class="code" href="structmap__node.html">map_node</a> *)st))
+00085 dlog ("reads[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st), st-&gt;stats.count, st-&gt;stats.sum,
+00086 st-&gt;stats.min, st-&gt;stats.max);
+00087 dlog ("\n");
+00088
+00089 for (st = (struct map_node_stat *)_stp_map_start(writes); st;
+00090 st = (struct map_node_stat *)_stp_map_iter (writes,(struct <a class="code" href="structmap__node.html">map_node</a> *)st))
+00091 dlog ("writes[%s] = [count=%lld sum=%lld min=%lld max=%lld]\n", key1str(st), st-&gt;stats.count, st-&gt;stats.sum,
+00092 st-&gt;stats.min, st-&gt;stats.max);
+00093 dlog ("\n");
+00094
+00095 _stp_map_del (opens);
+00096 _stp_map_del (reads);
+00097 _stp_map_del (writes);
+00098
+00099 dlog("EXIT\n");
+00100 }
+00101
+00102 module_init(init_dtr);
+00103 module_exit(cleanup_dtr);
+00104 MODULE_LICENSE("GPL");
+00105
+</pre></div><hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
+</html>
diff --git a/runtime/docs/html/todo.html b/runtime/docs/html/todo.html
index 93efe6b8..f5c671f4 100644
--- a/runtime/docs/html/todo.html
+++ b/runtime/docs/html/todo.html
@@ -1,17 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: Todo List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1><a class="anchor" name="todo">Todo List</a></h1><a class="anchor" name="_todo000001"></a> <dl>
-<dt>Global <a class="el" href="io_8c.html#a4">dlog</a> (const char *fmt,...) </dt>
-<dd>Needs replaced with something much faster that does not use the system log. </dd>
-</dl>
-<p>
-<a class="anchor" name="_todo000002"></a> <dl>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1><a class="anchor" name="todo">Todo List</a></h1><a class="anchor" name="_todo000002"></a> <dl>
<dt>Global <a class="el" href="map_8c.html#a22">_stp_map_set_stat</a> (MAP map, stat *stats) </dt>
<dd>Histograms don't work yet. </dd>
</dl>
@@ -20,8 +14,6 @@
<dt>Global <a class="el" href="map_8c.html#a24">_stp_map_stat_add</a> (MAP map, int64_t val) </dt>
<dd>Histograms don't work yet. </dd>
</dl>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>
diff --git a/runtime/docs/html/unionkey__data.html b/runtime/docs/html/unionkey__data.html
index a46795bf..35c1710d 100644
--- a/runtime/docs/html/unionkey__data.html
+++ b/runtime/docs/html/unionkey__data.html
@@ -1,80 +1,32 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>SystemTap: SystemTap Runtime Library</title>
+<title>SystemTap: key_data Union Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
-<div class="qindex"><a class="qindex" href="index.html">Intro</a> | <a class="qindex" href="globals_func.html">Functions</a> | <a class="qindex" href="globals_defs.html">Defines</a> | <a class="qindex" href="globals_enum.html">Enumerations</a> | <a class="qindex" href="globals_eval.html">Enumeration Values</a></div>
-
<!-- Generated by Doxygen 1.4.1 -->
-<h1>key_data Union Reference</h1><code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
+<h1>key_data Union Reference</h1>Keys are either longs or char *.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="map_8h-source.html">map.h</a>&gt;</code>
<p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionkey__data.html#o0">val</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o0" doxytag="key_data::val"></a>
+long&nbsp;</td><td class="memItemRight" valign="bottom"><b>val</b></td></tr>
-<tr><td class="memItemLeft" nowrap align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="unionkey__data.html#o1">str</a></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="o1" doxytag="key_data::str"></a>
+char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>str</b></td></tr>
</table>
-<hr><h2>Field Documentation</h2>
-<a class="anchor" name="o1" doxytag="key_data::str"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">char* <a class="el" href="unionkey__data.html#o1">key_data::str</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Keys are either longs or char *.
<p>
<p>
-Definition at line <a class="el" href="map_8h-source.html#l00013">13</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>, and <a class="el" href="map_8c-source.html#l00261">_stp_map_key_str_str()</a>. </td>
- </tr>
-</table>
-<a class="anchor" name="o0" doxytag="key_data::val"></a><p>
-<table class="mdTable" cellpadding="2" cellspacing="0">
- <tr>
- <td class="mdRow">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="md" nowrap valign="top">long <a class="el" href="unionkey__data.html#o0">key_data::val</a> </td>
- </tr>
- </table>
- </td>
- </tr>
-</table>
-<table cellspacing="5" cellpadding="0" border="0">
- <tr>
- <td>
- &nbsp;
- </td>
- <td>
-
-<p>
-
-<p>
-Definition at line <a class="el" href="map_8h-source.html#l00012">12</a> of file <a class="el" href="map_8h-source.html">map.h</a>.
-<p>
-Referenced by <a class="el" href="map_8c-source.html#l00218">_stp_map_key_long_long()</a>, <a class="el" href="map_8c-source.html#l00358">_stp_map_key_long_str()</a>, and <a class="el" href="map_8c-source.html#l00310">_stp_map_key_str_long()</a>. </td>
- </tr>
-</table>
-<hr>The documentation for this union was generated from the following file:<ul>
+Definition at line <a class="el" href="map_8h-source.html#l00019">19</a> of file <a class="el" href="map_8h-source.html">map.h</a>.<hr>The documentation for this union was generated from the following file:<ul>
<li><a class="el" href="map_8h-source.html">map.h</a></ul>
-<hr size="1"><address style="align: right;"><small>Generated on Mon Mar 21 13:29:45 2005 for SystemTap by&nbsp;
-<a href="http://www.doxygen.org/index.html">
-<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.1 </small></address>
-</body>
+<hr size="1"><address style="align: right;"><small>
+Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body>
</html>