brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 096eadd Raw
103 lines · python
1"""Test the SBDModule APIs."""2 3import lldb4from lldbsuite.test.decorators import *5from lldbsuite.test.lldbtest import *6from lldbsuite.test import lldbutil7 8import os, signal, subprocess9 10 11class SBModuleAPICase(TestBase):12    def setUp(self):13        TestBase.setUp(self)14        self.background_pid = None15 16    def tearDown(self):17        TestBase.tearDown(self)18        if self.background_pid:19            os.kill(self.background_pid, signal.SIGKILL)20 21    @skipIfRemote22    def test_GetObjectName(self):23        """Test the SBModule::GetObjectName() method"""24        self.build()25        exe = self.getBuildArtifact("a.out")26        libfoo_path = self.getBuildArtifact("libfoo.a")27        target_exe = self.dbg.CreateTarget(exe)28        self.assertTrue(target_exe.IsValid(), "Target for a.out is valid")29 30        # Test that the executable module has no object name (usually the first module in the target)31        exe_module = target_exe.GetModuleAtIndex(0)32        self.assertTrue(exe_module.IsValid(), "Executable module is valid")33        self.assertIsNone(34            exe_module.GetObjectName(), "a.out should have no object name"35        )36 37        # check archive member names38        module_specs = lldb.SBModuleSpecList.GetModuleSpecifications(libfoo_path)39        self.assertGreater(40            module_specs.GetSize(), 0, "Archive should have at least one module spec"41        )42        found = set()43        expected = {"a.o", "b.o"}44        for i in range(module_specs.GetSize()):45            spec = module_specs.GetSpecAtIndex(i)46            obj_name = spec.GetObjectName()47            self.assertIsInstance(obj_name, str)48            self.assertIn(obj_name, expected, f"Unexpected object name: {obj_name}")49            # create a module from the arhive using the sepc50            module = lldb.SBModule(spec)51            self.assertTrue(module.IsValid(), "Module is valid")52            self.assertTrue(module.IsValid(), f"Module for {obj_name} is valid")53            self.assertEqual(54                module.GetObjectName(), obj_name, f"Object name for {obj_name} matches"55            )56            found.add(obj_name)57 58        self.assertEqual(found, expected, "Did not find all expected archive members")59 60    @skipUnlessDarwin61    @skipIfRemote62    def test_module_is_file_backed(self):63        """Test the SBModule::IsFileBacked() method"""64        self.build()65        target, _, _, _ = lldbutil.run_to_source_breakpoint(66            self, "// break here", lldb.SBFileSpec("main.c")67        )68 69        self.assertGreater(target.GetNumModules(), 0)70        main_module = target.GetModuleAtIndex(0)71        self.assertEqual(main_module.GetFileSpec().GetFilename(), "a.out")72        self.assertTrue(73            main_module.IsFileBacked(), "The module should be backed by a file on disk"74        )75 76        self.dbg.DeleteTarget(target)77        self.assertEqual(self.dbg.GetNumTargets(), 0)78 79        exe = self.getBuildArtifact("a.out")80        background_process = subprocess.Popen([exe])81        self.assertTrue(background_process, "process is not valid")82        self.background_pid = background_process.pid83        os.unlink(exe)84 85        target = self.dbg.CreateTarget("")86        self.assertEqual(self.dbg.GetNumTargets(), 1)87        error = lldb.SBError()88        process = target.AttachToProcessWithID(89            self.dbg.GetListener(), self.background_pid, error90        )91        self.assertTrue(error.Success() and process, PROCESS_IS_VALID)92        main_module = target.FindModule(lldb.SBFileSpec("a.out"))93        self.assertIsNotNone(main_module)94        self.assertFalse(95            main_module.IsFileBacked(),96            "The module should not be backed by a file on disk.",97        )98 99        error = process.Destroy()100        self.assertSuccess(101            error, "couldn't destroy process %s" % background_process.pid102        )103