If we got what looks like a single step exception but we weren't single stepping then just report

the raw exception.

llvm-svn: 166859
This commit is contained in:
Jim Ingham 2012-10-27 02:52:04 +00:00
parent 668bf82658
commit 4dc613b364
2 changed files with 11 additions and 5 deletions

View File

@ -365,7 +365,8 @@ StopInfoMachException::CreateStopReasonWithMachException
return StopInfo::CreateStopReasonWithWatchpointID(thread, wp_sp->GetID());
}
// EXC_ARM_DA_DEBUG seems to be reused for EXC_BREAKPOINT as well as EXC_BAD_ACCESS
return StopInfo::CreateStopReasonToTrace(thread);
if (thread.GetTemporaryResumeState() == eStateStepping)
return StopInfo::CreateStopReasonToTrace(thread);
}
else if (exc_code == 1)
{
@ -405,7 +406,8 @@ StopInfoMachException::CreateStopReasonWithMachException
return StopInfoSP();
}
if (is_trace_if_software_breakpoint_missing)
// Don't call this a trace if we weren't single stepping this thread.
if (is_trace_if_software_breakpoint_missing && thread.GetTemporaryResumeState() == eStateStepping)
{
return StopInfo::CreateStopReasonToTrace (thread);
}

View File

@ -1588,9 +1588,13 @@ ProcessGDBRemote::SetThreadStopInfo (StringExtractor& stop_packet)
}
else
{
// TODO: check for breakpoint or trap opcode in case there is a hard
// coded software trap
gdb_thread->SetStopInfo (StopInfo::CreateStopReasonToTrace (*thread_sp));
// If we were stepping then assume the stop was the result of the trace. If we were
// not stepping then report the SIGTRAP.
// FIXME: We are still missing the case where we single step over a trap instruction.
if (gdb_thread->GetTemporaryResumeState() == eStateStepping)
gdb_thread->SetStopInfo (StopInfo::CreateStopReasonToTrace (*thread_sp));
else
gdb_thread->SetStopInfo (StopInfo::CreateStopReasonWithSignal(*thread_sp, signo));
}
}
if (!handled)