From fafeaf8e5874e6855343421b5dd91403fc49c991 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 8 Nov 2009 22:03:31 +0100 Subject: 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. --- dwflpp.cxx | 4 ++-- 1 file 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; -- cgit