1*700637cbSDimitry Andric //===-------------- XCOFF.cpp - JIT linker function for XCOFF -------------===// 2*700637cbSDimitry Andric // 3*700637cbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*700637cbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*700637cbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*700637cbSDimitry Andric // 7*700637cbSDimitry Andric //===----------------------------------------------------------------------===// 8*700637cbSDimitry Andric // 9*700637cbSDimitry Andric // XCOFF jit-link function. 10*700637cbSDimitry Andric // 11*700637cbSDimitry Andric //===----------------------------------------------------------------------===// 12*700637cbSDimitry Andric 13*700637cbSDimitry Andric #include "llvm/ExecutionEngine/JITLink/XCOFF.h" 14*700637cbSDimitry Andric #include "llvm/ExecutionEngine/JITLink/XCOFF_ppc64.h" 15*700637cbSDimitry Andric #include "llvm/Object/XCOFFObjectFile.h" 16*700637cbSDimitry Andric 17*700637cbSDimitry Andric using namespace llvm; 18*700637cbSDimitry Andric 19*700637cbSDimitry Andric #define DEBUG_TYPE "jitlink" 20*700637cbSDimitry Andric 21*700637cbSDimitry Andric namespace llvm { 22*700637cbSDimitry Andric namespace jitlink { 23*700637cbSDimitry Andric 24*700637cbSDimitry Andric Expected<std::unique_ptr<LinkGraph>> createLinkGraphFromXCOFFObject(MemoryBufferRef ObjectBuffer,std::shared_ptr<orc::SymbolStringPool> SSP)25*700637cbSDimitry AndriccreateLinkGraphFromXCOFFObject(MemoryBufferRef ObjectBuffer, 26*700637cbSDimitry Andric std::shared_ptr<orc::SymbolStringPool> SSP) { 27*700637cbSDimitry Andric // Check magic 28*700637cbSDimitry Andric file_magic Magic = identify_magic(ObjectBuffer.getBuffer()); 29*700637cbSDimitry Andric if (Magic != file_magic::xcoff_object_64) 30*700637cbSDimitry Andric return make_error<JITLinkError>("Invalid XCOFF 64 Header"); 31*700637cbSDimitry Andric 32*700637cbSDimitry Andric // TODO: See if we need to add more checks 33*700637cbSDimitry Andric // 34*700637cbSDimitry Andric return createLinkGraphFromXCOFFObject_ppc64(ObjectBuffer, std::move(SSP)); 35*700637cbSDimitry Andric } 36*700637cbSDimitry Andric link_XCOFF(std::unique_ptr<LinkGraph> G,std::unique_ptr<JITLinkContext> Ctx)37*700637cbSDimitry Andricvoid link_XCOFF(std::unique_ptr<LinkGraph> G, 38*700637cbSDimitry Andric std::unique_ptr<JITLinkContext> Ctx) { 39*700637cbSDimitry Andric link_XCOFF_ppc64(std::move(G), std::move(Ctx)); 40*700637cbSDimitry Andric } 41*700637cbSDimitry Andric 42*700637cbSDimitry Andric } // namespace jitlink 43*700637cbSDimitry Andric } // namespace llvm 44