[Lldb-commits] [lldb] r160150 - /lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
Jason Molenda
jmolenda at apple.com
Thu Jul 12 16:43:03 PDT 2012
Author: jmolenda
Date: Thu Jul 12 18:43:02 2012
New Revision: 160150
URL: http://llvm.org/viewvc/llvm-project?rev=160150&view=rev
Log:
When parsing the epilogue of a thumbv2 function, when we see the
frame pointer overwritten with the caller's fp value, return to
expressing the CFA in terms of the stack pointer.
<rdar://problem/11855862>
Modified:
lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
Modified: lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp?rev=160150&r1=160149&r2=160150&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp (original)
+++ lldb/trunk/source/Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.cpp Thu Jul 12 18:43:02 2012
@@ -490,6 +490,20 @@
{
m_curr_row.SetRegisterLocationToSame (reg_num, must_replace);
}
+ // if we just restored the caller's reg value in the reg we were using for the frame pointer,
+ // change the CFA to be in terms of the stack pointer again.
+ if (m_fp_is_cfa && reg_num == m_cfa_reg_info.kinds[m_unwind_plan_ptr->GetRegisterKind()])
+ {
+ m_fp_is_cfa = false;
+ m_inst_emulator_ap->GetRegisterInfo (m_unwind_plan_ptr->GetRegisterKind(),
+ m_unwind_plan_ptr->GetInitialCFARegister(),
+ m_cfa_reg_info);
+ m_curr_row.SetCFARegister(m_cfa_reg_info.kinds[m_unwind_plan_ptr->GetRegisterKind()]);
+ if (log && log->GetVerbose())
+ {
+ log->Printf("UnwindAssemblyInstEmulation::WriteRegister - CFA is expressed in terms of %s again", m_cfa_reg_info.name);
+ }
+ }
}
break;
More information about the lldb-commits
mailing list