diff options
Diffstat (limited to 'runtime/docs/html/probes_8c-source.html')
-rw-r--r-- | runtime/docs/html/probes_8c-source.html | 183 |
1 files changed, 102 insertions, 81 deletions
diff --git a/runtime/docs/html/probes_8c-source.html b/runtime/docs/html/probes_8c-source.html index 3446e997..5fe6164c 100644 --- a/runtime/docs/html/probes_8c-source.html +++ b/runtime/docs/html/probes_8c-source.html @@ -5,87 +5,108 @@ </head><body> <!-- Generated by Doxygen 1.4.1 --> <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related 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 -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 < num_probes; i++) -00018 unregister_jprobe(&probes[i]); -00019 dlog ("All jprobes removed\n"); -00020 } -00021 -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; -00026 -00027 <span class="keywordflow">for</span> (i = 0; i < 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 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 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(&probes[i]); -00038 <span class="keywordflow">if</span> (ret) -00039 goto out; -00040 } -00041 return 0; -00042 out: -00043 dlog ("probe module initialization failed. Exiting...\n"); -00044 _stp_unregister_jprobes(probes, i); -00045 return ret; -00046 } -00047 -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 < num_probes; i++) -00052 unregister_kprobe(&probes[i]); -00053 dlog ("All kprobes removed\n"); -00054 } -00055 -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; -00060 -00061 <span class="keywordflow">for</span> (i = 0; i < 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 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 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(&probes[i]); -00072 <span class="keywordflow">if</span> (ret) -00073 goto out; -00074 } -00075 return 0; -00076 out: -00077 dlog ("probe module initialization failed. Exiting...\n"); -00078 _stp_unregister_kprobes(probes, i); -00079 return ret; -00080 } +<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><span class="comment"></span> +00002 <span class="comment">/** @file probes.c</span> +00003 <span class="comment"> * @brief Functions to assist loading and unloading groups of probes.</span> +00004 <span class="comment"> */</span> +00005 <span class="comment"></span> +00006 <span class="comment">/** Lookup name.</span> +00007 <span class="comment"> * This simply calls the kernel function kallsyms_lookup_name().</span> +00008 <span class="comment"> * That function is not exported, so this workaround is required.</span> +00009 <span class="comment"> * See the kernel source, kernel/kallsyms.c for more information.</span> +00010 <span class="comment"> */</span> +<a name="l00011"></a><a class="code" href="probes_8c.html#a0">00011</a> <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; +00012 <span class="comment"></span> +00013 <span class="comment">/** Unregister a group of jprobes.</span> +00014 <span class="comment"> * @param probes Pointer to an array of struct jprobe.</span> +00015 <span class="comment"> * @param num_probes Number of probes in the array.</span> +00016 <span class="comment"> */</span> +00017 +<a name="l00018"></a><a class="code" href="probes_8c.html#a1">00018</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) +00019 { +00020 <span class="keywordtype">int</span> i; +00021 <span class="keywordflow">for</span> (i = 0; i < num_probes; i++) +00022 unregister_jprobe(&probes[i]); +00023 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"All jprobes removed\n"</span>); +00024 } +00025 <span class="comment"></span> +00026 <span class="comment">/** Register a group of jprobes.</span> +00027 <span class="comment"> * @param probes Pointer to an array of struct jprobe.</span> +00028 <span class="comment"> * @param num_probes Number of probes in the array.</span> +00029 <span class="comment"> * @return 0 on success.</span> +00030 <span class="comment"> */</span> +00031 +<a name="l00032"></a><a class="code" href="probes_8c.html#a2">00032</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) +00033 { +00034 <span class="keywordtype">int</span> i, ret ; +00035 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; +00036 +00037 <span class="keywordflow">for</span> (i = 0; i < num_probes; i++) { +00038 addr =<a class="code" href="probes_8c.html#a0">_stp_lookup_name</a>((<span class="keywordtype">char</span> *)probes[i].kp.addr); +00039 <span class="keywordflow">if</span> (addr == 0) { +00040 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: function %s not found!\n"</span>, +00041 (<span class="keywordtype">char</span> *)probes[i].kp.addr); +00042 ret = -1; <span class="comment">/* FIXME */</span> +00043 <span class="keywordflow">goto</span> out; +00044 } +00045 <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); +00046 probes[i].kp.addr = (kprobe_opcode_t *)addr; +00047 ret = register_jprobe(&probes[i]); +00048 <span class="keywordflow">if</span> (ret) +00049 <span class="keywordflow">goto</span> out; +00050 } +00051 <span class="keywordflow">return</span> 0; +00052 out: +00053 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"probe module initialization failed. Exiting...\n"</span>); +00054 <a class="code" href="probes_8c.html#a1">_stp_unregister_jprobes</a>(probes, i); +00055 <span class="keywordflow">return</span> ret; +00056 } +00057 <span class="comment"></span> +00058 <span class="comment">/** Unregister a group of kprobes.</span> +00059 <span class="comment"> * @param probes Pointer to an array of struct kprobe.</span> +00060 <span class="comment"> * @param num_probes Number of probes in the array.</span> +00061 <span class="comment"> */</span> +00062 +<a name="l00063"></a><a class="code" href="probes_8c.html#a3">00063</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) +00064 { +00065 <span class="keywordtype">int</span> i; +00066 <span class="keywordflow">for</span> (i = 0; i < num_probes; i++) +00067 unregister_kprobe(&probes[i]); +00068 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"All kprobes removed\n"</span>); +00069 } +00070 <span class="comment"></span> +00071 <span class="comment">/** Register a group of kprobes.</span> +00072 <span class="comment"> * @param probes Pointer to an array of struct kprobe.</span> +00073 <span class="comment"> * @param num_probes Number of probes in the array.</span> +00074 <span class="comment"> * @return 0 on success.</span> +00075 <span class="comment"> */</span> +00076 +<a name="l00077"></a><a class="code" href="probes_8c.html#a4">00077</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) +00078 { +00079 <span class="keywordtype">int</span> i, ret ; +00080 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; 00081 +00082 <span class="keywordflow">for</span> (i = 0; i < num_probes; i++) { +00083 addr =<a class="code" href="probes_8c.html#a0">_stp_lookup_name</a>((<span class="keywordtype">char</span> *)probes[i].addr); +00084 <span class="keywordflow">if</span> (addr == 0) { +00085 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"ERROR: function %s not found!\n"</span>, +00086 (<span class="keywordtype">char</span> *)probes[i].addr); +00087 ret = -1; <span class="comment">/* FIXME */</span> +00088 <span class="keywordflow">goto</span> out; +00089 } +00090 <a class="code" href="io_8c.html#a4">dlog</a>(<span class="stringliteral">"inserting kprobe at %s (%p)\n"</span>, probes[i].addr, addr); +00091 probes[i].addr = (kprobe_opcode_t *)addr; +00092 ret = register_kprobe(&probes[i]); +00093 <span class="keywordflow">if</span> (ret) +00094 <span class="keywordflow">goto</span> out; +00095 } +00096 <span class="keywordflow">return</span> 0; +00097 out: +00098 <a class="code" href="io_8c.html#a4">dlog</a> (<span class="stringliteral">"probe module initialization failed. Exiting...\n"</span>); +00099 <a class="code" href="probes_8c.html#a3">_stp_unregister_kprobes</a>(probes, i); +00100 <span class="keywordflow">return</span> ret; +00101 } +00102 </pre></div><hr size="1"><address style="align: right;"><small> -Generated on Tue Mar 22 00:32:02 2005 for SystemTap.</small></body> +Generated on Tue Mar 22 10:27:36 2005 for SystemTap.</small></body> </html> |