summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py
new file mode 100644
index 00000000000..7d8e28c745c
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/TestGdbRemoteExpeditedRegisters.py
@@ -0,0 +1,162 @@
+from __future__ import print_function
+
+
+import gdbremote_testcase
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestGdbRemoteExpeditedRegisters(
+ gdbremote_testcase.GdbRemoteTestCaseBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+ @skipIfDarwinEmbedded # <rdar://problem/34539270> lldb-server tests not updated to work on ios etc yet
+
+ def gather_expedited_registers(self):
+ # Setup the stub and set the gdb remote command stream.
+ procs = self.prep_debug_monitor_and_inferior(inferior_args=["sleep:2"])
+ self.test_sequence.add_log_lines([
+ # Start up the inferior.
+ "read packet: $c#63",
+ # Immediately tell it to stop. We want to see what it reports.
+ "read packet: {}".format(chr(3)),
+ {"direction": "send",
+ "regex": r"^\$T([0-9a-fA-F]+)([^#]+)#[0-9a-fA-F]{2}$",
+ "capture": {1: "stop_result",
+ 2: "key_vals_text"}},
+ ], True)
+
+ # Run the gdb remote command stream.
+ context = self.expect_gdbremote_sequence()
+ self.assertIsNotNone(context)
+
+ # Pull out expedited registers.
+ key_vals_text = context.get("key_vals_text")
+ self.assertIsNotNone(key_vals_text)
+
+ expedited_registers = self.extract_registers_from_stop_notification(
+ key_vals_text)
+ self.assertIsNotNone(expedited_registers)
+
+ return expedited_registers
+
+ def stop_notification_contains_generic_register(
+ self, generic_register_name):
+ # Generate a stop reply, parse out expedited registers from stop
+ # notification.
+ expedited_registers = self.gather_expedited_registers()
+ self.assertIsNotNone(expedited_registers)
+ self.assertTrue(len(expedited_registers) > 0)
+
+ # Gather target register infos.
+ reg_infos = self.gather_register_infos()
+
+ # Find the generic register.
+ reg_info = self.find_generic_register_with_name(
+ reg_infos, generic_register_name)
+ self.assertIsNotNone(reg_info)
+
+ # Ensure the expedited registers contained it.
+ self.assertTrue(reg_info["lldb_register_index"] in expedited_registers)
+ # print("{} reg_info:{}".format(generic_register_name, reg_info))
+
+ def stop_notification_contains_any_registers(self):
+ # Generate a stop reply, parse out expedited registers from stop
+ # notification.
+ expedited_registers = self.gather_expedited_registers()
+ # Verify we have at least one expedited register.
+ self.assertTrue(len(expedited_registers) > 0)
+
+ @debugserver_test
+ def test_stop_notification_contains_any_registers_debugserver(self):
+ self.init_debugserver_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_any_registers()
+
+ @llgs_test
+ def test_stop_notification_contains_any_registers_llgs(self):
+ self.init_llgs_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_any_registers()
+
+ def stop_notification_contains_no_duplicate_registers(self):
+ # Generate a stop reply, parse out expedited registers from stop
+ # notification.
+ expedited_registers = self.gather_expedited_registers()
+ # Verify no expedited register was specified multiple times.
+ for (reg_num, value) in list(expedited_registers.items()):
+ if (isinstance(value, list)) and (len(value) > 0):
+ self.fail(
+ "expedited register number {} specified more than once ({} times)".format(
+ reg_num, len(value)))
+
+ @debugserver_test
+ def test_stop_notification_contains_no_duplicate_registers_debugserver(
+ self):
+ self.init_debugserver_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_no_duplicate_registers()
+
+ @llgs_test
+ def test_stop_notification_contains_no_duplicate_registers_llgs(self):
+ self.init_llgs_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_no_duplicate_registers()
+
+ def stop_notification_contains_pc_register(self):
+ self.stop_notification_contains_generic_register("pc")
+
+ @debugserver_test
+ def test_stop_notification_contains_pc_register_debugserver(self):
+ self.init_debugserver_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_pc_register()
+
+ @llgs_test
+ def test_stop_notification_contains_pc_register_llgs(self):
+ self.init_llgs_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_pc_register()
+
+ # powerpc64 has no FP register
+ @skipIf(triple='^powerpc64')
+ def stop_notification_contains_fp_register(self):
+ self.stop_notification_contains_generic_register("fp")
+
+ @debugserver_test
+ def test_stop_notification_contains_fp_register_debugserver(self):
+ self.init_debugserver_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_fp_register()
+
+ @llgs_test
+ def test_stop_notification_contains_fp_register_llgs(self):
+ self.init_llgs_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_fp_register()
+
+ def stop_notification_contains_sp_register(self):
+ self.stop_notification_contains_generic_register("sp")
+
+ @debugserver_test
+ def test_stop_notification_contains_sp_register_debugserver(self):
+ self.init_debugserver_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_sp_register()
+
+ @llgs_test
+ def test_stop_notification_contains_sp_register_llgs(self):
+ self.init_llgs_test()
+ self.build()
+ self.set_inferior_startup_launch()
+ self.stop_notification_contains_sp_register()