https://github.com/charles-zablit created 
https://github.com/llvm/llvm-project/pull/170333

This patch converts the `jit-loader_rtdyld_elf.test` test from a Shell test to 
an API test.

This test is timing out in CI and the hang cannot be reproduced at desk. 
Converting it to an API test would allow us to instrument it better in order to 
trace the failure.

>From 77c1872dd34ab118dd5cea01740493f764e5f99f Mon Sep 17 00:00:00 2001
From: Charles Zablit <[email protected]>
Date: Tue, 2 Dec 2025 12:30:12 +0000
Subject: [PATCH] [lldb] convert TestJitBreakpoint to API test

---
 .../breakpoint/jit_loader_rtdyld_elf/Makefile | 14 +++++
 .../TestJitBreakPoint.py                      | 53 +++++++++++++++++++
 .../jit_loader_rtdyld_elf}/jitbp.cpp          |  0
 .../Breakpoint/jit-loader_rtdyld_elf.test     | 22 --------
 4 files changed, 67 insertions(+), 22 deletions(-)
 create mode 100644 
lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/Makefile
 create mode 100644 
lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/TestJitBreakPoint.py
 rename lldb/test/{Shell/Breakpoint/Inputs => 
API/functionalities/breakpoint/jit_loader_rtdyld_elf}/jitbp.cpp (100%)
 delete mode 100644 lldb/test/Shell/Breakpoint/jit-loader_rtdyld_elf.test

diff --git 
a/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/Makefile 
b/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/Makefile
new file mode 100644
index 0000000000000..51a6bfc5fee67
--- /dev/null
+++ b/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/Makefile
@@ -0,0 +1,14 @@
+CXX_SOURCES := jitbp.cpp
+
+include Makefile.rules
+
+# Build LLVM IR that lli will JIT.
+# Matches the commands from the shell test.
+jitbp.ll: jitbp.cpp
+       $(CXX) -g -S -emit-llvm --target=x86_64-unknown-unknown-elf \
+             -o $@ $<
+
+all: jitbp.ll
+
+clean::
+       rm -f jitbp.ll
diff --git 
a/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/TestJitBreakPoint.py
 
b/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/TestJitBreakPoint.py
new file mode 100644
index 0000000000000..1a4b16f03f474
--- /dev/null
+++ 
b/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/TestJitBreakPoint.py
@@ -0,0 +1,53 @@
+"""
+Test that pending breakpoints resolve for JITted code with mcjit and rtdyld.
+"""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestJitBreakpoint(TestBase):
+    def setUp(self):
+        TestBase.setUp(self)
+        self.ll = self.getBuildArtifact("jitbp.ll")
+
+    @skipUnlessArch("x86_64")
+    @expectedFailureAll(oslist=["windows"])
+    def test_jit_breakpoints(self):
+        self.build()
+        self.do_test("--jit-kind=mcjit")
+        self.do_test("--jit-linker=rtdyld")
+
+    def do_test(self, jit_flag: str):
+        self.dbg.SetAsync(False)
+
+        self.dbg.HandleCommand("settings set plugin.jit-loader.gdb.enable on")
+
+        lli_path = lldbutil.which("lli")
+        self.assertIsNotNone(lli_path, "Could not find lli executable")
+        target = self.dbg.CreateTarget(lli_path)
+        self.assertTrue(target.IsValid())
+
+        bp = target.BreakpointCreateByName("jitbp")
+        self.assertTrue(bp.IsValid())
+        self.assertEqual(bp.GetNumLocations(), 0, "Expected a pending 
breakpoint")
+
+        launch_info = target.GetLaunchInfo()
+        launch_info.SetArguments([jit_flag, self.ll], True)
+
+        error = lldb.SBError()
+        process = target.Launch(launch_info, error)
+        self.assertTrue(process.IsValid())
+        self.assertTrue(error.Success(), error.GetCString())
+
+        self.assertEqual(process.GetState(), lldb.eStateStopped)
+
+        thread = process.GetSelectedThread()
+        frame = thread.GetSelectedFrame()
+        self.assertIn("jitbp", frame.GetFunctionName())
+
+        self.assertGreaterEqual(
+            bp.GetNumLocations(), 1, "Breakpoint must be resolved after JIT 
loads code"
+        )
diff --git a/lldb/test/Shell/Breakpoint/Inputs/jitbp.cpp 
b/lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/jitbp.cpp
similarity index 100%
rename from lldb/test/Shell/Breakpoint/Inputs/jitbp.cpp
rename to 
lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/jitbp.cpp
diff --git a/lldb/test/Shell/Breakpoint/jit-loader_rtdyld_elf.test 
b/lldb/test/Shell/Breakpoint/jit-loader_rtdyld_elf.test
deleted file mode 100644
index ae9402a519494..0000000000000
--- a/lldb/test/Shell/Breakpoint/jit-loader_rtdyld_elf.test
+++ /dev/null
@@ -1,22 +0,0 @@
-# REQUIRES: target-x86_64
-# XFAIL: system-windows
-
-# RuntimeDyld can be used to link and load emitted code for both, MCJIT and 
Orc.
-#
-# RUN: %clangxx -g -S -emit-llvm --target=x86_64-unknown-unknown-elf \
-# RUN:          -o %t.ll %p/Inputs/jitbp.cpp
-#
-# RUN: %lldb -b -o 'settings set plugin.jit-loader.gdb.enable on' -o 'b jitbp' 
\
-# RUN:          -o 'run --jit-kind=mcjit %t.ll' lli | FileCheck %s
-#
-# RUN: %lldb -b -o 'settings set plugin.jit-loader.gdb.enable on' -o 'b jitbp' 
\
-# RUN:          -o 'run --jit-linker=rtdyld %t.ll' lli | FileCheck %s
-
-# CHECK: Breakpoint 1: no locations (pending).
-# CHECK: (lldb) run {{.*}}
-# CHECK: Process {{.*}} launched: {{.*}}
-# CHECK: Process {{.*}} stopped
-# CHECK: JIT(0x{{.*}})`jitbp() at jitbp.cpp:1:15
-# CHECK: -> 1    int jitbp() { return 0; }
-# CHECK:                       ^
-# CHECK:    2    int main() { return jitbp(); }

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to