1*7ddf7d87SPrem Chintalapudi //===--- DebugInfoSupport.h ---- Utils for debug info support ---*- C++ -*-===// 2*7ddf7d87SPrem Chintalapudi // 3*7ddf7d87SPrem Chintalapudi // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7ddf7d87SPrem Chintalapudi // See https://llvm.org/LICENSE.txt for license information. 5*7ddf7d87SPrem Chintalapudi // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7ddf7d87SPrem Chintalapudi // 7*7ddf7d87SPrem Chintalapudi //===----------------------------------------------------------------------===// 8*7ddf7d87SPrem Chintalapudi // 9*7ddf7d87SPrem Chintalapudi // Utilities to preserve and parse debug info from LinkGraphs. 10*7ddf7d87SPrem Chintalapudi // 11*7ddf7d87SPrem Chintalapudi //===----------------------------------------------------------------------===// 12*7ddf7d87SPrem Chintalapudi 13*7ddf7d87SPrem Chintalapudi #ifndef LLVM_EXECUTIONENGINE_ORC_DEBUGINFOSUPPORT_H 14*7ddf7d87SPrem Chintalapudi #define LLVM_EXECUTIONENGINE_ORC_DEBUGINFOSUPPORT_H 15*7ddf7d87SPrem Chintalapudi 16*7ddf7d87SPrem Chintalapudi #include "llvm/ExecutionEngine/Orc/Core.h" 17*7ddf7d87SPrem Chintalapudi #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h" 18*7ddf7d87SPrem Chintalapudi 19*7ddf7d87SPrem Chintalapudi #include "llvm/DebugInfo/DWARF/DWARFContext.h" 20*7ddf7d87SPrem Chintalapudi 21*7ddf7d87SPrem Chintalapudi namespace llvm { 22*7ddf7d87SPrem Chintalapudi 23*7ddf7d87SPrem Chintalapudi namespace orc { 24*7ddf7d87SPrem Chintalapudi 25*7ddf7d87SPrem Chintalapudi Error preserveDebugSections(jitlink::LinkGraph &G); 26*7ddf7d87SPrem Chintalapudi // The backing stringmap is also returned, for memory liftime management. 27*7ddf7d87SPrem Chintalapudi Expected<std::pair<std::unique_ptr<DWARFContext>, 28*7ddf7d87SPrem Chintalapudi StringMap<std::unique_ptr<MemoryBuffer>>>> 29*7ddf7d87SPrem Chintalapudi createDWARFContext(jitlink::LinkGraph &G); 30*7ddf7d87SPrem Chintalapudi 31*7ddf7d87SPrem Chintalapudi // Thin wrapper around preserveDebugSections to be used as a standalone plugin. 32*7ddf7d87SPrem Chintalapudi class DebugInfoPreservationPlugin : public ObjectLinkingLayer::Plugin { 33*7ddf7d87SPrem Chintalapudi public: modifyPassConfig(MaterializationResponsibility & MR,jitlink::LinkGraph & LG,jitlink::PassConfiguration & PassConfig)34*7ddf7d87SPrem Chintalapudi void modifyPassConfig(MaterializationResponsibility &MR, 35*7ddf7d87SPrem Chintalapudi jitlink::LinkGraph &LG, 36*7ddf7d87SPrem Chintalapudi jitlink::PassConfiguration &PassConfig) override { 37*7ddf7d87SPrem Chintalapudi PassConfig.PrePrunePasses.push_back(preserveDebugSections); 38*7ddf7d87SPrem Chintalapudi } 39*7ddf7d87SPrem Chintalapudi notifyRemovingResources(JITDylib & JD,ResourceKey K)40*7ddf7d87SPrem Chintalapudi Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override { 41*7ddf7d87SPrem Chintalapudi // Do nothing. 42*7ddf7d87SPrem Chintalapudi return Error::success(); 43*7ddf7d87SPrem Chintalapudi } notifyFailed(MaterializationResponsibility & MR)44*7ddf7d87SPrem Chintalapudi Error notifyFailed(MaterializationResponsibility &MR) override { 45*7ddf7d87SPrem Chintalapudi // Do nothing. 46*7ddf7d87SPrem Chintalapudi return Error::success(); 47*7ddf7d87SPrem Chintalapudi } notifyTransferringResources(JITDylib & JD,ResourceKey DstKey,ResourceKey SrcKey)48*7ddf7d87SPrem Chintalapudi void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey, 49*7ddf7d87SPrem Chintalapudi ResourceKey SrcKey) override { 50*7ddf7d87SPrem Chintalapudi // Do nothing. 51*7ddf7d87SPrem Chintalapudi } 52*7ddf7d87SPrem Chintalapudi Create()53*7ddf7d87SPrem Chintalapudi static Expected<std::unique_ptr<DebugInfoPreservationPlugin>> Create() { 54*7ddf7d87SPrem Chintalapudi return std::make_unique<DebugInfoPreservationPlugin>(); 55*7ddf7d87SPrem Chintalapudi } 56*7ddf7d87SPrem Chintalapudi }; 57*7ddf7d87SPrem Chintalapudi 58*7ddf7d87SPrem Chintalapudi } // namespace orc 59*7ddf7d87SPrem Chintalapudi 60*7ddf7d87SPrem Chintalapudi } // namespace llvm 61*7ddf7d87SPrem Chintalapudi 62*7ddf7d87SPrem Chintalapudi #endif