Author: Jason Molenda Date: 2020-02-24T19:03:22-08:00 New Revision: 4fdd2edbdb4bfe6a95df0fac12e8beffcbe33b86
URL: https://github.com/llvm/llvm-project/commit/4fdd2edbdb4bfe6a95df0fac12e8beffcbe33b86 DIFF: https://github.com/llvm/llvm-project/commit/4fdd2edbdb4bfe6a95df0fac12e8beffcbe33b86.diff LOG: Revert "Unwind past an interrupt handler correctly on arm or at pc==0" The aarcht64-ubuntu bot is showing a test failure in TestHandleAbort.py with this patch. Adding some logging to that file, it looks like the saved register context above the trap handler does not have save state for $pc, but it does have it for $lr on that platform. I need to fall back to looking for $lr if the $pc cannot be retrieved. I'll update the patch and re-commit once that's fixed. This reverts commit edc4f4c9c9d90b2a4f8831ba4c873f08eaa5395a. Added: Modified: lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp Removed: ################################################################################ diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp index d46b87281f11..56dd273c25b7 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp @@ -328,13 +328,9 @@ void RegisterContextLLDB::InitializeNonZerothFrame() { // If we don't have a Module for some reason, we're not going to find // symbol/function information - just stick in some reasonable defaults and - // hope we can unwind past this frame. If we're above a trap handler, - // we may be at a bogus address because we jumped through a bogus function - // pointer and trapped, so don't force the arch default unwind plan in that - // case. + // hope we can unwind past this frame. ModuleSP pc_module_sp(m_current_pc.GetModule()); - if ((!m_current_pc.IsValid() || !pc_module_sp) && - above_trap_handler == false) { + if (!m_current_pc.IsValid() || !pc_module_sp) { UnwindLogMsg("using architectural default unwind method"); // Test the pc value to see if we know it's in an unmapped/non-executable @@ -1207,13 +1203,9 @@ RegisterContextLLDB::SavedLocationForRegister( // If we're fetching the saved pc and this UnwindPlan defines a // ReturnAddress register (e.g. lr on arm), look for the return address // register number in the UnwindPlan's row. - // If this is a trap handler frame, we have access to the complete - // register context when the interrupt/async signal was received, so - // we need to fetch the actual saved $pc value. if (pc_regnum.IsValid() && pc_regnum == regnum && m_full_unwind_plan_sp->GetReturnAddressRegister() != - LLDB_INVALID_REGNUM && - m_frame_type != eTrapHandlerFrame) { + LLDB_INVALID_REGNUM) { return_address_reg.init( m_thread, m_full_unwind_plan_sp->GetRegisterKind(), _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits