diff options
author | Mark Wielaard <mjw@redhat.com> | 2009-06-03 15:36:03 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2009-06-03 15:36:03 +0200 |
commit | 129de9ef18cd142e31ed509a7704d4faf0879f4c (patch) | |
tree | 7c177716d871c8173a3b997581e2e9d3d18474ea /runtime/sym.h | |
parent | 987a37e77751d1a8aac0a0591c3b53fddf0de7cd (diff) | |
download | systemtap-steved-129de9ef18cd142e31ed509a7704d4faf0879f4c.tar.gz systemtap-steved-129de9ef18cd142e31ed509a7704d4faf0879f4c.tar.xz systemtap-steved-129de9ef18cd142e31ed509a7704d4faf0879f4c.zip |
Detect kretprobe trampoline and use fallback unwinder.
* runtime/sym.h (_stp_kretprobe_trampoline): Document.
* translate.cxx (unwindsym_dump_context): Add stp_kretprobe_trampoline_addr.
(dump_unwindsyms): Detect kretprobe_trampoline_holder symbol address.
(emit_symbol_data): Initialize and emit _stp_kretprobe_trampoline.
* runtime/transport/symbols.c (_stp_do_relocation): Detect kernel load
address and adjust _stp_kretprobe_trampoline.
* runtime/stack-i386.c (__stp_stack_print): Always use fallback unwinder
when hitting kretprobe_trampoline_holder.
* runtime/stack-x86_64.c (__stp_stack_print): Likewise.
Diffstat (limited to 'runtime/sym.h')
-rw-r--r-- | runtime/sym.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/runtime/sym.h b/runtime/sym.h index 7e28ebe6..ca69345f 100644 --- a/runtime/sym.h +++ b/runtime/sym.h @@ -61,10 +61,10 @@ struct _stp_module { static struct _stp_module *_stp_modules []; static unsigned _stp_num_modules; - -/* the number of modules in the arrays */ - -static unsigned long _stp_kretprobe_trampoline = 0; +/* Used in the unwinder to special case unwinding through kretprobes. */ +/* Initialized through translator (stap-symbols.h) relative to kernel */ +/* load address, fixup by transport symbols _stp_do_relocation */ +static unsigned long _stp_kretprobe_trampoline; static unsigned long _stp_module_relocate (const char *module, const char *section, unsigned long offset); static struct _stp_module *_stp_get_unwind_info (unsigned long addr); |