diff options
author | hunt <hunt> | 2005-03-29 18:07:58 +0000 |
---|---|---|
committer | hunt <hunt> | 2005-03-29 18:07:58 +0000 |
commit | e32551b18f4560056d2d482f5e1505b1b98fa82a (patch) | |
tree | 4e9e07a9b46a4fd5dea27732571cbb04c0ef5dee /runtime/docs/html/stack_8c-source.html | |
parent | 13b35bb112459702e7371ecc89d7deb789818a86 (diff) | |
download | systemtap-steved-e32551b18f4560056d2d482f5e1505b1b98fa82a.tar.gz systemtap-steved-e32551b18f4560056d2d482f5e1505b1b98fa82a.tar.xz systemtap-steved-e32551b18f4560056d2d482f5e1505b1b98fa82a.zip |
*** empty log message ***
Diffstat (limited to 'runtime/docs/html/stack_8c-source.html')
-rw-r--r-- | runtime/docs/html/stack_8c-source.html | 341 |
1 files changed, 163 insertions, 178 deletions
diff --git a/runtime/docs/html/stack_8c-source.html b/runtime/docs/html/stack_8c-source.html index dda3013a..f4df8413 100644 --- a/runtime/docs/html/stack_8c-source.html +++ b/runtime/docs/html/stack_8c-source.html @@ -4,181 +4,166 @@ <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 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>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> -00005 <span class="preprocessor">#include <linux/kallsyms.h></span> -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 = <a class="code" href="io_8c.html#a1">_stp_kallsyms_lookup</a>(address, &symsize, &offset, &modname, namebuf); -00016 <span class="keywordflow">if</span> (!symname) -00017 return printk("[<%016lx>]", address); -00018 if (!modname) -00019 modname = delim = ""; -00020 return printk("<%016lx>{%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> -00025 <span class="stringliteral">{</span> -00026 <span class="stringliteral"> unsigned long addr;</span> -00027 <span class="stringliteral"> unsigned long *irqstack, *irqstack_end, *estack_end;</span> -00028 <span class="stringliteral"> const int cpu = safe_smp_processor_id();</span> -00029 <span class="stringliteral"> int i;</span> -00030 <span class="stringliteral"></span> -00031 <span class="stringliteral"> printk("</span>\nCall Trace:<span class="stringliteral">");</span> -00032 <span class="stringliteral"> i = 0; </span> -00033 <span class="stringliteral"> </span> -00034 <span class="stringliteral"> estack_end = in_exception_stack(cpu, (unsigned long)stack); </span> -00035 <span class="stringliteral"> if (estack_end) { </span> -00036 <span class="stringliteral"> while (stack < estack_end) { </span> -00037 <span class="stringliteral"> addr = *stack++; </span> -00038 <span class="stringliteral"> if (__kernel_text_address(addr)) {</span> -00039 <span class="stringliteral"> i += printk_address(addr);</span> -00040 <span class="stringliteral"> i += printk("</span> <span class="stringliteral">"); </span> -00041 <span class="stringliteral"> if (i > 50) {</span> -00042 <span class="stringliteral"> printk("</span>\n<span class="stringliteral">"); </span> -00043 <span class="stringliteral"> i = 0;</span> -00044 <span class="stringliteral"> }</span> -00045 <span class="stringliteral"> }</span> -00046 <span class="stringliteral"> }</span> -00047 <span class="stringliteral"> i += printk("</span> <EOE> <span class="stringliteral">"); </span> -00048 <span class="stringliteral"> i += 7;</span> -00049 <span class="stringliteral"> stack = (unsigned long *) estack_end[-2]; </span> -00050 <span class="stringliteral"> } </span> -00051 <span class="stringliteral"></span> -00052 <span class="stringliteral"> irqstack_end = (unsigned long *) (cpu_pda[cpu].irqstackptr);</span> -00053 <span class="stringliteral"> irqstack = (unsigned long *) (cpu_pda[cpu].irqstackptr - IRQSTACKSIZE + 64);</span> -00054 <span class="stringliteral"></span> -00055 <span class="stringliteral"> if (stack >= irqstack && stack < irqstack_end) {</span> -00056 <span class="stringliteral"> printk("</span><IRQ> <span class="stringliteral">"); </span> -00057 <span class="stringliteral"> while (stack < irqstack_end) {</span> -00058 <span class="stringliteral"> addr = *stack++;</span> -00059 <span class="stringliteral"> /*</span> -00060 <span class="stringliteral"> * If the address is either in the text segment of the</span> -00061 <span class="stringliteral"> * kernel, or in the region which contains vmalloc'ed</span> -00062 <span class="stringliteral"> * memory, it *may* be the address of a calling</span> -00063 <span class="stringliteral"> * routine; if so, print it so that someone tracing</span> -00064 <span class="stringliteral"> * down the cause of the crash will be able to figure</span> -00065 <span class="stringliteral"> * out the call path that was taken.</span> -00066 <span class="stringliteral"> */</span> -00067 <span class="stringliteral"> if (__kernel_text_address(addr)) {</span> -00068 <span class="stringliteral"> i += printk_address(addr);</span> -00069 <span class="stringliteral"> i += printk("</span> <span class="stringliteral">"); </span> -00070 <span class="stringliteral"> if (i > 50) { </span> -00071 <span class="stringliteral"> printk("</span>\n <span class="stringliteral">");</span> -00072 <span class="stringliteral"> i = 0;</span> -00073 <span class="stringliteral"> } </span> -00074 <span class="stringliteral"> }</span> -00075 <span class="stringliteral"> } </span> -00076 <span class="stringliteral"> stack = (unsigned long *) (irqstack_end[-1]);</span> -00077 <span class="stringliteral"> printk("</span> <EOI> <span class="stringliteral">");</span> -00078 <span class="stringliteral"> i += 7;</span> -00079 <span class="stringliteral"> } </span> -00080 <span class="stringliteral"></span> -00081 <span class="stringliteral"> while (((long) stack & (THREAD_SIZE-1)) != 0) {</span> -00082 <span class="stringliteral"> addr = *stack++;</span> -00083 <span class="stringliteral"> if (__kernel_text_address(addr)) {</span> -00084 <span class="stringliteral"> i += printk_address(addr);</span> -00085 <span class="stringliteral"> i += printk("</span> <span class="stringliteral">"); </span> -00086 <span class="stringliteral"> if (i > 50) { </span> -00087 <span class="stringliteral"> printk("</span>\n <span class="stringliteral">");</span> -00088 <span class="stringliteral"> i = 0;</span> -00089 <span class="stringliteral"> } </span> -00090 <span class="stringliteral"> }</span> -00091 <span class="stringliteral"> }</span> -00092 <span class="stringliteral"> printk("</span>\n<span class="stringliteral">");</span> -00093 <span class="stringliteral">}</span> -00094 <span class="stringliteral"></span> -00095 <span class="stringliteral">void _stp_dump_stack(void)</span> -00096 <span class="stringliteral">{</span> -00097 <span class="stringliteral"> unsigned long dummy;</span> -00098 <span class="stringliteral"> show_trace(&dummy);</span> -00099 <span class="stringliteral">}</span> -00100 <span class="stringliteral"></span> -00101 <span class="stringliteral">#else /* i386 */</span> -00102 <span class="stringliteral"></span> -00103 <span class="stringliteral">static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)</span> -00104 <span class="stringliteral">{</span> -00105 <span class="stringliteral"> return p > (void *)tinfo &&</span> -00106 <span class="stringliteral"> p < (void *)tinfo + THREAD_SIZE - 3;</span> -00107 <span class="stringliteral">}</span> -00108 <span class="stringliteral"></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> -00113 <span class="stringliteral"> return __module_text_address(addr) != NULL;</span> -00114 <span class="stringliteral">}</span> -00115 <span class="stringliteral"></span> -00116 <span class="stringliteral">static inline unsigned long _stp_print_context_stack(struct thread_info *tinfo,</span> -00117 <span class="stringliteral"> unsigned long *stack, unsigned long ebp)</span> -00118 <span class="stringliteral">{</span> -00119 <span class="stringliteral"> unsigned long addr;</span> -00120 <span class="stringliteral"></span> -00121 <span class="stringliteral">#ifdef CONFIG_FRAME_POINTER</span> -00122 <span class="stringliteral"> while (valid_stack_ptr(tinfo, (void *)ebp)) {</span> -00123 <span class="stringliteral"> addr = *(unsigned long *)(ebp + 4);</span> -00124 <span class="stringliteral"> _stp_print_buf("</span> [<%08lx>] <span class="stringliteral">", addr);</span> -00125 <span class="stringliteral"> _stp_print_symbol("</span>%s<span class="stringliteral">", addr);</span> -00126 <span class="stringliteral"> _stp_print_buf("</span>\n<span class="stringliteral">");</span> -00127 <span class="stringliteral"> ebp = *(unsigned long *)ebp;</span> -00128 <span class="stringliteral"> }</span> -00129 <span class="stringliteral">#else</span> -00130 <span class="stringliteral"> while (valid_stack_ptr(tinfo, stack)) {</span> -00131 <span class="stringliteral"> addr = *stack++;</span> -00132 <span class="stringliteral"> if (__kernel_text_address(addr)) {</span> -00133 <span class="stringliteral"> _stp_print_buf("</span> [<%08lx>]<span class="stringliteral">", addr);</span> -00134 <span class="stringliteral"> _stp_print_symbol("</span> %s<span class="stringliteral">", addr);</span> -00135 <span class="stringliteral"> _stp_print_buf("</span>\n<span class="stringliteral">");</span> -00136 <span class="stringliteral"> }</span> -00137 <span class="stringliteral"> }</span> -00138 <span class="stringliteral">#endif</span> -00139 <span class="stringliteral"> return ebp;</span> -00140 <span class="stringliteral">}</span> -00141 <span class="stringliteral"></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> -00146 <span class="stringliteral"> if (!task)</span> -00147 <span class="stringliteral"> task = current;</span> -00148 <span class="stringliteral"></span> -00149 <span class="stringliteral"> if (task == current) {</span> -00150 <span class="stringliteral"> /* Grab ebp right from our regs */</span> -00151 <span class="stringliteral"> asm ("</span>movl %%ebp, %0<span class="stringliteral">" : "</span>=r<span class="stringliteral">" (ebp) : );</span> -00152 <span class="stringliteral"> } else {</span> -00153 <span class="stringliteral"> /* ebp is the last reg pushed by switch_to */</span> -00154 <span class="stringliteral"> ebp = *(unsigned long *) task->thread.esp;</span> -00155 <span class="stringliteral"> }</span> -00156 <span class="stringliteral"></span> -00157 <span class="stringliteral"> while (1) {</span> -00158 <span class="stringliteral"> struct thread_info *context;</span> -00159 <span class="stringliteral"> context = (struct thread_info *)</span> -00160 <span class="stringliteral"> ((unsigned long)stack & (~(THREAD_SIZE - 1)));</span> -00161 <span class="stringliteral"> ebp = _stp_print_context_stack(context, stack, ebp);</span> -00162 <span class="stringliteral"> stack = (unsigned long*)context->previous_esp;</span> -00163 <span class="stringliteral"> if (!stack)</span> -00164 <span class="stringliteral"> break;</span> -00165 <span class="stringliteral"> _stp_print_buf("</span> =======================\n<span class="stringliteral">");</span> -00166 <span class="stringliteral"> }</span> -00167 <span class="stringliteral">}</span> -00168 <span class="stringliteral"></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, &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 Tue Mar 22 10:27:36 2005 for SystemTap.</small></body> -</html> +<div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</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>stack.c</h1><a href="stack_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="preprocessor">#ifndef _STACK_C_</span> +00002 <span class="preprocessor"></span><span class="preprocessor">#define _STACK_C_</span> +00003 <span class="preprocessor"></span><span class="comment">/* -*- linux-c -*- */</span> +00004 <span class="comment"></span> +00005 <span class="comment">/** @file stack.c</span> +00006 <span class="comment"> * @brief Stack Tracing Functions</span> +00007 <span class="comment"> */</span> +00008 <span class="comment"></span> +00009 <span class="comment">/** @addtogroup stack Stack Tracing Functions</span> +00010 <span class="comment"> * @{</span> +00011 <span class="comment"> */</span> +00012 +00013 <span class="preprocessor">#include "sym.c"</span> +00014 +00015 <span class="keyword">static</span> int (*_stp_kta)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr)=(<span class="keywordtype">void</span> *)KTA; +00016 +00017 <span class="preprocessor">#ifdef __x86_64__</span> +00018 <span class="preprocessor"></span><span class="keyword">static</span> <span class="keywordtype">void</span> __stp_stack_print (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, <span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00019 { +00020 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; +00021 +00022 <span class="keywordflow">if</span> (verbose) +00023 _stp_print ("trace for %d (%s)\n", current->pid, current->comm); +00024 +00025 while (((<span class="keywordtype">long</span>) stack & (THREAD_SIZE-1)) != 0) { +00026 addr = *stack++; +00027 <span class="keywordflow">if</span> (_stp_kta(addr)) { +00028 <span class="keywordflow">if</span> (verbose) +00029 _stp_symbol_print (addr); +00030 else +00031 _stp_print ("0x%lx ", addr); +00032 } +00033 } +00034 _stp_print_str ("\n"); +00035 } +00036 +00037 +00038 static <span class="keywordtype">char</span> *__stp_stack_sprint (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, <span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00039 { +00040 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; +00041 <span class="keywordtype">char</span> *ptr = _stp_scbuf_cur(); +00042 <span class="keywordflow">while</span> (((<span class="keywordtype">long</span>) stack & (THREAD_SIZE-1)) != 0) { +00043 addr = *stack++; +00044 <span class="keywordflow">if</span> (_stp_kta(addr)) { +00045 <span class="keywordflow">if</span> (verbose) +00046 _stp_symbol_sprint (addr); +00047 else +00048 _stp_sprint ("0x%lx ", addr); +00049 } +00050 } +00051 return ptr; +00052 } +00053 +00054 #else <span class="comment">/* i386 */</span> +00055 +00056 static inline <span class="keywordtype">int</span> valid_stack_ptr (struct thread_info *tinfo, <span class="keywordtype">void</span> *p) +00057 { +00058 <span class="keywordflow">return</span> p > (<span class="keywordtype">void</span> *)tinfo && +00059 p < (<span class="keywordtype">void</span> *)tinfo + THREAD_SIZE - 3; +00060 } +00061 +00062 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _stp_print_context_stack ( +00063 <span class="keyword">struct</span> thread_info *tinfo, +00064 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, +00065 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ebp ) +00066 { +00067 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; +00068 +00069 <span class="preprocessor">#ifdef CONFIG_FRAME_POINTER</span> +00070 <span class="preprocessor"></span> <span class="keywordflow">while</span> (valid_stack_ptr(tinfo, (<span class="keywordtype">void</span> *)ebp)) { +00071 addr = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)(ebp + 4); +00072 <a class="code" href="group__sym.html#ga3">_stp_symbol_print</a> (addr); +00073 <a class="code" href="group__io.html#ga2">_stp_print_str</a>(<span class="stringliteral">"\n"</span>); +00074 ebp = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)ebp; +00075 } +00076 <span class="preprocessor">#else</span> +00077 <span class="preprocessor"></span> <span class="keywordflow">while</span> (valid_stack_ptr(tinfo, stack)) { +00078 addr = *stack++; +00079 <span class="keywordflow">if</span> (_stp_kta (addr)) { +00080 <a class="code" href="group__sym.html#ga3">_stp_symbol_print</a> (addr); +00081 <a class="code" href="group__io.html#ga2">_stp_print_str</a> (<span class="stringliteral">"\n"</span>); +00082 } +00083 } +00084 <span class="preprocessor">#endif</span> +00085 <span class="preprocessor"></span> <span class="keywordflow">return</span> ebp; +00086 } +00087 +00088 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _stp_sprint_context_stack ( +00089 <span class="keyword">struct</span> thread_info *tinfo, +00090 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, +00091 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ebp ) +00092 { +00093 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> addr; +00094 +00095 <span class="preprocessor">#ifdef CONFIG_FRAME_POINTER</span> +00096 <span class="preprocessor"></span> <span class="keywordflow">while</span> (valid_stack_ptr(tinfo, (<span class="keywordtype">void</span> *)ebp)) { +00097 addr = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)(ebp + 4); +00098 <a class="code" href="group__sym.html#ga2">_stp_symbol_sprint</a> (addr); +00099 _stp_sprint_str(<span class="stringliteral">"\n"</span>); +00100 ebp = *(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *)ebp; +00101 } +00102 <span class="preprocessor">#else</span> +00103 <span class="preprocessor"></span> <span class="keywordflow">while</span> (valid_stack_ptr(tinfo, stack)) { +00104 addr = *stack++; +00105 <span class="keywordflow">if</span> (_stp_kta (addr)) { +00106 <a class="code" href="group__sym.html#ga2">_stp_symbol_sprint</a> (addr); +00107 _stp_sprint_str (<span class="stringliteral">"\n"</span>); +00108 } +00109 } +00110 <span class="preprocessor">#endif</span> +00111 <span class="preprocessor"></span> <span class="keywordflow">return</span> ebp; +00112 } +00113 +00114 <span class="keyword">static</span> <span class="keywordtype">void</span> __stp_stack_print (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, <span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00115 { +00116 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ebp; +00117 +00118 <span class="comment">/* Grab ebp right from our regs */</span> +00119 <span class="keyword">asm</span> (<span class="stringliteral">"movl %%ebp, %0"</span> : <span class="stringliteral">"=r"</span> (ebp) : ); +00120 +00121 <span class="keywordflow">while</span> (stack) { +00122 <span class="keyword">struct </span>thread_info *context = (<span class="keyword">struct </span>thread_info *) +00123 ((<span class="keywordtype">unsigned</span> long)stack & (~(THREAD_SIZE - 1))); +00124 ebp = _stp_print_context_stack (context, stack, ebp); +00125 stack = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>*)context->previous_esp; +00126 } +00127 } +00128 +00129 <span class="keyword">static</span> <span class="keywordtype">void</span> __stp_stack_sprint (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *stack, <span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00130 { +00131 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ebp; +00132 +00133 <span class="comment">/* Grab ebp right from our regs */</span> +00134 <span class="keyword">asm</span> (<span class="stringliteral">"movl %%ebp, %0"</span> : <span class="stringliteral">"=r"</span> (ebp) : ); +00135 +00136 <span class="keywordflow">while</span> (stack) { +00137 <span class="keyword">struct </span>thread_info *context = (<span class="keyword">struct </span>thread_info *) +00138 ((<span class="keywordtype">unsigned</span> long)stack & (~(THREAD_SIZE - 1))); +00139 ebp = _stp_sprint_context_stack (context, stack, ebp); +00140 stack = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>*)context->previous_esp; +00141 } +00142 } +00143 +00144 <span class="preprocessor">#endif </span><span class="comment">/* i386 */</span> +00145 +00146 <span class="keywordtype">void</span> _stp_stack_print (<span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00147 { +00148 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> stack; +00149 <span class="keywordflow">return</span> __stp_stack_print (&stack, verbose, levels); +00150 } +00151 +00152 <span class="keywordtype">char</span> *_stp_stack_sprint (<span class="keywordtype">int</span> verbose, <span class="keywordtype">int</span> levels) +00153 { +00154 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> stack; +00155 <span class="keywordtype">char</span> *ptr = _stp_scbuf_cur(); +00156 __stp_stack_sprint (&stack, verbose, levels); +00157 <span class="keywordflow">return</span> ptr; +00158 } +00159 <span class="comment"></span> +00160 <span class="comment">/** @} */</span> +00161 <span class="preprocessor">#endif </span><span class="comment">/* _STACK_C_ */</span> +</pre></div></body></html> |