xref: /llvm-project/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
198e50a7dSJonas Devlieghereimport contextlib
298e50a7dSJonas Devlieghereimport os
31447ea05SJason Molendafrom os.path import exists
498e50a7dSJonas Devlieghereimport lldb
598e50a7dSJonas Devliegherefrom lldbsuite.test.decorators import *
698e50a7dSJonas Devliegherefrom lldbsuite.test.lldbtest import *
798e50a7dSJonas Devliegherefrom lldbsuite.test import lldbutil
898e50a7dSJonas Devlieghere
998e50a7dSJonas Devlieghere
1098e50a7dSJonas Devliegheredef haswell():
1198e50a7dSJonas Devlieghere    features = subprocess.check_output(["sysctl", "machdep.cpu"])
12*2238dcc3SJonas Devlieghere    return "AVX2" in features.decode("utf-8")
1398e50a7dSJonas Devlieghere
1498e50a7dSJonas Devlieghere
1598e50a7dSJonas Devliegheredef apple_silicon():
1698e50a7dSJonas Devlieghere    features = subprocess.check_output(["sysctl", "machdep.cpu"])
17*2238dcc3SJonas Devlieghere    return "Apple M" in features.decode("utf-8")
1898e50a7dSJonas Devlieghere
1998e50a7dSJonas Devlieghere
201447ea05SJason Molendadef rosetta_debugserver_installed():
211447ea05SJason Molenda    return exists("/Library/Apple/usr/libexec/oah/debugserver")
221447ea05SJason Molenda
23*2238dcc3SJonas Devlieghere
2498e50a7dSJonas Devlieghereclass TestLaunchProcessPosixSpawn(TestBase):
2598e50a7dSJonas Devlieghere    NO_DEBUG_INFO_TESTCASE = True
2698e50a7dSJonas Devlieghere
2798e50a7dSJonas Devlieghere    def no_haswell(self):
2898e50a7dSJonas Devlieghere        if not haswell():
2998e50a7dSJonas Devlieghere            return "Current CPU is not Haswell"
3098e50a7dSJonas Devlieghere        return None
3198e50a7dSJonas Devlieghere
3298e50a7dSJonas Devlieghere    def no_apple_silicon(self):
3398e50a7dSJonas Devlieghere        if not apple_silicon():
3498e50a7dSJonas Devlieghere            return "Current CPU is not Apple Silicon"
3598e50a7dSJonas Devlieghere        return None
3698e50a7dSJonas Devlieghere
3798e50a7dSJonas Devlieghere    def run_arch(self, exe, arch):
38*2238dcc3SJonas Devlieghere        self.runCmd("target create -arch {} {}".format(arch, exe))
39*2238dcc3SJonas Devlieghere        self.runCmd("run")
4098e50a7dSJonas Devlieghere
4198e50a7dSJonas Devlieghere        process = self.dbg.GetSelectedTarget().process
421b8c7352SJonas Devlieghere        self.assertState(process.GetState(), lldb.eStateExited)
43*2238dcc3SJonas Devlieghere        self.assertIn("slice: {}".format(arch), process.GetSTDOUT(1000))
4498e50a7dSJonas Devlieghere
4598e50a7dSJonas Devlieghere    @skipUnlessDarwin
4698e50a7dSJonas Devlieghere    @skipIfDarwinEmbedded
4706c7bdc8SDave Lee    @skipIfLLVMTargetMissing("AArch64")
4806c7bdc8SDave Lee    @skipIfLLVMTargetMissing("X86")
4998e50a7dSJonas Devlieghere    @skipTestIfFn(no_haswell)
5098e50a7dSJonas Devlieghere    def test_haswell(self):
5198e50a7dSJonas Devlieghere        self.build()
5298e50a7dSJonas Devlieghere        exe = self.getBuildArtifact("fat.out")
53*2238dcc3SJonas Devlieghere        self.run_arch(exe, "x86_64")
54*2238dcc3SJonas Devlieghere        self.run_arch(exe, "x86_64h")
5598e50a7dSJonas Devlieghere
5698e50a7dSJonas Devlieghere    @skipUnlessDarwin
5798e50a7dSJonas Devlieghere    @skipIfDarwinEmbedded
5806c7bdc8SDave Lee    @skipIfLLVMTargetMissing("AArch64")
5906c7bdc8SDave Lee    @skipIfLLVMTargetMissing("X86")
6098e50a7dSJonas Devlieghere    @skipTestIfFn(no_apple_silicon)
6198e50a7dSJonas Devlieghere    def test_apple_silicon(self):
6298e50a7dSJonas Devlieghere        self.build()
6398e50a7dSJonas Devlieghere        exe = self.getBuildArtifact("fat.out")
641447ea05SJason Molenda        if rosetta_debugserver_installed():
65*2238dcc3SJonas Devlieghere            self.run_arch(exe, "x86_64")
66*2238dcc3SJonas Devlieghere        self.run_arch(exe, "arm64")
67