From c45319065d6e3ae91ae833f7afbf0edba6c87d89 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 21 Apr 2009 17:16:51 +0200 Subject: Add ubacktrace(), print_ustack() and print_ubacktrace(). * runtime/sym.c (_stp_usymbol_print): New function. * tapset/ucontext-unwind.stp (print_ubacktrace): New tapset function. (ubacktrace): Likewise. * tapset/ucontext-symbols.stp (print_ustack): Likewise. * testsuite/buildok/ustack.stp: New test for above three functions. --- tapset/ucontext-unwind.stp | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tapset/ucontext-unwind.stp (limited to 'tapset/ucontext-unwind.stp') diff --git a/tapset/ucontext-unwind.stp b/tapset/ucontext-unwind.stp new file mode 100644 index 00000000..b70f6da7 --- /dev/null +++ b/tapset/ucontext-unwind.stp @@ -0,0 +1,52 @@ +// 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. + * + * Equivalent to print_ustack(ubacktrace()), + * except that deeper stack nesting may be supported. Return nothing. + */ +function print_ubacktrace () %{ + if (CONTEXT->regs) { + _stp_stack_print(CONTEXT->regs, 1, CONTEXT->pi, MAXTRACE, + current); + } else { + _stp_printf("Systemtap probe: %s\n", CONTEXT->probe_point); + } +%} + +/** + * sfunction ubacktrace - Hex backtrace of current task stack. + * + * 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 */ + if (CONTEXT->regs) + _stp_stack_snprint (THIS->__retvalue, MAXSTRINGLEN, + CONTEXT->regs, 0, CONTEXT->pi, MAXTRACE, + current); + else + strlcpy (THIS->__retvalue, "", MAXSTRINGLEN); +%} -- cgit From 7d7f074398802c84f544e263995ce15874b9f408 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 21 Apr 2009 19:57:02 +0200 Subject: Mark ucontext tapset functions EXPERIMENTAL. * tapset/ucontext-symbols.stp (usymname, usymdata, print_ustack): mark EXPERIMENTAL. * tapset/ucontext-unwind.stp (print_ubacktrace, ubacktrace): Likewise. --- tapset/ucontext-unwind.stp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tapset/ucontext-unwind.stp') diff --git a/tapset/ucontext-unwind.stp b/tapset/ucontext-unwind.stp index b70f6da7..0801f1c9 100644 --- a/tapset/ucontext-unwind.stp +++ b/tapset/ucontext-unwind.stp @@ -19,7 +19,7 @@ %} /** - * sfunction print_ubacktrace - Print stack back trace for current task. + * 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. @@ -34,7 +34,7 @@ function print_ubacktrace () %{ %} /** - * sfunction ubacktrace - Hex backtrace of current task stack. + * 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 -- cgit