diff options
author | Mark Wielaard <mjw@redhat.com> | 2009-07-31 18:46:47 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2009-07-31 19:01:45 +0200 |
commit | 6415dddecb81f59996e422e87e1d3da266d743e8 (patch) | |
tree | bd8d939f14299912e111e2027399c39538e394ca /runtime/unwind | |
parent | f1312b2c2bc1ec7b0475a251f27a2f75779f4ccb (diff) | |
download | systemtap-steved-6415dddecb81f59996e422e87e1d3da266d743e8.tar.gz systemtap-steved-6415dddecb81f59996e422e87e1d3da266d743e8.tar.xz systemtap-steved-6415dddecb81f59996e422e87e1d3da266d743e8.zip |
PR10458. User actual breakpoint address for [ku]probe[ret].
Setup the pt_regs REG_IP to the actual breakpoint address before
entering a probe handler for [ku]probe[ret] (and restore it after
returning). This helps getting symbol resolution and backtraces
more correct and makes it more conform with other probe handlers
like the iutrace and profile timers that also provide pt_regs
(which untill now exhibited off-by-one errors while unwinding).
* tapsets.cxx (dwarf_derived_probe_group::emit_module_decls):
Setup REG_IP correctly before calling enter_kprobe_probe
and enter_kretprobe_probe, and restore afterwards.
(uprobe_derived_probe_group::emit_module_decls): Likewise for
enter_uprobe_probe and enter_uretprobe_probe.
(kprobe_derived_probe_group::emit_module_decls): Likewise for
enter_kprobe2_probe and enter_kretprobe2_probe.
* runtime/unwind/i386.h (arch_unw_init_frame_info): Initialize
info->call_frame to zero.
* runtime/unwind/x86_64.h (arch_unw_init_frame_info): Likewise.
Diffstat (limited to 'runtime/unwind')
-rw-r--r-- | runtime/unwind/i386.h | 2 | ||||
-rw-r--r-- | runtime/unwind/x86_64.h | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/runtime/unwind/i386.h b/runtime/unwind/i386.h index 9f488f07..b19df584 100644 --- a/runtime/unwind/i386.h +++ b/runtime/unwind/i386.h @@ -92,7 +92,7 @@ static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, #endif } - info->call_frame = 1; + info->call_frame = 0; } static inline void arch_unw_init_blocked(struct unwind_frame_info *info) diff --git a/runtime/unwind/x86_64.h b/runtime/unwind/x86_64.h index 3c70f206..8860b8ee 100644 --- a/runtime/unwind/x86_64.h +++ b/runtime/unwind/x86_64.h @@ -107,7 +107,7 @@ static inline void arch_unw_init_frame_info(struct unwind_frame_info *info, /*const*/ struct pt_regs *regs) { info->regs = *regs; - info->call_frame = 1; + info->call_frame = 0; } static inline void arch_unw_init_blocked(struct unwind_frame_info *info) |