Path: blob/main/contrib/llvm-project/llvm/lib/ExecutionEngine/JITLink/XCOFFLinkGraphBuilder.h
213799 views
//===----- XCOFFLinkGraphBuilder.h - XCOFF LinkGraph builder ----*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// Generic XCOFF LinkGraph building code.9//10//===----------------------------------------------------------------------===//1112#ifndef LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H13#define LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H1415#include "llvm/ExecutionEngine/JITLink/JITLink.h"16#include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"17#include "llvm/Object/ObjectFile.h"18#include "llvm/Object/XCOFFObjectFile.h"19#include "llvm/TargetParser/SubtargetFeature.h"20#include <memory>2122namespace llvm {23namespace jitlink {2425class XCOFFLinkGraphBuilder {26public:27virtual ~XCOFFLinkGraphBuilder() = default;28Expected<std::unique_ptr<LinkGraph>> buildGraph();2930public:31XCOFFLinkGraphBuilder(const object::XCOFFObjectFile &Obj,32std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,33SubtargetFeatures Features,34LinkGraph::GetEdgeKindNameFunction GetEdgeKindName);35LinkGraph &getGraph() const { return *G; }36const object::XCOFFObjectFile &getObject() const { return Obj; }3738private:39Error processSections();40Error processCsectsAndSymbols();41Error processRelocations();4243private:44const object::XCOFFObjectFile &Obj;45std::unique_ptr<LinkGraph> G;4647Section *UndefSection;4849struct SectionEntry {50jitlink::Section *Section;51object::SectionRef SectionData;52};5354DenseMap<uint16_t, SectionEntry> SectionTable;55DenseMap<uint32_t, Block *> CsectTable;56DenseMap<uint32_t, Symbol *> SymbolIndexTable;57};5859} // namespace jitlink60} // namespace llvm6162#endif // LIB_EXECUTIONENGINE_JITLINK_XCOFFLINKGRAPHBUILDER_H636465