diff options
author | Mark Wielaard <mark@hermans.wildebeest.org> | 2009-11-08 22:03:31 +0100 |
---|---|---|
committer | Mark Wielaard <mark@hermans.wildebeest.org> | 2009-11-08 22:03:31 +0100 |
commit | fafeaf8e5874e6855343421b5dd91403fc49c991 (patch) | |
tree | b0b7a95fbf40f88d8b680d55c384b5ff1c623c56 /dwflpp.cxx | |
parent | e29b2f5a9c72fa413af00023384a39d4b667f17a (diff) | |
download | systemtap-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.cxx | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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; |