[clang] 1e4891e - [clang-repl] Enable debugging of JIT-ed code.
Vassil Vassilev via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 18 06:19:52 PDT 2023
Author: Vassil Vassilev
Date: 2023-04-18T13:19:42Z
New Revision: 1e4891e681c51f3e2a724b4ac4e42380ec4a9be1
URL: https://github.com/llvm/llvm-project/commit/1e4891e681c51f3e2a724b4ac4e42380ec4a9be1
DIFF: https://github.com/llvm/llvm-project/commit/1e4891e681c51f3e2a724b4ac4e42380ec4a9be1.diff
LOG: [clang-repl] Enable debugging of JIT-ed code.
This change follows llvm/llvm-project at 21b5ebd and makes use of the jitlink
infrastructure. In order to use this feature inside lldb one needs to run the
lldb command: settings set plugin.jit-loader.gdb.enable on
This works currently only on Darwin since jitlink is not a default ELF/x86-64
backend yet.
Differential revision: https://reviews.llvm.org/D148481
Added:
Modified:
clang/lib/Interpreter/IncrementalExecutor.cpp
Removed:
################################################################################
diff --git a/clang/lib/Interpreter/IncrementalExecutor.cpp b/clang/lib/Interpreter/IncrementalExecutor.cpp
index fdf12dd214148..3f8d60630de41 100644
--- a/clang/lib/Interpreter/IncrementalExecutor.cpp
+++ b/clang/lib/Interpreter/IncrementalExecutor.cpp
@@ -21,11 +21,18 @@
#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
#include "llvm/ExecutionEngine/Orc/LLJIT.h"
#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
+#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.h"
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/TargetSelect.h"
+// Force linking some of the runtimes that helps attaching to a debugger.
+LLVM_ATTRIBUTE_USED void linkComponents() {
+ llvm::errs() << (void *)&llvm_orc_registerJITLoaderGDBWrapper
+ << (void *)&llvm_orc_registerJITLoaderGDBAllocAction;
+}
+
namespace clang {
IncrementalExecutor::IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC,
@@ -37,7 +44,12 @@ IncrementalExecutor::IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC,
auto JTMB = JITTargetMachineBuilder(TI.getTriple());
JTMB.addFeatures(TI.getTargetOpts().Features);
- if (auto JitOrErr = LLJITBuilder().setJITTargetMachineBuilder(JTMB).create())
+ LLJITBuilder Builder;
+ Builder.setJITTargetMachineBuilder(JTMB);
+ // Enable debugging of JIT'd code (only works on JITLink for ELF and MachO).
+ Builder.setEnableDebuggerSupport(true);
+
+ if (auto JitOrErr = Builder.create())
Jit = std::move(*JitOrErr);
else {
Err = JitOrErr.takeError();
More information about the cfe-commits
mailing list