diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp b/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp index 6d4c345e28e..e2d2f9c8f67 100644 --- a/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/UnwindLLDB.cpp @@ -71,8 +71,8 @@ UnwindLLDB::GetFrameCount() delete register_ctx; if (log) { - log->Printf("%*sThread %u Frame %d invalid RegisterContext for this frame, stopping stack walk", - cur_idx, "", m_thread.GetIndexID(), cur_idx); + log->Printf("%*sFrame %d invalid RegisterContext for this frame, stopping stack walk", + cur_idx, "", cur_idx); } break; } @@ -81,8 +81,18 @@ UnwindLLDB::GetFrameCount() delete register_ctx; if (log) { - log->Printf("%*sThread %u Frame %d did not get CFA for this frame, stopping stack walk", - cur_idx, "", m_thread.GetIndexID(), cur_idx); + log->Printf("%*sFrame %d did not get CFA for this frame, stopping stack walk", + cur_idx, "", cur_idx); + } + break; + } + if (cursor.cfa == (addr_t) -1 || cursor.cfa == 1 || cursor.cfa == 0) + { + delete register_ctx; + if (log) + { + log->Printf("%*sFrame %d did not get a valid CFA for this frame, stopping stack walk", + cur_idx, "", cur_idx); } break; } @@ -91,8 +101,8 @@ UnwindLLDB::GetFrameCount() delete register_ctx; if (log) { - log->Printf("%*sThread %u Frame %d did not get PC for this frame, stopping stack walk", - cur_idx, "", m_thread.GetIndexID(), cur_idx); + log->Printf("%*sFrame %d did not get PC for this frame, stopping stack walk", + cur_idx, "", cur_idx); } break; } |