Adding eStopReasonThreadExiting and fixing the handling of this state on Linux.

llvm-svn: 170800
This commit is contained in:
Andrew Kaylor 2012-12-20 23:08:03 +00:00
parent 287e7d275c
commit f85defaea5
10 changed files with 31 additions and 14 deletions

View File

@ -177,7 +177,8 @@ namespace lldb {
eStopReasonSignal,
eStopReasonException,
eStopReasonExec, // Program was re-exec'ed
eStopReasonPlanComplete
eStopReasonPlanComplete,
eStopReasonThreadExiting
} StopReason;
//----------------------------------------------------------------------

View File

@ -151,6 +151,7 @@ SBThread::GetStopReasonDataCount ()
case eStopReasonTrace:
case eStopReasonExec:
case eStopReasonPlanComplete:
case eStopReasonThreadExiting:
// There is no data for these stop reasons.
return 0;
@ -209,6 +210,7 @@ SBThread::GetStopReasonDataAtIndex (uint32_t idx)
case eStopReasonTrace:
case eStopReasonExec:
case eStopReasonPlanComplete:
case eStopReasonThreadExiting:
// There is no data for these stop reasons.
return 0;
@ -348,6 +350,13 @@ SBThread::GetStopDescription (char *dst, size_t dst_len)
}
break;
case eStopReasonThreadExiting:
{
char limbo_desc[] = "thread exiting";
stop_desc = limbo_desc;
stop_desc_len = sizeof(limbo_desc);
}
break;
default:
break;
}

View File

@ -21,7 +21,7 @@ POSIXLimboStopInfo::~POSIXLimboStopInfo() { }
lldb::StopReason
POSIXLimboStopInfo::GetStopReason() const
{
return lldb::eStopReasonTrace;
return lldb::eStopReasonThreadExiting;
}
const char *
@ -33,13 +33,13 @@ POSIXLimboStopInfo::GetDescription()
bool
POSIXLimboStopInfo::ShouldStop(Event *event_ptr)
{
return true;
return false;
}
bool
POSIXLimboStopInfo::ShouldNotify(Event *event_ptr)
{
return true;
return false;
}
//===----------------------------------------------------------------------===//

View File

@ -1582,15 +1582,16 @@ Thread::StopReasonAsCString (lldb::StopReason reason)
{
switch (reason)
{
case eStopReasonInvalid: return "invalid";
case eStopReasonNone: return "none";
case eStopReasonTrace: return "trace";
case eStopReasonBreakpoint: return "breakpoint";
case eStopReasonWatchpoint: return "watchpoint";
case eStopReasonSignal: return "signal";
case eStopReasonException: return "exception";
case eStopReasonExec: return "exec";
case eStopReasonPlanComplete: return "plan complete";
case eStopReasonInvalid: return "invalid";
case eStopReasonNone: return "none";
case eStopReasonTrace: return "trace";
case eStopReasonBreakpoint: return "breakpoint";
case eStopReasonWatchpoint: return "watchpoint";
case eStopReasonSignal: return "signal";
case eStopReasonException: return "exception";
case eStopReasonExec: return "exec";
case eStopReasonPlanComplete: return "plan complete";
case eStopReasonThreadExiting: return "thread exiting";
}

View File

@ -146,7 +146,8 @@ ThreadPlanBase::ShouldStop (Event *event_ptr)
log->Printf("Base plan discarding thread plans for thread tid = 0x%4.4" PRIx64 " (exec.)", m_thread.GetID());
m_thread.DiscardThreadPlans(false);
return true;
case eStopReasonThreadExiting:
case eStopReasonSignal:
if (stop_info_sp->ShouldStop(event_ptr))
{

View File

@ -384,6 +384,7 @@ ThreadPlanStepInRange::PlanExplainsStop ()
case eStopReasonSignal:
case eStopReasonException:
case eStopReasonExec:
case eStopReasonThreadExiting:
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP));
if (log)

View File

@ -252,6 +252,7 @@ ThreadPlanStepOut::PlanExplainsStop ()
case eStopReasonSignal:
case eStopReasonException:
case eStopReasonExec:
case eStopReasonThreadExiting:
return false;
default:

View File

@ -320,6 +320,7 @@ ThreadPlanStepOverRange::PlanExplainsStop ()
case eStopReasonSignal:
case eStopReasonException:
case eStopReasonExec:
case eStopReasonThreadExiting:
default:
if (log)
log->PutCString ("ThreadPlanStepInRange got asked if it explains the stop for some reason other than step.");

View File

@ -292,6 +292,7 @@ ThreadPlanStepUntil::AnalyzeStop()
case eStopReasonSignal:
case eStopReasonException:
case eStopReasonExec:
case eStopReasonThreadExiting:
m_explains_stop = false;
break;
default:

View File

@ -807,6 +807,7 @@ Driver::UpdateSelectedThread ()
case eStopReasonSignal:
case eStopReasonException:
case eStopReasonExec:
case eStopReasonThreadExiting:
if (!other_thread.IsValid())
other_thread = thread;
break;