Stefan Gränitz 3ce893f834
[ORC] Move DebugObjectManagerPlugin into Debugging/ELFDebugObjectPlugin (NFC) (#168343)
In 4 years the plugin wasn't adapted to other object formats. This patch
makes it specific for ELF, which will allow to remove some abstractions
down the line. It also moves the plugin from LLVMOrcJIT into
LLVMOrcDebugging, which didn't exist back then.
2025-11-18 11:44:00 +01:00

60 lines
2.1 KiB
C++

//===------ 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/Debugging/DebuggerSupportPlugin.h"
#include "llvm/ExecutionEngine/Orc/Debugging/ELFDebugObjectPlugin.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: {
Error TargetSymErr = Error::success();
ObjLinkingLayer->addPlugin(
std::make_unique<ELFDebugObjectPlugin>(ES, false, true, TargetSymErr));
return TargetSymErr;
}
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