diff options
author | Jim Ingham <jingham@apple.com> | 2012-10-27 02:52:04 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2012-10-27 02:52:04 +0000 |
commit | 4dc613b364296d57d8d12cb2f1285d54b21064f1 (patch) | |
tree | 78c282ea86a50e087f0b8cb68ba549a8ceac55ac /lldb/source/Plugins/Process | |
parent | 668bf82658f44105d96ea8f780ec967e86c50fc7 (diff) | |
download | bcm5719-llvm-4dc613b364296d57d8d12cb2f1285d54b21064f1.tar.gz bcm5719-llvm-4dc613b364296d57d8d12cb2f1285d54b21064f1.zip |
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
Diffstat (limited to 'lldb/source/Plugins/Process')
-rw-r--r-- | lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp | 6 | ||||
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 10 |
2 files changed, 11 insertions, 5 deletions
diff --git a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp index 87c9962ac0a..a15b8a90034 100644 --- a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp +++ b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp @@ -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); } diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index 1b3ebc7bcce..7f38cb6b040 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -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) |