llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Charles Zablit (charles-zablit) <details> <summary>Changes</summary> 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 on Windows 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. --- Full diff: https://github.com/llvm/llvm-project/pull/170333.diff 4 Files Affected: - (added) lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/Makefile (+14) - (added) lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/TestJitBreakPoint.py (+53) - (renamed) lldb/test/API/functionalities/breakpoint/jit_loader_rtdyld_elf/jitbp.cpp () - (removed) lldb/test/Shell/Breakpoint/jit-loader_rtdyld_elf.test (-22) ``````````diff 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(); } `````````` </details> https://github.com/llvm/llvm-project/pull/170333 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
