Files
clang-p2996/lldb/test/API/macosx/delay-init-dependency/TestDelayInitDependency.py
Jason Molenda 45927d730b [lldb] Skip delay-init test when run on pre-macOS 15
The test has a check that the static linker supports the new option,
but it assumed the Xcode 16 linker also meant it was running on
macOS 15 and the dynamic linker would honor dependencies flagged
this way.  But Xcode 16 can be run on macOS 14.5, so we need to
skip the test in that combination.
2024-06-12 15:58:03 -07:00

64 lines
2.2 KiB
Python

"""Test binaries with delay-init dependencies."""
import subprocess
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestDelayInitDependencies(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@skipUnlessDarwin
@skipIf(macos_version=["<", "15.0"])
def test_delay_init_dependency(self):
TestBase.setUp(self)
out = subprocess.run(
["xcrun", "ld", "-delay_library"],
universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
if "delay_library missing" not in out.stderr:
self.skipTest(
"Skipped because the linker doesn't know about -delay_library"
)
self.build()
main_source = "main.c"
exe = self.getBuildArtifact("a.out")
lib = self.getBuildArtifact("libfoo.dylib")
target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)
# libfoo.dylib should not be in the target pre-execution
for m in target.modules:
self.assertNotEqual(m.GetFileSpec().GetFilename(), "libfoo.dylib")
# This run without arguments will not load libfoo.dylib
li = lldb.SBLaunchInfo([])
li.SetWorkingDirectory(self.getBuildDir())
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.c"), li
)
for m in target.modules:
self.assertNotEqual(m.GetFileSpec().GetFilename(), "libfoo.dylib")
process.Kill()
self.dbg.DeleteTarget(target)
# This run with one argument will load libfoo.dylib
li = lldb.SBLaunchInfo([])
li.SetWorkingDirectory(self.getBuildDir())
li.SetArguments(["one-argument"], True)
(target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
self, "// break here", lldb.SBFileSpec("main.c"), li
)
found_libfoo = False
for m in target.modules:
if m.GetFileSpec().GetFilename() == "libfoo.dylib":
found_libfoo = True
self.assertTrue(found_libfoo)