xref: /freebsd/contrib/llvm-project/llvm/lib/ExecutionEngine/JITLink/XCOFFLinkGraphBuilder.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===----- XCOFFLinkGraphBuilder.h - XCOFF LinkGraph builder ----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Generic XCOFF LinkGraph building code.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H
14 #define LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H
15 
16 #include "llvm/ExecutionEngine/JITLink/JITLink.h"
17 #include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
18 #include "llvm/Object/ObjectFile.h"
19 #include "llvm/Object/XCOFFObjectFile.h"
20 #include "llvm/TargetParser/SubtargetFeature.h"
21 #include <memory>
22 
23 namespace llvm {
24 namespace jitlink {
25 
26 class XCOFFLinkGraphBuilder {
27 public:
28   virtual ~XCOFFLinkGraphBuilder() = default;
29   Expected<std::unique_ptr<LinkGraph>> buildGraph();
30 
31 public:
32   XCOFFLinkGraphBuilder(const object::XCOFFObjectFile &Obj,
33                         std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
34                         SubtargetFeatures Features,
35                         LinkGraph::GetEdgeKindNameFunction GetEdgeKindName);
getGraph()36   LinkGraph &getGraph() const { return *G; }
getObject()37   const object::XCOFFObjectFile &getObject() const { return Obj; }
38 
39 private:
40   Error processSections();
41   Error processCsectsAndSymbols();
42   Error processRelocations();
43 
44 private:
45   const object::XCOFFObjectFile &Obj;
46   std::unique_ptr<LinkGraph> G;
47 
48   Section *UndefSection;
49 
50   struct SectionEntry {
51     jitlink::Section *Section;
52     object::SectionRef SectionData;
53   };
54 
55   DenseMap<uint16_t, SectionEntry> SectionTable;
56   DenseMap<uint32_t, Block *> CsectTable;
57   DenseMap<uint32_t, Symbol *> SymbolIndexTable;
58 };
59 
60 } // namespace jitlink
61 } // namespace llvm
62 
63 #endif // LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H
64