brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 7e8a336 Raw
66 lines · python
1import lldb2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5 6 7class TestCase(TestBase):8    NO_DEBUG_INFO_TESTCASE = True9 10    @skipIfRemote11    def test_load_after_attach(self):12        self.build()13 14        sync_file_path = lldbutil.append_to_process_working_directory(15            self, "process_ready"16        )17 18        ctx = self.platformContext19        lib_name = ctx.shlib_prefix + "lib_b." + ctx.shlib_extension20 21        exe = self.getBuildArtifact("a.out")22        lib = self.getBuildArtifact(lib_name)23 24        target = self.dbg.CreateTarget(exe)25        environment = self.registerSharedLibrariesWithTarget(target, ["lib_b"])26 27        # Spawn a new process.28        # use realpath to workaround llvm.org/pr4837629        # Pass path to solib for dlopen to properly locate the library.30        popen = self.spawnSubprocess(31            os.path.realpath(exe), [sync_file_path], extra_env=environment32        )33        lldbutil.wait_for_file_on_target(self, sync_file_path)34 35        # Attach to the spawned process.36        error = lldb.SBError()37        process = target.AttachToProcessWithID(self.dbg.GetListener(), popen.pid, error)38        self.assertSuccess(error)39 40        # Continue until first breakpoint.41        breakpoint1 = self.target().BreakpointCreateBySourceRegex(42            "// break here", lldb.SBFileSpec("main.cpp")43        )44        self.assertEqual(breakpoint1.GetNumResolvedLocations(), 1)45        stopped_threads = lldbutil.continue_to_breakpoint(self.process(), breakpoint1)46        self.assertEqual(len(stopped_threads), 1)47 48        # Change a variable to escape the loop49        self.runCmd("expression main_thread_continue = 1")50 51        # Continue so that dlopen is called.52        breakpoint2 = self.target().BreakpointCreateBySourceRegex(53            "// break after dlopen", lldb.SBFileSpec("main.cpp")54        )55        self.assertEqual(breakpoint2.GetNumResolvedLocations(), 1)56        stopped_threads = lldbutil.continue_to_breakpoint(self.process(), breakpoint2)57        self.assertEqual(len(stopped_threads), 1)58 59        # Check that image list contains liblib_b after dlopen.60        self.match(61            "image list",62            patterns=[lib_name],63            matching=True,64            msg=lib_name + " missing in image list",65        )66