64 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// Generic XCOFF LinkGraph building code.10//11//===----------------------------------------------------------------------===//12 13#ifndef LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H14#define LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H15 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 23namespace llvm {24namespace jitlink {25 26class XCOFFLinkGraphBuilder {27public:28 virtual ~XCOFFLinkGraphBuilder() = default;29 Expected<std::unique_ptr<LinkGraph>> buildGraph();30 31public:32 XCOFFLinkGraphBuilder(const object::XCOFFObjectFile &Obj,33 std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,34 SubtargetFeatures Features,35 LinkGraph::GetEdgeKindNameFunction GetEdgeKindName);36 LinkGraph &getGraph() const { return *G; }37 const object::XCOFFObjectFile &getObject() const { return Obj; }38 39private:40 Error processSections();41 Error processCsectsAndSymbols();42 Error processRelocations();43 44private: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 jitlink61} // namespace llvm62 63#endif // LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H64