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