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.
This commit is contained in:
parent
d5a4fa0514
commit
4fdd2edbdb
@ -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(),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user