diff options
author | Jim Ingham <jingham@apple.com> | 2016-02-03 19:45:31 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2016-02-03 19:45:31 +0000 |
commit | 22eeb7227c9fcd4d6b5f6cddaacadece580002f4 (patch) | |
tree | b555b94e9f60909ea745d71b6993685c064aba62 | |
parent | 45b6159ed34dd4ce6e58ac67d66044b057d9001f (diff) | |
download | bcm5719-llvm-22eeb7227c9fcd4d6b5f6cddaacadece580002f4.tar.gz bcm5719-llvm-22eeb7227c9fcd4d6b5f6cddaacadece580002f4.zip |
The SetStopInfo from a Mach Exception was setting the stop
reason to None when we stop due to a trace, then noticed that
we were on a breakpoint that was not valid for the current thread.
That should actually have set it back to trace.
This was pr26441 (<rdar://problem/24470203>)
llvm-svn: 259684
3 files changed, 4 insertions, 2 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/consecutive_breakpoints/TestConsecutiveBreakpoints.py b/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/consecutive_breakpoints/TestConsecutiveBreakpoints.py index 8aa1ee75ef0..d2bd9f2812d 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/consecutive_breakpoints/TestConsecutiveBreakpoints.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/consecutive_breakpoints/TestConsecutiveBreakpoints.py @@ -79,7 +79,6 @@ class ConsecutiveBreakpointsTestCase(TestBase): self.finish_test() @no_debug_info_test - @expectedFailureDarwin(bugnumber="llvm.org/pr26441") def test_single_step_thread_specific(self): """Test that single step stops, even though the second breakpoint is not valid.""" self.prepare_test() diff --git a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp index 3bf766e875c..7c0487b1d43 100644 --- a/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp +++ b/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp @@ -507,6 +507,8 @@ StopInfoMachException::CreateStopReasonWithMachException // report the breakpoint regardless of the thread. if (bp_site_sp->ValidForThisThread (&thread) || thread.GetProcess()->GetOperatingSystem () != NULL) return StopInfo::CreateStopReasonWithBreakpointSiteID (thread, bp_site_sp->GetID()); + else if (is_trace_if_actual_breakpoint_missing) + return StopInfo::CreateStopReasonToTrace (thread); else return StopInfoSP(); } diff --git a/lldb/source/Target/ThreadPlanStepInstruction.cpp b/lldb/source/Target/ThreadPlanStepInstruction.cpp index 9d7d52167ff..ccfd52e00e1 100644 --- a/lldb/source/Target/ThreadPlanStepInstruction.cpp +++ b/lldb/source/Target/ThreadPlanStepInstruction.cpp @@ -239,7 +239,8 @@ ThreadPlanStepInstruction::ShouldStop (Event *event_ptr) } else { - if (m_thread.GetRegisterContext()->GetPC(0) != m_instruction_addr) + lldb::addr_t pc_addr = m_thread.GetRegisterContext()->GetPC(0); + if (pc_addr != m_instruction_addr) { if (--m_iteration_count <= 0) { |