// User context unwind tapset // Copyright (C) 2009 Red Hat Inc. // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. %{ #ifndef STP_NEED_UNWIND_DATA #define STP_NEED_UNWIND_DATA 1 #endif #ifndef STP_NEED_SYMBOL_DATA #define STP_NEED_SYMBOL_DATA 1 #endif #ifndef STP_NEED_VMA_TRACKER #define STP_NEED_VMA_TRACKER 1 #endif %} /** * sfunction print_ubacktrace - Print stack back trace for current task. EXPERIMENTAL! * * Equivalent to print_ustack(ubacktrace()), * except that deeper stack nesting may be supported. Return nothing. */ function print_ubacktrace () %{ /* unprivileged */ assert_is_myproc(); if (CONTEXT->regs) { _stp_stack_print(CONTEXT->regs, 1, CONTEXT->pi, MAXTRACE, current, CONTEXT->ri); } else { _stp_printf("Systemtap probe: %s\n", CONTEXT->probe_point); } %} /** * sfunction print_ubacktrace_brief- Print stack back trace for current task. EXPERIMENTAL! * * Equivalent to print_ubacktrace(), but output for each symbol is * shorter (just name and offset), and the function address is * printed if it can't be mapped to a name. */ function print_ubacktrace_brief () %{ /* unprivileged */ assert_is_myproc(); if (CONTEXT->regs) { _stp_stack_print(CONTEXT->regs, SYM_VERBOSE_BRIEF, CONTEXT->pi, MAXTRACE, current, CONTEXT->ri); } else { _stp_printf("Systemtap probe: %s\n", CONTEXT->probe_point); } %} /** * sfunction ubacktrace - Hex backtrace of current task stack. EXPERIMENTAL! * * Return a string of hex addresses that are a backtrace of the * stack of the current task. Output may be truncated as per maximum * string length. Returns empty string when current probe point cannot * determine user backtrace. */ function ubacktrace:string () %{ /* pure */ /* unprivileged */ assert_is_myproc(); if (CONTEXT->regs) _stp_stack_snprint (THIS->__retvalue, MAXSTRINGLEN, CONTEXT->regs, 0, CONTEXT->pi, MAXTRACE, current, CONTEXT->ri); else strlcpy (THIS->__retvalue, "", MAXSTRINGLEN); %}