diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4 | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-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/libraries-svr4')
5 files changed, 185 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/Makefile new file mode 100644 index 00000000000..5b5c1dcef78 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/Makefile @@ -0,0 +1,19 @@ +LIB_PREFIX := svr4lib +LD_EXTRAS := -L. -lsvr4lib_a -lsvr4lib_b\" +CXX_SOURCES := main.cpp +USE_LIBDL := 1 +MAKE_DSYM := NO + +a.out: svr4lib_a svr4lib_b_quote + +include Makefile.rules + +svr4lib_a: + $(MAKE) -f $(MAKEFILE_RULES) \ + DYLIB_NAME=svr4lib_a DYLIB_CXX_SOURCES=svr4lib_a.cpp \ + DYLIB_ONLY=YES + +svr4lib_b_quote: + $(MAKE) -f $(MAKEFILE_RULES) \ + DYLIB_NAME=svr4lib_b\\\" DYLIB_CXX_SOURCES=svr4lib_b_quote.cpp \ + DYLIB_ONLY=YES diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/TestGdbRemoteLibrariesSvr4Support.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/TestGdbRemoteLibrariesSvr4Support.py new file mode 100644 index 00000000000..2081d9f34c5 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/TestGdbRemoteLibrariesSvr4Support.py @@ -0,0 +1,133 @@ +import xml.etree.ElementTree as ET + +import gdbremote_testcase +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * + + +class TestGdbRemoteLibrariesSvr4Support(gdbremote_testcase.GdbRemoteTestCaseBase): + + mydir = TestBase.compute_mydir(__file__) + + FEATURE_NAME = "qXfer:libraries-svr4:read" + + def setup_test(self): + self.init_llgs_test() + self.build() + self.set_inferior_startup_launch() + env = {} + env[self.dylibPath] = self.getBuildDir() + self.prep_debug_monitor_and_inferior(inferior_env=env) + self.continue_process_and_wait_for_stop() + + def get_expected_libs(self): + return ["libsvr4lib_a.so", 'libsvr4lib_b".so'] + + def has_libraries_svr4_support(self): + self.add_qSupported_packets() + context = self.expect_gdbremote_sequence() + self.assertIsNotNone(context) + features = self.parse_qSupported_response(context) + return self.FEATURE_NAME in features and features[self.FEATURE_NAME] == "+" + + def get_libraries_svr4_data(self): + # Start up llgs and inferior, and check for libraries-svr4 support. + if not self.has_libraries_svr4_support(): + self.skipTest("libraries-svr4 not supported") + + # Grab the libraries-svr4 data. + self.reset_test_sequence() + self.test_sequence.add_log_lines( + [ + "read packet: $qXfer:libraries-svr4:read::0,ffff:#00", + { + "direction": "send", + "regex": re.compile( + r"^\$([^E])(.*)#[0-9a-fA-F]{2}$", re.MULTILINE | re.DOTALL + ), + "capture": {1: "response_type", 2: "content_raw"}, + }, + ], + True, + ) + + context = self.expect_gdbremote_sequence() + self.assertIsNotNone(context) + + # Ensure we end up with all libraries-svr4 data in one packet. + self.assertEqual(context.get("response_type"), "l") + + # Decode binary data. + content_raw = context.get("content_raw") + self.assertIsNotNone(content_raw) + return content_raw + + def get_libraries_svr4_xml(self): + libraries_svr4 = self.get_libraries_svr4_data() + xml_root = None + try: + xml_root = ET.fromstring(libraries_svr4) + except xml.etree.ElementTree.ParseError: + pass + self.assertIsNotNone(xml_root, "Malformed libraries-svr4 XML") + return xml_root + + def libraries_svr4_well_formed(self): + xml_root = self.get_libraries_svr4_xml() + self.assertEqual(xml_root.tag, "library-list-svr4") + for child in xml_root: + self.assertEqual(child.tag, "library") + self.assertItemsEqual(child.attrib.keys(), ["name", "lm", "l_addr", "l_ld"]) + + def libraries_svr4_has_correct_load_addr(self): + xml_root = self.get_libraries_svr4_xml() + for child in xml_root: + name = child.attrib.get("name") + base_name = os.path.basename(name) + if os.path.basename(name) not in self.get_expected_libs(): + continue + load_addr = int(child.attrib.get("l_addr"), 16) + self.reset_test_sequence() + self.add_query_memory_region_packets(load_addr) + context = self.expect_gdbremote_sequence() + mem_region = self.parse_memory_region_packet(context) + self.assertEqual(load_addr, int(mem_region.get("start", 0), 16)) + self.assertEqual( + os.path.realpath(name), os.path.realpath(mem_region.get("name", "")) + ) + + def libraries_svr4_libs_present(self): + xml_root = self.get_libraries_svr4_xml() + libraries_svr4_names = [] + for child in xml_root: + name = child.attrib.get("name") + libraries_svr4_names.append(os.path.realpath(name)) + for lib in self.get_expected_libs(): + self.assertIn(self.getBuildDir() + "/" + lib, libraries_svr4_names) + + @llgs_test + @skipUnlessPlatform(["linux", "android", "netbsd"]) + def test_supports_libraries_svr4(self): + self.setup_test() + self.assertTrue(self.has_libraries_svr4_support()) + + @llgs_test + @skipUnlessPlatform(["linux", "android", "netbsd"]) + @expectedFailureNetBSD + def test_libraries_svr4_well_formed(self): + self.setup_test() + self.libraries_svr4_well_formed() + + @llgs_test + @skipUnlessPlatform(["linux", "android", "netbsd"]) + @expectedFailureNetBSD + def test_libraries_svr4_load_addr(self): + self.setup_test() + self.libraries_svr4_has_correct_load_addr() + + @llgs_test + @skipUnlessPlatform(["linux", "android", "netbsd"]) + @expectedFailureNetBSD + def test_libraries_svr4_libs_present(self): + self.setup_test() + self.libraries_svr4_libs_present() diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/main.cpp new file mode 100644 index 00000000000..b62ca71b561 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/main.cpp @@ -0,0 +1,15 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +int main(int argc, char **argv) { + // Perform a null pointer access. + int *const null_int_ptr = nullptr; + *null_int_ptr = 0xDEAD; + + return 0; +} diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_a.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_a.cpp new file mode 100644 index 00000000000..47d4b979d92 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_a.cpp @@ -0,0 +1,9 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +int svr4lib_a() { return 42; } diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_b_quote.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_b_quote.cpp new file mode 100644 index 00000000000..bd8eb0068e9 --- /dev/null +++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/tools/lldb-server/libraries-svr4/svr4lib_b_quote.cpp @@ -0,0 +1,9 @@ +//===-- main.cpp ------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +int svr4lib_b_quote() { return 42; } |