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(); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits