-
Notifications
You must be signed in to change notification settings - Fork 11.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[lldb] NFC add comments and test case for ObjectFileMachO delay-init (#…
…95067) Add comments and a test for delay-init libraries on macOS. I originally added the support in 954d00e a month ago, but without these additional clarifications. rdar://126885033
- Loading branch information
1 parent
39cf880
commit 1934208
Showing
5 changed files
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
C_SOURCES := main.c | ||
LD_EXTRAS := -L. -Wl,-delay_library,libfoo.dylib | ||
|
||
.PHONY: build-libfoo | ||
all: build-libfoo a.out | ||
|
||
include Makefile.rules | ||
|
||
build-libfoo: foo.c | ||
$(MAKE) -f $(MAKEFILE_RULES) \ | ||
DYLIB_C_SOURCES=foo.c DYLIB_NAME=foo DYLIB_ONLY=YES |
62 changes: 62 additions & 0 deletions
62
lldb/test/API/macosx/delay-init-dependency/TestDelayInitDependency.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
"""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 | ||
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
int foo() { return 5; } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
int foo(); | ||
int main(int argc, char **argv) { | ||
int retval = 0; | ||
// Only call foo() if one argument is passed | ||
if (argc == 2) | ||
retval = foo(); | ||
|
||
return retval; // break here | ||
} |