diff options
| author | Jason Molenda <jmolenda@apple.com> | 2014-10-07 22:55:13 +0000 |
|---|---|---|
| committer | Jason Molenda <jmolenda@apple.com> | 2014-10-07 22:55:13 +0000 |
| commit | a410679ed63ee68ed8fc9f33f4f0adcc72f0afd5 (patch) | |
| tree | 2b3cedc32a113ff60b056ae9550fc7133db6a54c /lldb/source/Plugins/Process/Utility | |
| parent | 8951520c23bad817730f7ed8cc290bcd308b81a4 (diff) | |
| download | bcm5719-llvm-a410679ed63ee68ed8fc9f33f4f0adcc72f0afd5.tar.gz bcm5719-llvm-a410679ed63ee68ed8fc9f33f4f0adcc72f0afd5.zip | |
When we detect a stack unwind loop, before we abort
the backtrace, try falling back to the architecture default
unwind plan and see if we can backtrace a little further.
<rdar://problem/18556719>
llvm-svn: 219247
Diffstat (limited to 'lldb/source/Plugins/Process/Utility')
| -rw-r--r-- | lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp index 3e9a7a2cc9d..c920ea38e2b 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp @@ -408,9 +408,13 @@ RegisterContextLLDB::InitializeNonZerothFrame() if (CheckIfLoopingStack ()) { - UnwindLogMsg ("same CFA address as next frame, assuming the unwind is looping - stopping"); - m_frame_type = eNotAValidFrame; - return; + TryFallbackUnwindPlan(); + if (CheckIfLoopingStack ()) + { + UnwindLogMsg ("same CFA address as next frame, assuming the unwind is looping - stopping"); + m_frame_type = eNotAValidFrame; + return; + } } UnwindLogMsg ("initialized frame cfa is 0x%" PRIx64, (uint64_t) m_cfa); @@ -583,9 +587,13 @@ RegisterContextLLDB::InitializeNonZerothFrame() if (CheckIfLoopingStack ()) { - UnwindLogMsg ("same CFA address as next frame, assuming the unwind is looping - stopping"); - m_frame_type = eNotAValidFrame; - return; + TryFallbackUnwindPlan(); + if (CheckIfLoopingStack ()) + { + UnwindLogMsg ("same CFA address as next frame, assuming the unwind is looping - stopping"); + m_frame_type = eNotAValidFrame; + return; + } } UnwindLogMsg ("initialized frame current pc is 0x%" PRIx64 " cfa is 0x%" PRIx64, |

