[llvm] e5f169f - Revert "[ORC][LLJIT] Move enable-debugger-support utility out of LLJITBuilder."
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 22 21:44:28 PDT 2023
Author: Lang Hames
Date: 2023-09-22T21:43:41-07:00
New Revision: e5f169f91a86af3490d9251387b3f5455941bb83
URL: https://github.com/llvm/llvm-project/commit/e5f169f91a86af3490d9251387b3f5455941bb83
DIFF: https://github.com/llvm/llvm-project/commit/e5f169f91a86af3490d9251387b3f5455941bb83.diff
LOG: Revert "[ORC][LLJIT] Move enable-debugger-support utility out of LLJITBuilder."
This reverts commit e1a5bb59b91d60c0d87feb78f0e0614589a4c927 while I
investigate the bot failure at
https://lab.llvm.org/buildbot/#/builders/168/builds/15831
Added:
Modified:
clang/lib/Interpreter/IncrementalExecutor.cpp
clang/tools/clang-repl/ClangRepl.cpp
clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
clang/unittests/Interpreter/InterpreterTest.cpp
llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
llvm/lib/ExecutionEngine/Orc/CMakeLists.txt
llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
llvm/tools/lli/lli.cpp
Removed:
llvm/include/llvm/ExecutionEngine/Orc/DebuggerSupport.h
llvm/lib/ExecutionEngine/Orc/DebuggerSupport.cpp
################################################################################
diff --git a/clang/lib/Interpreter/IncrementalExecutor.cpp b/clang/lib/Interpreter/IncrementalExecutor.cpp
index 2692d0618b8649e..2c4dfc9a611e021 100644
--- a/clang/lib/Interpreter/IncrementalExecutor.cpp
+++ b/clang/lib/Interpreter/IncrementalExecutor.cpp
@@ -17,7 +17,6 @@
#include "clang/Interpreter/PartialTranslationUnit.h"
#include "llvm/ExecutionEngine/ExecutionEngine.h"
#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
-#include "llvm/ExecutionEngine/Orc/DebuggerSupport.h"
#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
#include "llvm/ExecutionEngine/Orc/LLJIT.h"
@@ -47,13 +46,8 @@ IncrementalExecutor::IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC,
JTMB.addFeatures(TI.getTargetOpts().Features);
LLJITBuilder Builder;
Builder.setJITTargetMachineBuilder(JTMB);
- Builder.setPrePlatformSetup(
- [](LLJIT &J) {
- // Try to enable debugging of JIT'd code (only works with JITLink for
- // ELF and MachO).
- consumeError(enableDebuggerSupport(J));
- return llvm::Error::success();
- });
+ // 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);
diff --git a/clang/tools/clang-repl/ClangRepl.cpp b/clang/tools/clang-repl/ClangRepl.cpp
index a29a2ebac434ab5..51741fd1a27ef4a 100644
--- a/clang/tools/clang-repl/ClangRepl.cpp
+++ b/clang/tools/clang-repl/ClangRepl.cpp
@@ -152,7 +152,9 @@ int main(int argc, const char **argv) {
llvm::InitializeAllAsmPrinters();
if (OptHostSupportsJit) {
- auto J = llvm::orc::LLJITBuilder().create();
+ auto J = llvm::orc::LLJITBuilder()
+ .setEnableDebuggerSupport(true)
+ .create();
if (J)
llvm::outs() << "true\n";
else {
diff --git a/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp b/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
index 70e10b1e53bd9d6..8700f506d9b17d4 100644
--- a/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
+++ b/clang/unittests/Interpreter/ExceptionTests/InterpreterExceptionTest.cpp
@@ -52,7 +52,9 @@ TEST(InterpreterTest, CatchException) {
llvm::InitializeNativeTargetAsmPrinter();
{
- auto J = llvm::orc::LLJITBuilder().create();
+ auto J = llvm::orc::LLJITBuilder()
+ .setEnableDebuggerSupport(true)
+ .create();
if (!J) {
// The platform does not support JITs.
// Using llvm::consumeError will require typeinfo for ErrorInfoBase, we
diff --git a/clang/unittests/Interpreter/InterpreterTest.cpp b/clang/unittests/Interpreter/InterpreterTest.cpp
index 5f2911e9a7adad3..62e5bacbdd0b6d8 100644
--- a/clang/unittests/Interpreter/InterpreterTest.cpp
+++ b/clang/unittests/Interpreter/InterpreterTest.cpp
@@ -191,7 +191,9 @@ static std::string MangleName(NamedDecl *ND) {
}
static bool HostSupportsJit() {
- auto J = llvm::orc::LLJITBuilder().create();
+ auto J = llvm::orc::LLJITBuilder()
+ .setEnableDebuggerSupport(true)
+ .create();
if (J)
return true;
LLVMConsumeError(llvm::wrap(J.takeError()));
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/DebuggerSupport.h b/llvm/include/llvm/ExecutionEngine/Orc/DebuggerSupport.h
deleted file mode 100644
index 1b47d7d41bb9b5a..000000000000000
--- a/llvm/include/llvm/ExecutionEngine/Orc/DebuggerSupport.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//===-- DebugerSupport.h - Utils for enabling debugger support --*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// Utilities for enabling debugger support.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_EXECUTIONENGINE_ORC_DEBUGGERSUPPORT_H
-#define LLVM_EXECUTIONENGINE_ORC_DEBUGGERSUPPORT_H
-
-#include "llvm/Support/Error.h"
-
-namespace llvm {
-namespace orc {
-
-class LLJIT;
-
-Error enableDebuggerSupport(LLJIT &J);
-
-} // namespace orc
-} // namespace llvm
-
-#endif // LLVM_EXECUTIONENGINE_ORC_DEBUGGERSUPPORT_H
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
index 8ab8ff8a0034bf3..415ec7228f058de 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h
@@ -322,6 +322,7 @@ class LLJITBuilderState {
unique_function<Error(LLJIT &)> PrePlatformSetup;
PlatformSetupFunction SetUpPlatform;
unsigned NumCompileThreads = 0;
+ bool EnableDebuggerSupport = false;
/// Called prior to JIT class construcion to fix up defaults.
Error prepareForConstruction();
@@ -454,6 +455,12 @@ class LLJITBuilderSetters {
return impl();
}
+ /// Enable / disable debugger support (off by default).
+ SetterImpl &setEnableDebuggerSupport(bool EnableDebuggerSupport) {
+ impl().EnableDebuggerSupport = EnableDebuggerSupport;
+ return impl();
+ }
+
/// Set an ExecutorProcessControl object.
///
/// If the platform uses ObjectLinkingLayer by default and no
diff --git a/llvm/lib/ExecutionEngine/Orc/CMakeLists.txt b/llvm/lib/ExecutionEngine/Orc/CMakeLists.txt
index 5956a898de1256d..3256ed8b7362c66 100644
--- a/llvm/lib/ExecutionEngine/Orc/CMakeLists.txt
+++ b/llvm/lib/ExecutionEngine/Orc/CMakeLists.txt
@@ -13,7 +13,6 @@ add_llvm_component_library(LLVMOrcJIT
CompileUtils.cpp
Core.cpp
DebugObjectManagerPlugin.cpp
- DebuggerSupport.cpp
DebuggerSupportPlugin.cpp
DebugUtils.cpp
EPCDynamicLibrarySearchGenerator.cpp
diff --git a/llvm/lib/ExecutionEngine/Orc/DebuggerSupport.cpp b/llvm/lib/ExecutionEngine/Orc/DebuggerSupport.cpp
deleted file mode 100644
index 68d68f07b586203..000000000000000
--- a/llvm/lib/ExecutionEngine/Orc/DebuggerSupport.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-//===------ DebuggerSupport.cpp - Utils for enabling debugger support -----===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/ExecutionEngine/Orc/DebuggerSupport.h"
-#include "llvm/ExecutionEngine/Orc/DebugObjectManagerPlugin.h"
-#include "llvm/ExecutionEngine/Orc/DebuggerSupportPlugin.h"
-#include "llvm/ExecutionEngine/Orc/LLJIT.h"
-
-#define DEBUG_TYPE "orc"
-
-using namespace llvm;
-using namespace llvm::orc;
-
-namespace llvm::orc {
-
-Error enableDebuggerSupport(LLJIT &J) {
- auto *ObjLinkingLayer = dyn_cast<ObjectLinkingLayer>(&J.getObjLinkingLayer());
- if (!ObjLinkingLayer)
- return make_error<StringError>("Cannot enable LLJIT debugger support: "
- "Debugger support requires JITLink",
- inconvertibleErrorCode());
- auto ProcessSymsJD = J.getProcessSymbolsJITDylib();
- if (!ProcessSymsJD)
- return make_error<StringError>("Cannot enable LLJIT debugger support: "
- "Process symbols are not available",
- inconvertibleErrorCode());
-
- auto &ES = J.getExecutionSession();
- const auto &TT = J.getTargetTriple();
-
- switch (TT.getObjectFormat()) {
- case Triple::ELF: {
- auto Registrar = createJITLoaderGDBRegistrar(ES);
- if (!Registrar)
- return Registrar.takeError();
- ObjLinkingLayer->addPlugin(std::make_unique<DebugObjectManagerPlugin>(
- ES, std::move(*Registrar), true, true));
- return Error::success();
- }
- case Triple::MachO: {
- auto DS = GDBJITDebugInfoRegistrationPlugin::Create(ES, *ProcessSymsJD, TT);
- if (!DS)
- return DS.takeError();
- ObjLinkingLayer->addPlugin(std::move(*DS));
- return Error::success();
- }
- default:
- return make_error<StringError>(
- "Cannot enable LLJIT debugger support: " +
- Triple::getObjectFormatTypeName(TT.getObjectFormat()) +
- " is not supported",
- inconvertibleErrorCode());
- }
-}
-
-} // namespace llvm::orc
diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
index 1a4251353e2dab0..01ce7a4c64ec16e 100644
--- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp
@@ -10,6 +10,8 @@
#include "llvm/ExecutionEngine/JITLink/EHFrameSupport.h"
#include "llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h"
#include "llvm/ExecutionEngine/Orc/COFFPlatform.h"
+#include "llvm/ExecutionEngine/Orc/DebugObjectManagerPlugin.h"
+#include "llvm/ExecutionEngine/Orc/DebuggerSupportPlugin.h"
#include "llvm/ExecutionEngine/Orc/ELFNixPlatform.h"
#include "llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h"
#include "llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h"
@@ -779,8 +781,18 @@ Error LLJITBuilderState::prepareForConstruction() {
// If we need a process JITDylib but no setup function has been given then
// create a default one.
- if (!SetupProcessSymbolsJITDylib && LinkProcessSymbolsByDefault) {
- LLVM_DEBUG(dbgs() << "Creating default Process JD setup function\n");
+ if (!SetupProcessSymbolsJITDylib &&
+ (LinkProcessSymbolsByDefault || EnableDebuggerSupport)) {
+
+ LLVM_DEBUG({
+ dbgs() << "Creating default Process JD setup function (neeeded for";
+ if (LinkProcessSymbolsByDefault)
+ dbgs() << " <link-process-syms-by-default>";
+ if (EnableDebuggerSupport)
+ dbgs() << " <debugger-support>";
+ dbgs() << ")\n";
+ });
+
SetupProcessSymbolsJITDylib = [this](LLJIT &J) -> Expected<JITDylibSP> {
auto &JD =
J.getExecutionSession().createBareJITDylib("<Process Symbols>");
@@ -1002,6 +1014,46 @@ LLJIT::LLJIT(LLJITBuilderState &S, Error &Err)
}
}
+ if (S.EnableDebuggerSupport) {
+ if (auto *OLL = dyn_cast<ObjectLinkingLayer>(ObjLinkingLayer.get())) {
+ switch (TT.getObjectFormat()) {
+ case Triple::ELF: {
+ auto Registrar = createJITLoaderGDBRegistrar(*ES);
+ if (!Registrar) {
+ Err = Registrar.takeError();
+ return;
+ }
+ OLL->addPlugin(std::make_unique<DebugObjectManagerPlugin>(
+ *ES, std::move(*Registrar), true, true));
+ break;
+ }
+ case Triple::MachO: {
+ assert(ProcessSymbols && "ProcessSymbols JD should be available when "
+ "EnableDebuggerSupport is set");
+ auto DS =
+ GDBJITDebugInfoRegistrationPlugin::Create(*ES, *ProcessSymbols, TT);
+ if (!DS) {
+ Err = DS.takeError();
+ return;
+ }
+ OLL->addPlugin(std::move(*DS));
+ break;
+ }
+ default:
+ LLVM_DEBUG({
+ dbgs() << "Cannot enable LLJIT debugger support: "
+ << Triple::getObjectFormatTypeName(TT.getObjectFormat())
+ << " not supported.\n";
+ });
+ }
+ } else {
+ LLVM_DEBUG({
+ dbgs() << "Cannot enable LLJIT debugger support: "
+ " debugger support is only available when using JITLink.\n";
+ });
+ }
+ }
+
if (S.PrePlatformSetup) {
if (auto Err2 = S.PrePlatformSetup(*this)) {
Err = std::move(Err2);
diff --git a/llvm/tools/lli/lli.cpp b/llvm/tools/lli/lli.cpp
index abe1c7556699b54..360ffa628a47b3f 100644
--- a/llvm/tools/lli/lli.cpp
+++ b/llvm/tools/lli/lli.cpp
@@ -26,7 +26,6 @@
#include "llvm/ExecutionEngine/MCJIT.h"
#include "llvm/ExecutionEngine/ObjectCache.h"
#include "llvm/ExecutionEngine/Orc/DebugUtils.h"
-#include "llvm/ExecutionEngine/Orc/DebuggerSupport.h"
#include "llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h"
#include "llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h"
#include "llvm/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.h"
@@ -845,17 +844,6 @@ int mingw_noop_main(void) {
return 0;
}
-// Try to enable debugger support for the given instance.
-// This alway returns success, but prints a warning if it's not able to enable
-// debugger support.
-Error tryEnableDebugSupport(orc::LLJIT &J) {
- if (auto Err = enableDebuggerSupport(J)) {
- [[maybe_unused]] std::string ErrMsg = toString(std::move(Err));
- LLVM_DEBUG(dbgs() << "lli: " << ErrMsg << "\n");
- }
- return Error::success();
-}
-
int runOrcJIT(const char *ProgName) {
// Start setting up the JIT environment.
@@ -936,9 +924,6 @@ int runOrcJIT(const char *ProgName) {
});
}
- // Enable debugging of JIT'd code (only works on JITLink for ELF and MachO).
- Builder.setPrePlatformSetup(tryEnableDebugSupport);
-
// Set up LLJIT platform.
LLJITPlatform P = Platform;
if (P == LLJITPlatform::Auto)
@@ -975,6 +960,9 @@ int runOrcJIT(const char *ProgName) {
});
}
+ // Enable debugging of JIT'd code (only works on JITLink for ELF and MachO).
+ Builder.setEnableDebuggerSupport(true);
+
auto J = ExitOnErr(Builder.create());
auto *ObjLayer = &J->getObjLinkingLayer();
More information about the llvm-commits
mailing list