summaryrefslogtreecommitdiffstats
path: root/dwflpp.cxx
diff options
context:
space:
mode:
authorMark Wielaard <mark@hermans.wildebeest.org>2009-11-08 22:03:31 +0100
committerMark Wielaard <mark@hermans.wildebeest.org>2009-11-08 22:03:31 +0100
commitfafeaf8e5874e6855343421b5dd91403fc49c991 (patch)
treeb0b7a95fbf40f88d8b680d55c384b5ff1c623c56 /dwflpp.cxx
parente29b2f5a9c72fa413af00023384a39d4b667f17a (diff)
downloadsystemtap-steved-fafeaf8e5874e6855343421b5dd91403fc49c991.tar.gz
systemtap-steved-fafeaf8e5874e6855343421b5dd91403fc49c991.tar.xz
systemtap-steved-fafeaf8e5874e6855343421b5dd91403fc49c991.zip
PR10923 Handle AT_frame_base given by DW_OP_call_frame_cfa in .debug_frame.
dwarf_cfi_addrframe should not be called with pc adjusted to the bias of the dwfl_module_dwarf_cfi or dwfl_module_eh_cfi. This just happened to work in the .eh_frame case because bias was always zero. * dwflpp.cxx (get_cfa_ops): Don't adjust pc for bias.
Diffstat (limited to 'dwflpp.cxx')
-rw-r--r--dwflpp.cxx4
1 files changed, 2 insertions, 2 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index 0c45eb7d..fbfe3f94 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -2748,7 +2748,7 @@ dwflpp::get_cfa_ops (Dwarf_Addr pc)
if (sess.verbose > 3)
clog << "got dwarf cfi bias: 0x" << hex << bias << dec << endl;
Dwarf_Frame *frame = NULL;
- if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0)
+ if (dwarf_cfi_addrframe (cfi, pc, &frame) == 0)
dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops);
else if (sess.verbose > 3)
clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl;
@@ -2764,7 +2764,7 @@ dwflpp::get_cfa_ops (Dwarf_Addr pc)
if (sess.verbose > 3)
clog << "got eh cfi bias: 0x" << hex << bias << dec << endl;
Dwarf_Frame *frame = NULL;
- if (dwarf_cfi_addrframe (cfi, pc - bias, &frame) == 0)
+ if (dwarf_cfi_addrframe (cfi, pc, &frame) == 0)
dwarf_frame_cfa (frame, &cfa_ops, &cfa_nops);
else if (sess.verbose > 3)
clog << "dwarf_cfi_addrframe failed: " << dwarf_errmsg(-1) << endl;