aboutsummaryrefslogtreecommitdiff
path: root/packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-07-23 20:50:09 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-07-23 20:50:09 +0000
commitf3fbd1c0586ff6ec7895991e6c28f61a503c36a8 (patch)
tree48d008fd3df8c0e73271a4b18474e0aac6dbfe33 /packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size
parent2fc5d2d1dfaf623ce4e24cd8590565902f8c557c (diff)
downloadsrc-f3fbd1c0586ff6ec7895991e6c28f61a503c36a8.tar.gz
src-f3fbd1c0586ff6ec7895991e6c28f61a503c36a8.zip
Vendor import of lldb release_39 branch r276489:vendor/lldb/lldb-release_39-r276489
Notes
Notes: svn path=/vendor/lldb/dist/; revision=303241 svn path=/vendor/lldb/lldb-release_39-r276489/; revision=303242; tag=vendor/lldb/lldb-release_39-r276489
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size')
-rw-r--r--packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/TestWatchpointSizes.py117
-rw-r--r--packages/Python/lldbsuite/test/functionalities/watchpoint/watchpoint_size/main.c66
3 files changed, 188 insertions, 0 deletions
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;
+}