xref: /llvm-project/lldb/test/API/python_api/sbmodule/TestSBModule.py (revision 9c2468821ec51defd09c246fea4a47886fff8c01)
1ff52ef33SMed Ismail Bennani"""Test the SBDModule APIs."""
2ff52ef33SMed Ismail Bennani
3ff52ef33SMed Ismail Bennaniimport lldb
4ff52ef33SMed Ismail Bennanifrom lldbsuite.test.decorators import *
5ff52ef33SMed Ismail Bennanifrom lldbsuite.test.lldbtest import *
6ff52ef33SMed Ismail Bennanifrom lldbsuite.test import lldbutil
7ff52ef33SMed Ismail Bennani
8ff52ef33SMed Ismail Bennaniimport os, signal, subprocess
9ff52ef33SMed Ismail Bennani
10ff52ef33SMed Ismail Bennani
112238dcc3SJonas Devlieghereclass SBModuleAPICase(TestBase):
12ff52ef33SMed Ismail Bennani    def setUp(self):
13ff52ef33SMed Ismail Bennani        TestBase.setUp(self)
14ff52ef33SMed Ismail Bennani        self.background_pid = None
15ff52ef33SMed Ismail Bennani
16ff52ef33SMed Ismail Bennani    def tearDown(self):
17ff52ef33SMed Ismail Bennani        TestBase.tearDown(self)
18ff52ef33SMed Ismail Bennani        if self.background_pid:
19ff52ef33SMed Ismail Bennani            os.kill(self.background_pid, signal.SIGKILL)
20ff52ef33SMed Ismail Bennani
21aae3c4f2SMed Ismail Bennani    @skipUnlessDarwin
2266b829acSJonas Devlieghere    @skipIfRemote
23ff52ef33SMed Ismail Bennani    def test_module_is_file_backed(self):
24ff52ef33SMed Ismail Bennani        """Test the SBModule::IsFileBacked() method"""
25ff52ef33SMed Ismail Bennani        self.build()
262238dcc3SJonas Devlieghere        target, _, _, _ = lldbutil.run_to_source_breakpoint(
272238dcc3SJonas Devlieghere            self, "// break here", lldb.SBFileSpec("main.c")
282238dcc3SJonas Devlieghere        )
29ff52ef33SMed Ismail Bennani
30ff52ef33SMed Ismail Bennani        self.assertGreater(target.GetNumModules(), 0)
31ff52ef33SMed Ismail Bennani        main_module = target.GetModuleAtIndex(0)
32ff52ef33SMed Ismail Bennani        self.assertEqual(main_module.GetFileSpec().GetFilename(), "a.out")
332238dcc3SJonas Devlieghere        self.assertTrue(
342238dcc3SJonas Devlieghere            main_module.IsFileBacked(), "The module should be backed by a file on disk"
352238dcc3SJonas Devlieghere        )
36ff52ef33SMed Ismail Bennani
37ff52ef33SMed Ismail Bennani        self.dbg.DeleteTarget(target)
38ff52ef33SMed Ismail Bennani        self.assertEqual(self.dbg.GetNumTargets(), 0)
39ff52ef33SMed Ismail Bennani
40ff52ef33SMed Ismail Bennani        exe = self.getBuildArtifact("a.out")
41ff52ef33SMed Ismail Bennani        background_process = subprocess.Popen([exe])
42ff52ef33SMed Ismail Bennani        self.assertTrue(background_process, "process is not valid")
43ff52ef33SMed Ismail Bennani        self.background_pid = background_process.pid
44ff52ef33SMed Ismail Bennani        os.unlink(exe)
45ff52ef33SMed Ismail Bennani
462238dcc3SJonas Devlieghere        target = self.dbg.CreateTarget("")
47ff52ef33SMed Ismail Bennani        self.assertEqual(self.dbg.GetNumTargets(), 1)
48ff52ef33SMed Ismail Bennani        error = lldb.SBError()
492238dcc3SJonas Devlieghere        process = target.AttachToProcessWithID(
502238dcc3SJonas Devlieghere            self.dbg.GetListener(), self.background_pid, error
512238dcc3SJonas Devlieghere        )
52a6b56243SMed Ismail Bennani        self.assertTrue(error.Success() and process, PROCESS_IS_VALID)
5367c73d88SFelipe de Azevedo Piovezan        main_module = target.FindModule(lldb.SBFileSpec("a.out"))
54*9c246882SJordan Rupprecht        self.assertIsNotNone(main_module)
552238dcc3SJonas Devlieghere        self.assertFalse(
562238dcc3SJonas Devlieghere            main_module.IsFileBacked(),
572238dcc3SJonas Devlieghere            "The module should not be backed by a file on disk.",
582238dcc3SJonas Devlieghere        )
59ff52ef33SMed Ismail Bennani
60a6b56243SMed Ismail Bennani        error = process.Destroy()
612238dcc3SJonas Devlieghere        self.assertSuccess(
622238dcc3SJonas Devlieghere            error, "couldn't destroy process %s" % background_process.pid
632238dcc3SJonas Devlieghere        )
64