summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2014-10-07 22:55:13 +0000
committerJason Molenda <jmolenda@apple.com>2014-10-07 22:55:13 +0000
commita410679ed63ee68ed8fc9f33f4f0adcc72f0afd5 (patch)
tree2b3cedc32a113ff60b056ae9550fc7133db6a54c
parent8951520c23bad817730f7ed8cc290bcd308b81a4 (diff)
downloadbcm5719-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
-rw-r--r--lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp20
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,
OpenPOWER on IntegriCloud