xref: /llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Debugging/DebugInfoSupport.h (revision 7ddf7d87831a90164fd125589850fcf48d24f33f)
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