aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp')
-rw-r--r--contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp
new file mode 100644
index 000000000000..1668473c0eb4
--- /dev/null
+++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp
@@ -0,0 +1,61 @@
+//===------ 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/Debugging/DebuggerSupport.h"
+#include "llvm/ExecutionEngine/Orc/DebugObjectManagerPlugin.h"
+#include "llvm/ExecutionEngine/Orc/Debugging/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), false, 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