summaryrefslogtreecommitdiffstats
path: root/runtime/unwind
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-07-31 18:46:47 +0200
committerMark Wielaard <mjw@redhat.com>2009-07-31 19:01:45 +0200
commit6415dddecb81f59996e422e87e1d3da266d743e8 (patch)
treebd8d939f14299912e111e2027399c39538e394ca /runtime/unwind
parentf1312b2c2bc1ec7b0475a251f27a2f75779f4ccb (diff)
downloadsystemtap-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.h2
-rw-r--r--runtime/unwind/x86_64.h2
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)