Author: Jim Ingham Date: 2023-03-20T16:11:00-07:00 New Revision: 2c7abc83f605b2d3b1062f28422eeff81278ecd5
URL: https://github.com/llvm/llvm-project/commit/2c7abc83f605b2d3b1062f28422eeff81278ecd5 DIFF: https://github.com/llvm/llvm-project/commit/2c7abc83f605b2d3b1062f28422eeff81278ecd5.diff LOG: Reapply 8d024a79ea783ed3fbb5691aeaf186ad3f0a4ae9 w/o the extra bits. Added: Modified: lldb/source/Target/StopInfo.cpp lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c Removed: ################################################################################ diff --git a/lldb/source/Target/StopInfo.cpp b/lldb/source/Target/StopInfo.cpp index 9fdb29f9e4273..ebc355c90d0ab 100644 --- a/lldb/source/Target/StopInfo.cpp +++ b/lldb/source/Target/StopInfo.cpp @@ -831,6 +831,11 @@ class StopInfoWatchpoint : public StopInfo { = std::static_pointer_cast<StopInfoWatchpoint>(shared_from_this()); ThreadPlanSP step_over_wp_sp(new ThreadPlanStepOverWatchpoint( *(thread_sp.get()), me_as_siwp_sp, wp_sp)); + // When this plan is done we want to stop, so set this as a Controlling + // plan. + step_over_wp_sp->SetIsControllingPlan(true); + step_over_wp_sp->SetOkayToDiscard(false); + Status error; error = thread_sp->QueueThreadPlan(step_over_wp_sp, false); // If we couldn't push the thread plan, just stop here: diff --git a/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py b/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py index 7d54156aebb5b..52fc899b13e61 100644 --- a/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py +++ b/lldb/test/API/commands/watchpoints/step_over_watchpoint/TestStepOverWatchpoint.py @@ -11,36 +11,11 @@ class TestStepOverWatchpoint(TestBase): NO_DEBUG_INFO_TESTCASE = True - @expectedFailureAll( - oslist=["freebsd", "linux"], - archs=[ - 'aarch64', - 'arm'], - bugnumber="llvm.org/pr26031") - # Read-write watchpoints not supported on SystemZ - @expectedFailureAll(archs=['s390x']) - @expectedFailureAll( - oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"], - archs=['aarch64', 'arm'], - bugnumber="<rdar://problem/34027183>") - @add_test_categories(["basic_process"]) - def test(self): + def get_to_start(self, bkpt_text): """Test stepping over watchpoints.""" self.build() - target = self.createTestTarget() - - lldbutil.run_break_set_by_symbol(self, 'main') - - process = target.LaunchSimple(None, None, - self.get_process_working_directory()) - self.assertTrue(process.IsValid(), PROCESS_IS_VALID) - self.assertState(process.GetState(), lldb.eStateStopped, - PROCESS_STOPPED) - - thread = lldbutil.get_stopped_thread(process, - lldb.eStopReasonBreakpoint) - self.assertTrue(thread.IsValid(), "Failed to get thread.") - + target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(self, bkpt_text, + lldb.SBFileSpec("main.c")) frame = thread.GetFrameAtIndex(0) self.assertTrue(frame.IsValid(), "Failed to get frame.") @@ -55,14 +30,45 @@ def test(self): self.assertSuccess(error, "Error while setting watchpoint") self.assertTrue(read_watchpoint, "Failed to set read watchpoint.") + # Disable the breakpoint we hit so we don't muddy the waters with + # stepping off from the breakpoint: + bkpt.SetEnabled(False) + + return (target, process, thread, read_watchpoint) + + @expectedFailureAll( + oslist=["freebsd", "linux"], + archs=[ + 'aarch64', + 'arm'], + bugnumber="llvm.org/pr26031") + # Read-write watchpoints not supported on SystemZ + @expectedFailureAll(archs=['s390x']) + @add_test_categories(["basic_process"]) + def test_step_over(self): + target, process, thread, wp = self.get_to_start("Set a breakpoint here") + thread.StepOver() self.assertStopReason(thread.GetStopReason(), lldb.eStopReasonWatchpoint, STOPPED_DUE_TO_WATCHPOINT) self.assertEquals(thread.GetStopDescription(20), 'watchpoint 1') - process.Continue() - self.assertState(process.GetState(), lldb.eStateStopped, - PROCESS_STOPPED) + @expectedFailureAll( + oslist=["freebsd", "linux"], + archs=[ + 'aarch64', + 'arm'], + bugnumber="llvm.org/pr26031") + # Read-write watchpoints not supported on SystemZ + @expectedFailureAll(archs=['s390x']) + @expectedFailureAll( + oslist=["ios", "watchos", "tvos", "bridgeos", "macosx"], + archs=['aarch64', 'arm'], + bugnumber="<rdar://problem/34027183>") + @add_test_categories(["basic_process"]) + def test_step_instruction(self): + target, process, thread, wp = self.get_to_start("Set breakpoint after call") + self.assertEquals(thread.GetStopDescription(20), 'step over') self.step_inst_for_watchpoint(1) diff --git a/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c b/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c index 2d87d9a2f73fe..e48d43cb7a974 100644 --- a/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c +++ b/lldb/test/API/commands/watchpoints/step_over_watchpoint/main.c @@ -11,8 +11,8 @@ void watch_write() { } int main() { - watch_read(); - g_temp = g_watch_me_read; + watch_read(); // Set a breakpoint here + g_temp = g_watch_me_read; // Set breakpoint after call watch_write(); g_watch_me_write = g_temp; return 0; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits