Skip to content
Snippets Groups Projects
Commit 4ac8e93a authored by Jim Ingham's avatar Jim Ingham
Browse files

Add an API to unwind from a hand-called expression.

This is just an SB API way of doing "thread return -x".
<rdar://problem/27110360>

llvm-svn: 274822
parent 0160063a
No related branches found
No related tags found
No related merge requests found
......@@ -150,6 +150,9 @@ public:
SBError
ReturnFromFrame (SBFrame &frame, SBValue &return_value);
SBError
UnwindInnermostExpression();
//--------------------------------------------------------------------------
/// LLDB currently supports process centric debugging which means when any
/// thread in a process stops, all other threads are stopped. The Suspend()
......
......@@ -259,6 +259,14 @@ public:
SBError
ReturnFromFrame (SBFrame &frame, SBValue &return_value);
%feature("autodoc", "
Unwind the stack frames from the innermost expression evaluation.
This API is equivalent to 'thread return -x'.
") UnwindInnermostExpression;
SBError
UnwindInnermostExpression();
%feature("docstring", "
//--------------------------------------------------------------------------
/// LLDB currently supports process centric debugging which means when any
......
......@@ -1249,6 +1249,31 @@ SBThread::ReturnFromFrame (SBFrame &frame, SBValue &return_value)
return sb_error;
}
SBError
SBThread::UnwindInnermostExpression()
{
SBError sb_error;
Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
std::unique_lock<std::recursive_mutex> lock;
ExecutionContext exe_ctx(m_opaque_sp.get(), lock);
if (log)
log->Printf ("SBThread(%p)::UnwindExpressionEvaluation",
static_cast<void*>(exe_ctx.GetThreadPtr()));
if (exe_ctx.HasThreadScope())
{
Thread *thread = exe_ctx.GetThreadPtr();
sb_error.SetError (thread->UnwindInnermostExpression());
if (sb_error.Success())
thread->SetSelectedFrameByIndex(0, false);
}
return sb_error;
}
bool
SBThread::Suspend()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment