Files
clang-p2996/llvm/lib/ExecutionEngine/Orc/Debugging/DebuggerSupport.cpp
Lang Hames b2518971d8 Re-apply "[ORC] Add N_SO and N_OSO stabs entries to MachO debug..." with fixes.
This re-applies db51e57289, which was reverted in 05b1a2cb3e due to bot
failures. The DebuggerSupportPlugin now depends on DWARF, so it has been moved
to the new OrcDebugging library (as has the enableDebuggerSupport API).
2023-09-28 21:34:14 -07:00

62 lines
2.2 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/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), 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