xref: /freebsd/contrib/llvm-project/llvm/lib/ExecutionEngine/JITLink/XCOFF.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
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 Andric createLinkGraphFromXCOFFObject(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 Andric void 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