diff options
author | Jim Ingham <jingham@apple.com> | 2019-08-15 21:37:52 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2019-08-15 21:37:52 +0000 |
commit | 7049b0ad4d610497939c9b2eaa72deb5f6dc989e (patch) | |
tree | 54c79e23887a0effb61178aeb82f64aa8508be3b /lldb/packages/Python/lldbsuite/test | |
parent | fdee340beabd13f9bb5a3203ab4cbeaec48d4d9b (diff) | |
download | bcm5719-llvm-7049b0ad4d610497939c9b2eaa72deb5f6dc989e.tar.gz bcm5719-llvm-7049b0ad4d610497939c9b2eaa72deb5f6dc989e.zip |
Stop-hooks weren't getting called on step-out. Fix that.
There was a little bit of logic in the StopInfoBreakpoint::PerformAction
that would null out the StopInfo once we had a completed plan so that the
next call to GetStopInfo would replace it with the StopInfoThreadPlan.
But the stop-hooks check for whether a thread stopped for a reason didn't
trigger this conversion. So I added an API to do that directly, and then
called it where before we just reset the StopInfo.
<rdar://problem/54270767>
Differential Revision: https://reviews.llvm.org/D66241
llvm-svn: 369052
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
3 files changed, 65 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/Makefile b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/Makefile new file mode 100644 index 00000000000..50d4ab65a6e --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/Makefile @@ -0,0 +1,6 @@ +LEVEL = ../../make + +C_SOURCES := main.c +CFLAGS_EXTRAS += -std=c99 + +include $(LEVEL)/Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/TestStopHooks.py b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/TestStopHooks.py new file mode 100644 index 00000000000..b8f04915563 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/TestStopHooks.py @@ -0,0 +1,45 @@ +""" +Test that stop hooks trigger on "step-out" +""" + +from __future__ import print_function + + +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + + +class TestStopHooks(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + # If your test case doesn't stress debug info, the + # set this to true. That way it won't be run once for + # each debug info format. + NO_DEBUG_INFO_TESTCASE = True + + def test_stop_hooks_step_out(self): + """Test that stop hooks fire on step-out.""" + self.build() + self.main_source_file = lldb.SBFileSpec("main.c") + self.step_out_test() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + + def step_out_test(self): + (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self, + "Set a breakpoint here", self.main_source_file) + + interp = self.dbg.GetCommandInterpreter() + result = lldb.SBCommandReturnObject() + interp.HandleCommand("target stop-hook add -o 'expr g_var++'", result) + self.assertTrue(result.Succeeded, "Set the target stop hook") + thread.StepOut() + var = target.FindFirstGlobalVariable("g_var") + self.assertTrue(var.IsValid()) + self.assertEqual(var.GetValueAsUnsigned(), 1, "Updated g_var") + + diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/main.c b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/main.c new file mode 100644 index 00000000000..d08ad14776b --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/functionalities/stop-hooks/main.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +static int g_var = 0; + +int step_out_of_me() +{ + return g_var; // Set a breakpoint here and step out. +} + +int +main() +{ + return step_out_of_me(); +} |