//===----- XCOFFLinkGraphBuilder.h - XCOFF LinkGraph builder ----*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// // // Generic XCOFF LinkGraph building code. // //===----------------------------------------------------------------------===// #ifndef LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H #define LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H #include "llvm/ExecutionEngine/JITLink/JITLink.h" #include "llvm/ExecutionEngine/Orc/SymbolStringPool.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/XCOFFObjectFile.h" #include "llvm/TargetParser/SubtargetFeature.h" #include namespace llvm { namespace jitlink { class XCOFFLinkGraphBuilder { public: virtual ~XCOFFLinkGraphBuilder() = default; Expected> buildGraph(); public: XCOFFLinkGraphBuilder(const object::XCOFFObjectFile &Obj, std::shared_ptr SSP, Triple TT, SubtargetFeatures Features, LinkGraph::GetEdgeKindNameFunction GetEdgeKindName); LinkGraph &getGraph() const { return *G; } const object::XCOFFObjectFile &getObject() const { return Obj; } private: Error processSections(); Error processCsectsAndSymbols(); Error processRelocations(); private: const object::XCOFFObjectFile &Obj; std::unique_ptr G; Section *UndefSection; struct SectionEntry { jitlink::Section *Section; object::SectionRef SectionData; }; DenseMap SectionTable; DenseMap CsectTable; DenseMap SymbolIndexTable; }; } // namespace jitlink } // namespace llvm #endif // LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H