aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/API
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/test/API')
-rw-r--r--lldb/test/API/commands/frame/var-dil/basics/GlobalVariableLookup/TestFrameVarDILGlobalVariableLookup.py9
-rw-r--r--lldb/test/API/driver/stdio_closed/TestDriverWithClosedSTDIO.py56
-rw-r--r--lldb/test/API/functionalities/vtable/Makefile6
-rw-r--r--lldb/test/API/lang/objc/synthesized-property-accessor/Makefile4
-rw-r--r--lldb/test/API/lang/objc/synthesized-property-accessor/TestSynthesizedPropertyAccessor.py30
-rw-r--r--lldb/test/API/lang/objc/synthesized-property-accessor/main.m14
-rw-r--r--lldb/test/API/lit.cfg.py2
-rw-r--r--lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py5
8 files changed, 126 insertions, 0 deletions
diff --git a/lldb/test/API/commands/frame/var-dil/basics/GlobalVariableLookup/TestFrameVarDILGlobalVariableLookup.py b/lldb/test/API/commands/frame/var-dil/basics/GlobalVariableLookup/TestFrameVarDILGlobalVariableLookup.py
index 9cb166e..4d55767 100644
--- a/lldb/test/API/commands/frame/var-dil/basics/GlobalVariableLookup/TestFrameVarDILGlobalVariableLookup.py
+++ b/lldb/test/API/commands/frame/var-dil/basics/GlobalVariableLookup/TestFrameVarDILGlobalVariableLookup.py
@@ -19,6 +19,15 @@ class TestFrameVarDILGlobalVariableLookup(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@skipIf(macos_version=["<", "15.0"], archs=["arm64", "arm64e"])
+ @expectedFailureAll(
+ dwarf_version=["<", "5"],
+ oslist=[lldbplatformutil.getDarwinOSTriples()],
+ )
+ @expectedFailureAll(
+ compiler="clang",
+ compiler_version=["<", "19.0"],
+ oslist=[lldbplatformutil.getDarwinOSTriples()],
+ )
def test_frame_var(self):
self.build()
lldbutil.run_to_source_breakpoint(
diff --git a/lldb/test/API/driver/stdio_closed/TestDriverWithClosedSTDIO.py b/lldb/test/API/driver/stdio_closed/TestDriverWithClosedSTDIO.py
new file mode 100644
index 0000000..a73322c
--- /dev/null
+++ b/lldb/test/API/driver/stdio_closed/TestDriverWithClosedSTDIO.py
@@ -0,0 +1,56 @@
+"""
+Test that if you exec lldb with the stdio file handles
+closed, it is able to exit without hanging.
+"""
+
+
+import lldb
+import os
+import sys
+import socket
+
+if os.name != "nt":
+ import fcntl
+
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+
+class TestDriverWithClosedSTDIO(TestBase):
+ # If your test case doesn't stress debug info, then
+ # set this to true. That way it won't be run once for
+ # each debug info format.
+ NO_DEBUG_INFO_TESTCASE = True
+
+ # Windows doesn't have the fcntl module, so we can't run this
+ # test there.
+ @skipIf(hostoslist=["windows"])
+ def test_run_lldb_and_wait(self):
+ """This test forks, closes the stdio channels and exec's lldb.
+ Then it waits for it to exit and asserts it did that successfully"""
+ pid = os.fork()
+ if pid == 0:
+ fcntl.fcntl(sys.stdin, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
+ fcntl.fcntl(sys.stdout, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
+ fcntl.fcntl(sys.stderr, fcntl.F_SETFD, fcntl.FD_CLOEXEC)
+ lldb = lldbtest_config.lldbExec
+ print(f"About to run: {lldb}")
+ os.execlp(
+ lldb,
+ lldb,
+ "-x",
+ "-o",
+ "script print(lldb.debugger.GetNumTargets())",
+ "--batch",
+ )
+ else:
+ if pid == -1:
+ print("Couldn't fork a process.")
+ return
+ ret_pid, status = os.waitpid(pid, 0)
+ # We're really just checking that lldb doesn't stall.
+ # At the time this test was written, if you close stdin
+ # in an asserts build, lldb aborts. So handle both
+ # of those cases. The failure will just be that the
+ # waitpid doesn't return, and the test times out.
+ self.assertFalse(os.WIFSTOPPED(status), "We either exited or crashed.")
diff --git a/lldb/test/API/functionalities/vtable/Makefile b/lldb/test/API/functionalities/vtable/Makefile
index 99998b2..cbd7d47 100644
--- a/lldb/test/API/functionalities/vtable/Makefile
+++ b/lldb/test/API/functionalities/vtable/Makefile
@@ -1,3 +1,9 @@
CXX_SOURCES := main.cpp
+ifeq "$(OS)" "Darwin"
+ # Make vtables writable for test_overwrite_vtable test
+ # The -no_data_const flag prevents vtables from being placed in __DATA_CONST
+ LD_EXTRAS := -Wl,-no_data_const
+endif
+
include Makefile.rules
diff --git a/lldb/test/API/lang/objc/synthesized-property-accessor/Makefile b/lldb/test/API/lang/objc/synthesized-property-accessor/Makefile
new file mode 100644
index 0000000..89e6e79
--- /dev/null
+++ b/lldb/test/API/lang/objc/synthesized-property-accessor/Makefile
@@ -0,0 +1,4 @@
+OBJC_SOURCES := main.m
+LDFLAGS := -lobjc
+
+include Makefile.rules
diff --git a/lldb/test/API/lang/objc/synthesized-property-accessor/TestSynthesizedPropertyAccessor.py b/lldb/test/API/lang/objc/synthesized-property-accessor/TestSynthesizedPropertyAccessor.py
new file mode 100644
index 0000000..0a171e98
--- /dev/null
+++ b/lldb/test/API/lang/objc/synthesized-property-accessor/TestSynthesizedPropertyAccessor.py
@@ -0,0 +1,30 @@
+"""
+Test debug-info parsing of synthesized Objective-C properties.
+"""
+
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestSynthesizedPropertyAccessor(TestBase):
+ def test(self):
+ self.build()
+
+ (target, _, _, _) = lldbutil.run_to_source_breakpoint(
+ self, "return f.fooProp", lldb.SBFileSpec("main.m")
+ )
+
+ getters = target.FindFunctions("-[Foo fooProp]", lldb.eFunctionNameTypeSelector)
+ self.assertEqual(len(getters), 1)
+ getter = getters[0].function.GetType()
+ self.assertTrue(getter)
+ self.assertEqual(getter.GetDisplayTypeName(), "int ()")
+
+ setters = target.FindFunctions(
+ "-[Foo setFooProp:]", lldb.eFunctionNameTypeSelector
+ )
+ self.assertEqual(len(setters), 1)
+ setter = setters[0].function.GetType()
+ self.assertTrue(setter)
+ self.assertEqual(setter.GetDisplayTypeName(), "void (int)")
diff --git a/lldb/test/API/lang/objc/synthesized-property-accessor/main.m b/lldb/test/API/lang/objc/synthesized-property-accessor/main.m
new file mode 100644
index 0000000..4186162
--- /dev/null
+++ b/lldb/test/API/lang/objc/synthesized-property-accessor/main.m
@@ -0,0 +1,14 @@
+#import <Foundation/Foundation.h>
+
+@interface Foo : NSObject
+@property(readwrite) int fooProp;
+@end
+
+@implementation Foo
+@end
+
+int main() {
+ Foo *f = [Foo new];
+ [f setFooProp:10];
+ return f.fooProp;
+}
diff --git a/lldb/test/API/lit.cfg.py b/lldb/test/API/lit.cfg.py
index dcff868..f2a14d1 100644
--- a/lldb/test/API/lit.cfg.py
+++ b/lldb/test/API/lit.cfg.py
@@ -90,6 +90,8 @@ def find_python_interpreter():
)
shutil.copy(real_python, copied_python)
+ # macOS 15+ restricts injecting the ASAN runtime to only user-compiled code.
+ subprocess.check_call(["/usr/bin/codesign", "--remove-signature", copied_python])
# Now make sure the copied Python works. The Python in Xcode has a relative
# RPATH and cannot be copied.
diff --git a/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py b/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py
index 0f40dfd..9050f6a 100644
--- a/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py
+++ b/lldb/test/API/macosx/posix_spawn/TestLaunchProcessPosixSpawn.py
@@ -18,6 +18,11 @@ def apple_silicon():
def rosetta_debugserver_installed():
+ import platform
+ version = platform.mac_ver()
+ # Workaround for an undiagnosed problem on green dragon.
+ if version[0] == '15.5':
+ return False
return exists("/Library/Apple/usr/libexec/oah/debugserver")