Files
clang-p2996/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py
Jason Molenda 1447ea059b NFC test if rosetta is installed before running x86 binary on AS
Rosetta 2 is not installed by default in a fresh macOS installation
on Apple Silicon, so x86 binaries cannot be run.  CI bots are often
in this state.  Update this test to check for the rosetta debugserver,
which our debugserver also hardcodes the path of, before trying to
run an x86 process on AS systems.
2022-11-15 14:44:35 -08:00

66 lines
1.9 KiB
Python

import contextlib
import os
from os.path import exists
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
def haswell():
features = subprocess.check_output(["sysctl", "machdep.cpu"])
return "AVX2" in features.decode('utf-8')
def apple_silicon():
features = subprocess.check_output(["sysctl", "machdep.cpu"])
return "Apple M" in features.decode('utf-8')
def rosetta_debugserver_installed():
return exists("/Library/Apple/usr/libexec/oah/debugserver")
class TestLaunchProcessPosixSpawn(TestBase):
NO_DEBUG_INFO_TESTCASE = True
def no_haswell(self):
if not haswell():
return "Current CPU is not Haswell"
return None
def no_apple_silicon(self):
if not apple_silicon():
return "Current CPU is not Apple Silicon"
return None
def run_arch(self, exe, arch):
self.runCmd('target create -arch {} {}'.format(arch, exe))
self.runCmd('run')
process = self.dbg.GetSelectedTarget().process
self.assertState(process.GetState(), lldb.eStateExited)
self.assertIn('slice: {}'.format(arch), process.GetSTDOUT(1000))
@skipUnlessDarwin
@skipIfDarwinEmbedded
@skipIfLLVMTargetMissing("AArch64")
@skipIfLLVMTargetMissing("X86")
@skipTestIfFn(no_haswell)
def test_haswell(self):
self.build()
exe = self.getBuildArtifact("fat.out")
self.run_arch(exe, 'x86_64')
self.run_arch(exe, 'x86_64h')
@skipUnlessDarwin
@skipIfDarwinEmbedded
@skipIfLLVMTargetMissing("AArch64")
@skipIfLLVMTargetMissing("X86")
@skipTestIfFn(no_apple_silicon)
def test_apple_silicon(self):
self.build()
exe = self.getBuildArtifact("fat.out")
if rosetta_debugserver_installed():
self.run_arch(exe, 'x86_64')
self.run_arch(exe, 'arm64')