diff options
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/watchpoint')
19 files changed, 322 insertions, 54 deletions
diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py index f0a0b5ab99d0..933f21a90bbf 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/TestWatchLocation.py @@ -9,8 +9,9 @@ from __future__ import print_function  import os, time  import re  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class HelloWatchLocationTestCase(TestBase): @@ -30,8 +31,11 @@ class HelloWatchLocationTestCase(TestBase):          self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows -    @expectedFailureAll(archs=['mips', 'mipsel', 'mips64', 'mips64el']) # Most of the MIPS boards provide only one H/W watchpoints, and S/W watchpoints are not supported yet +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(triple = re.compile('^mips')) # Most of the MIPS boards provide only one H/W watchpoints, and S/W watchpoints are not supported yet +    @expectedFailureAll(archs=['s390x']) # SystemZ also currently supports only one H/W watchpoint +    @expectedFailureAll(oslist=["linux"], archs=["arm", "aarch64"], bugnumber="llvm.org/pr27795") +    @skipIfDarwin      def test_hello_watchlocation(self):          """Test watching a location with '-s size' option."""          self.build(dictionary=self.d) @@ -52,9 +56,6 @@ class HelloWatchLocationTestCase(TestBase):                         'stop reason = breakpoint'])          # Now let's set a write-type watchpoint pointed to by 'g_char_ptr'. -        # The main.cpp, by design, misbehaves by not following the agreed upon -        # protocol of using a mutex while accessing the global pool and by not -        # incrmenting the global pool by 2.          self.expect("watchpoint set expression -w write -s 1 -- g_char_ptr", WATCHPOINT_CREATED,              substrs = ['Watchpoint created', 'size = 1', 'type = w'])          # Get a hold of the watchpoint id just created, it is used later on to diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/main.cpp b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/main.cpp index 59b0afc6d5f7..e20a6d988c84 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/main.cpp +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchlocation/main.cpp @@ -43,15 +43,13 @@ uint32_t  access_pool (bool flag = false)  {      static std::mutex g_access_mutex; -    if (!flag) -        g_access_mutex.lock(); +    g_access_mutex.lock();      char old_val = *g_char_ptr;      if (flag)          do_bad_thing_with_location(g_char_ptr, old_val + 1); -    if (!flag) -        g_access_mutex.unlock(); +    g_access_mutex.unlock();      return *g_char_ptr;  } diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py index 57467c38d5f8..5214c7f5e089 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/hello_watchpoint/TestMyFirstWatchpoint.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class HelloWatchpointTestCase(TestBase): @@ -31,7 +32,7 @@ class HelloWatchpointTestCase(TestBase):          self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name}      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_hello_watchpoint_using_watchpoint_set(self):          """Test a simple sequence of watchpoint creation and watchpoint hit."""          self.build(dictionary=self.d) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py index 2318214a0d5c..af8306c9a20e 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py @@ -9,15 +9,16 @@ from __future__ import print_function  import os, time  import re  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchpointForMultipleThreadsTestCase(TestBase):      mydir = TestBase.compute_mydir(__file__)      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchpoint_multiple_threads(self):          """Test that lldb watchpoint works for multiple threads."""          self.build() @@ -25,7 +26,7 @@ class WatchpointForMultipleThreadsTestCase(TestBase):          self.hello_multiple_threads()      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchpoint_multiple_threads_wp_set_and_then_delete(self):          """Test that lldb watchpoint works for multiple threads, and after the watchpoint is deleted, the watchpoint event should no longer fires."""          self.build() @@ -57,9 +58,6 @@ class WatchpointForMultipleThreadsTestCase(TestBase):                         'stop reason = breakpoint'])          # Now let's set a write-type watchpoint for variable 'g_val'. -        # The main.cpp, by design, misbehaves by not following the agreed upon -        # protocol of using a mutex while accessing the global pool and by not -        # writing to the variable.          self.expect("watchpoint set variable -w write g_val", WATCHPOINT_CREATED,              substrs = ['Watchpoint created', 'size = 4', 'type = w']) @@ -101,9 +99,6 @@ class WatchpointForMultipleThreadsTestCase(TestBase):                         'stop reason = breakpoint'])          # Now let's set a write-type watchpoint for variable 'g_val'. -        # The main.cpp, by design, misbehaves by not following the agreed upon -        # protocol of using a mutex while accessing the global pool and by not -        # writing to the variable.          self.expect("watchpoint set variable -w write g_val", WATCHPOINT_CREATED,              substrs = ['Watchpoint created', 'size = 4', 'type = w']) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp b/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp index 8a31041f8fca..7f2e5e6e6cb5 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp @@ -23,8 +23,7 @@ uint32_t  access_pool (bool flag = false)  {      static std::mutex g_access_mutex; -    if (!flag) -        g_access_mutex.lock(); +    g_access_mutex.lock();      uint32_t old_val = g_val;      if (flag) @@ -33,17 +32,14 @@ access_pool (bool flag = false)          g_val = old_val + 1;      } -    if (!flag) -        g_access_mutex.unlock(); +    g_access_mutex.unlock();      return g_val;  }  void  thread_func (uint32_t thread_index)  { -    // Break here in order to allow the thread -    // to inherit the global watchpoint state. -    printf ("%s (thread index = %u) startng...\n", __FUNCTION__, thread_index); +    printf ("%s (thread index = %u) starting...\n", __FUNCTION__, thread_index);      uint32_t count = 0;      uint32_t val; diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py index f51da36b72d7..22011f11352c 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/step_over_watchpoint/TestStepOverWatchpoint.py @@ -5,8 +5,9 @@ from __future__ import print_function  import lldb -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil  class TestStepOverWatchpoint(TestBase): @@ -17,8 +18,9 @@ class TestStepOverWatchpoint(TestBase):          return ['basic_process']      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureLinux(bugnumber="llvm.org/pr26031", archs=['arm']) -    @expectedFailureWindows("llvm.org/pr24446") +    @expectedFailureAll(oslist=["linux"], archs=['aarch64', 'arm'], bugnumber="llvm.org/pr26031") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test(self):          """Test stepping over watchpoints."""          self.build() @@ -73,7 +75,7 @@ class TestStepOverWatchpoint(TestBase):          # Most of the MIPS boards provide only one H/W watchpoints, and S/W watchpoints are not supported yet          arch = self.getArchitecture() -        if arch in ['mips', 'mipsel', 'mips64', 'mips64el']: +        if re.match("^mips",arch):              self.runCmd("watchpoint delete 1")          # resolve_location=True, read=False, write=True diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py index 339de45a085a..4ce05af96e2e 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/TestWatchpointCommands.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchpointCommandsTestCase(TestBase): @@ -30,7 +31,8 @@ class WatchpointCommandsTestCase(TestBase):          self.d = {'C_SOURCES': self.source, 'EXE': self.exe_name}      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test_rw_watchpoint(self):          """Test read_write watchpoint and expect to stop two times."""          self.build(dictionary=self.d) @@ -90,7 +92,8 @@ class WatchpointCommandsTestCase(TestBase):              substrs = ['hit_count = 2'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test_rw_watchpoint_delete(self):          """Test delete watchpoint and expect not to stop for watchpoint."""          self.build(dictionary=self.d) @@ -135,7 +138,8 @@ class WatchpointCommandsTestCase(TestBase):              substrs = ['exited'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test_rw_watchpoint_set_ignore_count(self):          """Test watchpoint ignore count and expect to not to stop at all."""          self.build(dictionary=self.d) @@ -184,7 +188,8 @@ class WatchpointCommandsTestCase(TestBase):              substrs = ['hit_count = 2', 'ignore_count = 2'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test_rw_disable_after_first_stop(self):          """Test read_write watchpoint but disable it after the first stop."""          self.build(dictionary=self.d) @@ -243,7 +248,8 @@ class WatchpointCommandsTestCase(TestBase):              substrs = ['hit_count = 1'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ      def test_rw_disable_then_enable(self):          """Test read_write watchpoint, disable initially, then enable it."""          self.build(dictionary=self.d) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py index f2bf90866330..ee276dd5687f 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandLLDB.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchpointLLDBCommandTestCase(TestBase): @@ -29,7 +30,8 @@ class WatchpointLLDBCommandTestCase(TestBase):          self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchpoint_command(self):          """Test 'watchpoint command'."""          self.build(dictionary=self.d) @@ -83,7 +85,8 @@ class WatchpointLLDBCommandTestCase(TestBase):              substrs = ['(int32_t)', 'cookie = 777'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchpoint_command_can_disable_a_watchpoint(self):          """Test that 'watchpoint command' action can disable a watchpoint after it is triggered."""          self.build(dictionary=self.d) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py index a476aebb8db9..f6ea4fc16861 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/TestWatchpointCommandPython.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchpointPythonCommandTestCase(TestBase): @@ -29,8 +30,9 @@ class WatchpointPythonCommandTestCase(TestBase):          self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}      @skipIfFreeBSD # timing out on buildbot -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710")      def test_watchpoint_command(self):          """Test 'watchpoint command'."""          self.build(dictionary=self.d) @@ -85,3 +87,57 @@ class WatchpointPythonCommandTestCase(TestBase):          # The watchpoint command "forced" our global variable 'cookie' to become 777.          self.expect("frame variable --show-globals cookie",              substrs = ['(int32_t)', 'cookie = 777']) + +    @skipIfFreeBSD # timing out on buildbot +    @expectedFailureAll(bugnumber="llvm.org/pr28055: continue in watchpoint commands disables the watchpoint") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710") +    def test_continue_in_watchpoint_command(self): +        """Test continue in a watchpoint command.""" +        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) + +        # Add a breakpoint to set a watchpoint when stopped on the breakpoint. +        lldbutil.run_break_set_by_file_and_line (self, None, self.line, num_expected_locations=1) +#        self.expect("breakpoint set -l %d" % self.line, BREAKPOINT_CREATED, +#            startstr = "Breakpoint created: 1: file ='%s', line = %d, locations = 1" % +#                       (self.source, self.line))# + +        # Run the program. +        self.runCmd("run", RUN_SUCCEEDED) + +        # We should be stopped again due to the breakpoint. +        # The stop reason of the thread should be breakpoint. +        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, +            substrs = ['stopped', +                       'stop reason = breakpoint']) + +        # Now let's set a write-type watchpoint for 'global'. +        self.expect("watchpoint set variable -w write global", WATCHPOINT_CREATED, +            substrs = ['Watchpoint created', 'size = 4', 'type = w', +                       '%s:%d' % (self.source, self.decl)]) + +        cmd_script_file = os.path.join(os.getcwd(), "watchpoint_command.py") +        self.runCmd("command script import '%s'"%(cmd_script_file)) + +        self.runCmd('watchpoint command add -F watchpoint_command.watchpoint_command') + +        # List the watchpoint command we just added. +        self.expect("watchpoint command list 1", +            substrs = ['watchpoint_command.watchpoint_command']) + +        self.runCmd("process continue") + +        # We should be stopped again due to the watchpoint (write type). +        # The stop reason of the thread should be watchpoint. +        self.expect("thread backtrace", STOPPED_DUE_TO_WATCHPOINT, +            substrs = ['stop reason = watchpoint']) + +        # We should have hit the watchpoint once, set cookie to 888, then continued to the +        # second hit and set it to 999 +        self.expect("frame variable --show-globals cookie", +            substrs = ['(int32_t)', 'cookie = 999']) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/watchpoint_command.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/watchpoint_command.py new file mode 100644 index 000000000000..575a5160d219 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/command/watchpoint_command.py @@ -0,0 +1,14 @@ +import lldb + +num_hits = 0 +def watchpoint_command (frame, wp, dict): +    global num_hits +    if num_hits == 0: +        print ("I stopped the first time") +        frame.EvaluateExpression("cookie = 888") +        num_hits += 1 +        frame.thread.process.Continue() +    else: +        print ("I stopped the %d time"%(num_hits)) +        frame.EvaluateExpression("cookie = 999") + diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py index 355204a4ce1e..64e01e5cb937 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_commands/condition/TestWatchpointConditionCmd.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchpointConditionCmdTestCase(TestBase): @@ -29,7 +30,8 @@ class WatchpointConditionCmdTestCase(TestBase):          self.d = {'CXX_SOURCES': self.source, 'EXE': self.exe_name}      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchpoint_cond(self):          """Test watchpoint condition."""          self.build(dictionary=self.d) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py index e4d6e019c20e..fdeb4b8fa3b5 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_events/TestWatchpointEvents.py @@ -6,8 +6,9 @@ from __future__ import print_function  import os, time  import lldb -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil  class TestWatchpointEvents (TestBase): @@ -21,7 +22,8 @@ class TestWatchpointEvents (TestBase):      @add_test_categories(['pyapi'])      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["linux"], archs=["aarch64"], bugnumber="llvm.org/pr27710") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_with_python_api(self):          """Test that adding, deleting and modifying watchpoints sends the appropriate events."""          self.build() @@ -58,7 +60,7 @@ class TestWatchpointEvents (TestBase):          self.listener.StartListeningForEvents (self.target_bcast, lldb.SBTarget.eBroadcastBitWatchpointChanged)          error = lldb.SBError() -        local_watch = local_var.Watch(True, True, True, error) +        local_watch = local_var.Watch(True, False, True, error)          if not error.Success():              self.fail ("Failed to make watchpoint for local_var: %s"%(error.GetCString())) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py index 73752d2d18d5..c66ddb512884 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/TestValueOfVectorVariable.py @@ -8,15 +8,16 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class TestValueOfVectorVariableTestCase(TestBase):      mydir = TestBase.compute_mydir(__file__)      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_value_of_vector_variable_using_watchpoint_set(self):          """Test verify displayed value of vector variable."""          self.build(dictionary=self.d) diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/main.c b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/main.c index 98f8c477eb31..ac2370e32d2a 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/main.c +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_on_vectors/main.c @@ -6,7 +6,7 @@  // License. See LICENSE.TXT for details.  //  //===----------------------------------------------------------------------===// -typedef char v4i8 __attribute__ ((vector_size(4))); +typedef signed char v4i8 __attribute__ ((vector_size(4)));  v4i8 global_vector = {1, 2, 3, 4};  int diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchLocationWithWatchSet.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchLocationWithWatchSet.py index 9301a6f9fd00..735a5678c4f9 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchLocationWithWatchSet.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchLocationWithWatchSet.py @@ -8,8 +8,9 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil  class WatchLocationUsingWatchpointSetTestCase(TestBase): @@ -27,8 +28,8 @@ class WatchLocationUsingWatchpointSetTestCase(TestBase):          # Build dictionary to have unique executable names for each test method.      @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported -    @expectedFailureLinux(bugnumber="llvm.org/pr26031", archs=['arm']) -    @expectedFailureWindows("llvm.org/pr24446") # WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows +    @expectedFailureAll(oslist=["linux"], archs=['aarch64', 'arm'], bugnumber="llvm.org/pr26031") +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows")      def test_watchlocation_using_watchpoint_set(self):          """Test watching a location with 'watchpoint set expression -w write -s size' option."""          self.build() diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchpointSetErrorCases.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchpointSetErrorCases.py index 27c759e6fb64..43597ec28f59 100644 --- a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchpointSetErrorCases.py +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_set_command/TestWatchpointSetErrorCases.py @@ -8,6 +8,7 @@ from __future__ import print_function  import os, time  import lldb +from lldbsuite.test.decorators import *  from lldbsuite.test.lldbtest import *  import lldbsuite.test.lldbutil as lldbutil @@ -24,6 +25,7 @@ class WatchpointSetErrorTestCase(TestBase):          self.line = line_number(self.source, '// Set break point at this line.')          # Build dictionary to have unique executable names for each test method. +    @expectedFailureAll(oslist=["windows"])      def test_error_cases_with_watchpoint_set(self):          """Test error cases with the 'watchpoint set' command."""          self.build() diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/Makefile b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/Makefile new file mode 100644 index 000000000000..b09a579159d4 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/TestWatchpointSizes.py b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/TestWatchpointSizes.py new file mode 100644 index 000000000000..55e36649ce10 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/TestWatchpointSizes.py @@ -0,0 +1,117 @@ +""" +Test watchpoint size cases (1-byte, 2-byte, 4-byte). +Make sure we can watch all bytes, words or double words individually +when they are packed in a 8-byte region. + +""" + +from __future__ import print_function + +import os, time +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class WatchpointSizeTestCase(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} + +    @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ +    def test_byte_size_watchpoints_with_byte_selection(self): +        """Test to selectively watch different bytes in a 8-byte array.""" +        self.run_watchpoint_size_test('byteArray', 8, '1') + +    @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ +    def test_two_byte_watchpoints_with_word_selection(self): +        """Test to selectively watch different words in an 8-byte word array.""" +        self.run_watchpoint_size_test('wordArray', 4, '2') + +    @expectedFailureAndroid(archs=['arm', 'aarch64']) # Watchpoints not supported +    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24446: WINDOWS XFAIL TRIAGE - Watchpoints not supported on Windows") +    @expectedFailureAll(archs=['s390x']) # Read-write watchpoints not supported on SystemZ +    def test_four_byte_watchpoints_with_dword_selection(self): +        """Test to selectively watch two double words in an 8-byte dword array.""" +        self.run_watchpoint_size_test('dwordArray', 2, '4') + +    def run_watchpoint_size_test(self, arrayName, array_size, watchsize): +        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 ' + arrayName) + +        # 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) + +        for i in range(array_size): +            # We should be stopped again due to the breakpoint. +            # The stop reason of the thread should be breakpoint. +            self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, +                substrs = ['stopped', 'stop reason = breakpoint']) + +            # Set a read_write type watchpoint arrayName +            watch_loc=arrayName+"[" + str(i) + "]" +            self.expect("watchpoint set variable -w read_write " + watch_loc, +                WATCHPOINT_CREATED, +            substrs = ['Watchpoint created', 'size = ' + watchsize, 'type = rw']) + +            # Use the '-v' option to do verbose listing of the watchpoint. +            # The hit count should be 0 initially. +            self.expect("watchpoint list -v", substrs = ['hit_count = 0']) + +            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']) + +            # Use the '-v' option to do verbose listing of the watchpoint. +            # The hit count should now be 1. +            self.expect("watchpoint list -v", +                substrs = ['hit_count = 1']) + +            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']) + +            # Use the '-v' option to do verbose listing of the watchpoint. +            # The hit count should now be 1. +            # Verify hit_count has been updated after value has been read. +            self.expect("watchpoint list -v", +                substrs = ['hit_count = 2']) + +            # Delete the watchpoint immediately, but set auto-confirm to true first. +            self.runCmd("settings set auto-confirm true") +            self.expect("watchpoint delete", substrs = ['All watchpoints removed.']) +            # Restore the original setting of auto-confirm. +            self.runCmd("settings clear auto-confirm") + +            self.runCmd("process continue") diff --git a/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/main.c b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/main.c new file mode 100644 index 000000000000..ed9fed1e2113 --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/main.c @@ -0,0 +1,66 @@ +//===-- main.c --------------------------------------------------*- C++ -*-===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +#include <stdio.h> +#include <stdint.h> + +uint64_t pad0 = 0; +uint8_t byteArray[8] = {0}; +uint64_t pad1 = 0; +uint16_t wordArray[4] = {0}; +uint64_t pad2 = 0; +uint32_t dwordArray[2] = {0}; + +int main(int argc, char** argv) { + +    int i; +    uint8_t localByte; +    uint16_t localWord; +    uint32_t localDword; + +    for (i = 0; i < 8; i++) +    { +        printf("About to write byteArray[%d] ...\n", i); // About to write byteArray +        pad0++; +        byteArray[i] = 7; +        pad1++; +        localByte = byteArray[i]; // Here onwards we should'nt be stopped in loop +        byteArray[i]++; +        localByte = byteArray[i]; +    } + +    pad0 = 0; +    pad1 = 0; + +    for (i = 0; i < 4; i++) +    { +        printf("About to write wordArray[%d] ...\n", i); // About to write wordArray +        pad0++; +        wordArray[i] = 7; +        pad1++; +        localWord = wordArray[i]; // Here onwards we should'nt be stopped in loop +        wordArray[i]++; +        localWord = wordArray[i]; +    } + +    pad0 = 0; +    pad1 = 0; + +    for (i = 0; i < 2; i++) +    { +        printf("About to write dwordArray[%d] ...\n", i); // About to write dwordArray +        pad0++; +        dwordArray[i] = 7; +        pad1++; +        localDword = dwordArray[i]; // Here onwards we shouldn't be stopped in loop +        dwordArray[i]++; +        localDword = dwordArray[i]; +    } + +    return 0; +}  | 
