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, eStopReasonSignal,
eStopReasonException, eStopReasonException,
eStopReasonExec, // Program was re-exec'ed eStopReasonExec, // Program was re-exec'ed
eStopReasonPlanComplete eStopReasonPlanComplete,
eStopReasonThreadExiting
} StopReason; } StopReason;
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

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

View File

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

View File

@@ -1582,15 +1582,16 @@ Thread::StopReasonAsCString (lldb::StopReason reason)
{ {
switch (reason) switch (reason)
{ {
case eStopReasonInvalid: return "invalid"; case eStopReasonInvalid: return "invalid";
case eStopReasonNone: return "none"; case eStopReasonNone: return "none";
case eStopReasonTrace: return "trace"; case eStopReasonTrace: return "trace";
case eStopReasonBreakpoint: return "breakpoint"; case eStopReasonBreakpoint: return "breakpoint";
case eStopReasonWatchpoint: return "watchpoint"; case eStopReasonWatchpoint: return "watchpoint";
case eStopReasonSignal: return "signal"; case eStopReasonSignal: return "signal";
case eStopReasonException: return "exception"; case eStopReasonException: return "exception";
case eStopReasonExec: return "exec"; case eStopReasonExec: return "exec";
case eStopReasonPlanComplete: return "plan complete"; 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()); log->Printf("Base plan discarding thread plans for thread tid = 0x%4.4" PRIx64 " (exec.)", m_thread.GetID());
m_thread.DiscardThreadPlans(false); m_thread.DiscardThreadPlans(false);
return true; return true;
case eStopReasonThreadExiting:
case eStopReasonSignal: case eStopReasonSignal:
if (stop_info_sp->ShouldStop(event_ptr)) if (stop_info_sp->ShouldStop(event_ptr))
{ {

View File

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

View File

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

View File

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

View File

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