diff options
Diffstat (limited to 'tools/intel-mpx/test/TestMPXTable.py')
-rw-r--r-- | tools/intel-mpx/test/TestMPXTable.py | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/tools/intel-mpx/test/TestMPXTable.py b/tools/intel-mpx/test/TestMPXTable.py new file mode 100644 index 000000000000..f2468abd59a1 --- /dev/null +++ b/tools/intel-mpx/test/TestMPXTable.py @@ -0,0 +1,168 @@ +""" +Test mpx-table command. +""" + +from __future__ import print_function + + +import os +import time +import re +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestMPXTable(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + TestBase.setUp(self) + + @skipIf(compiler="clang") + @skipIf(oslist=no_match(['linux'])) + @skipIf(archs=no_match(['i386', 'x86_64'])) + @skipIf(compiler="gcc", compiler_version=["<", "5"]) #GCC version >= 5 supports Intel(R) MPX. + def test_show_command(self): + """Test 'mpx-table show' command""" + self.build() + + lldb_exec_dir = os.environ["LLDB_IMPLIB_DIR"] + lldb_lib_dir = os.path.join(lldb_exec_dir, os.pardir, "lib") + plugin_file = os.path.join(lldb_lib_dir, "liblldb-intel-mpxtable.so") + if not os.path.isfile(plugin_file): + self.skipTest("Intel(R) mpx-table plugin missing.") + plugin_command = " " + seq = ("plugin", "load", plugin_file) + plugin_command = plugin_command.join(seq) + self.runCmd(plugin_command) + + exe = os.path.join(os.getcwd(), "a.out") + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + + self.b1 = line_number('main.cpp', '// Break 1.') + self.b2 = line_number('main.cpp', '// Break 2.') + self.b3 = line_number('main.cpp', '// Break 3.') + self.b4 = line_number('main.cpp', '// Break 4.') + lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.b1, num_expected_locations=1) + lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.b2, num_expected_locations=1) + lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.b3, num_expected_locations=1) + lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.b4, num_expected_locations=1) + self.runCmd("run", RUN_SUCCEEDED) + + target = self.dbg.GetSelectedTarget() + process = target.GetProcess() + + if (process.GetState() == lldb.eStateExited): + self.skipTest("Intel(R) MPX is not supported.") + else: + self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 1."]) + + self.expect("mpx-table show a", + substrs = ['lbound = 0x', + ', ubound = 0x', + '(pointer value = 0x', + ', metadata = 0x', + ')'], + error = False) + + self.expect("continue", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 2."]) + + # Check that out of scope pointer cannot be reached. + # + self.expect("mpx-table show a", + substrs = ['Invalid pointer.'], + error = True) + + self.expect("mpx-table show tmp", + substrs = ['lbound = 0x', + ', ubound = 0x', + '(pointer value = 0x', + ', metadata = 0x', + ')'], + error = False) + + self.expect("continue", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 3."]) + + # Check that the pointer value is correctly updated. + # + self.expect("mpx-table show tmp", + substrs = ['lbound = 0x', + ', ubound = 0x', + '(pointer value = 0x2', + ', metadata = 0x', + ')'], + error = False) + + self.expect("continue", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 4."]) + + # After going back to main(), check that out of scope pointer cannot be + # reached. + # + self.expect("mpx-table show tmp", + substrs = ['Invalid pointer.'], + error = True) + + self.expect("mpx-table show a", + substrs = ['lbound = 0x', + ', ubound = 0x', + '(pointer value = 0x', + ', metadata = 0x', + ')'], + error = False) + + def test_set_command(self): + """Test 'mpx-table set' command""" + self.build() + + lldb_exec_dir = os.environ["LLDB_IMPLIB_DIR"] + lldb_lib_dir = os.path.join(lldb_exec_dir, os.pardir, "lib") + plugin_file = os.path.join(lldb_lib_dir, "liblldb-intel-mpxtable.so") + if not os.path.isfile(plugin_file): + self.skipTest("Intel(R) mpx-table plugin missing.") + plugin_command = " " + seq = ("plugin", "load", plugin_file) + plugin_command = plugin_command.join(seq) + self.runCmd(plugin_command) + + exe = os.path.join(os.getcwd(), "a.out") + self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET) + + self.b1 = line_number('main.cpp', '// Break 1.') + lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.b1, num_expected_locations=1) + self.runCmd("run", RUN_SUCCEEDED) + + target = self.dbg.GetSelectedTarget() + process = target.GetProcess() + + if (process.GetState() == lldb.eStateExited): + self.skipTest("Intel(R) MPX is not supported.") + else: + self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT, + substrs = ["stop reason = breakpoint 1."]) + + # Check that the BT Entry doesn't already contain the test values. + # + self.expect("mpx-table show a", matching=False, + substrs = ['lbound = 0xcafecafe', + ', ubound = 0xbeefbeef']) + + # Set the test values. + # + self.expect("mpx-table set a 0xcafecafe 0xbeefbeef", error = False) + + # Verify that the test values have been correctly written in the BT + # entry. + # + self.expect("mpx-table show a", + substrs = ['lbound = 0xcafecafe', + ', ubound = 0xbeefbeef'], + error = False) + + |