diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:26:05 +0000 | 
| commit | 14f1b3e8826ce43b978db93a62d1166055db5394 (patch) | |
| tree | 0a00ad8d3498783fe0193f3b656bca17c4c8697d /packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py | |
| parent | 4ee8c119c71a06dcad1e0fecc8c675e480e59337 (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py')
| -rw-r--r-- | packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py | 97 | 
1 files changed, 97 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py new file mode 100644 index 000000000000..2e58cb893b73 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/multi_watchpoint_slots/TestWatchpointMultipleSlots.py @@ -0,0 +1,97 @@ +""" +Test watchpoint slots we should not be able to install multiple watchpoints +within same word boundary. We should be able to install individual watchpoints +on any of the bytes, half-word, or word. This is only for ARM/AArch64 targets. +""" + +from __future__ import print_function + +import os +import time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class WatchpointSlotsTestCase(TestBase): +    NO_DEBUG_INFO_TESTCASE = True + +    mydir = TestBase.compute_mydir(__file__) + +    def setUp(self): +        # Call super's setUp(). +        TestBase.setUp(self) + +        # Source filename. +        self.source = 'main.c' + +        # Output filename. +        self.exe_name = 'a.out' +        self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name} + +    # Watchpoints not supported +    @expectedFailureAndroid(archs=['arm', 'aarch64']) +    # This is a arm and aarch64 specific test case. No other architectures tested. +    @skipIf(archs=no_match(['arm', 'aarch64'])) +    def test_multiple_watchpoints_on_same_word(self): + +        self.build(dictionary=self.d) +        self.setTearDownCleanup(dictionary=self.d) + +        exe = os.path.join(os.getcwd(), self.exe_name) +        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + +        # Detect line number after which we are going to increment arrayName. +        loc_line = line_number('main.c', '// About to write byteArray') + +        # Set a breakpoint on the line detected above. +        lldbutil.run_break_set_by_file_and_line( +            self, "main.c", loc_line, num_expected_locations=1, loc_exact=True) + +        # Run the program. +        self.runCmd("run", RUN_SUCCEEDED) + +        # The stop reason of the thread should be breakpoint. +        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, +                     substrs=['stopped', 'stop reason = breakpoint']) + +        # Delete breakpoint we just hit. +        self.expect("breakpoint delete 1", substrs=['1 breakpoints deleted']) + +        # Set a watchpoint at byteArray[0] +        self.expect("watchpoint set variable byteArray[0]", WATCHPOINT_CREATED, +                    substrs=['Watchpoint created','size = 1']) + +        # Use the '-v' option to do verbose listing of the watchpoint. +        # The hit count should be 0 initially. +        self.expect("watchpoint list -v 1", substrs=['hit_count = 0']) + +        # Try setting a watchpoint at byteArray[1] +        self.expect("watchpoint set variable byteArray[1]", error=True, +                    substrs=['Watchpoint creation failed']) + +        self.runCmd("process continue") + +        # We should be stopped due to the watchpoint. +        # The stop reason of the thread should be watchpoint. +        self.expect("thread list", STOPPED_DUE_TO_WATCHPOINT, +                    substrs=['stopped', 'stop reason = watchpoint 1']) + +        # Delete the watchpoint we hit above successfully. +        self.expect("watchpoint delete 1", substrs=['1 watchpoints deleted']) + +        # Set a watchpoint at byteArray[3] +        self.expect("watchpoint set variable byteArray[3]", WATCHPOINT_CREATED, +                    substrs=['Watchpoint created','size = 1']) +    +        # Resume inferior. +        self.runCmd("process continue") + +        # We should be stopped due to the watchpoint. +        # The stop reason of the thread should be watchpoint. +        self.expect("thread list -v", STOPPED_DUE_TO_WATCHPOINT, +                    substrs=['stopped', 'stop reason = watchpoint 3']) +    +        # Resume inferior. +        self.runCmd("process continue")  | 
