xref: /freebsd/contrib/llvm-project/llvm/lib/ExecutionEngine/JITLink/XCOFF.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===-------------- XCOFF.cpp - JIT linker function for XCOFF -------------===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // XCOFF jit-link function.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/ExecutionEngine/JITLink/XCOFF.h"
14 #include "llvm/ExecutionEngine/JITLink/XCOFF_ppc64.h"
15 #include "llvm/Object/XCOFFObjectFile.h"
16 
17 using namespace llvm;
18 
19 #define DEBUG_TYPE "jitlink"
20 
21 namespace llvm {
22 namespace jitlink {
23 
24 Expected<std::unique_ptr<LinkGraph>>
createLinkGraphFromXCOFFObject(MemoryBufferRef ObjectBuffer,std::shared_ptr<orc::SymbolStringPool> SSP)25 createLinkGraphFromXCOFFObject(MemoryBufferRef ObjectBuffer,
26                                std::shared_ptr<orc::SymbolStringPool> SSP) {
27   // Check magic
28   file_magic Magic = identify_magic(ObjectBuffer.getBuffer());
29   if (Magic != file_magic::xcoff_object_64)
30     return make_error<JITLinkError>("Invalid XCOFF 64 Header");
31 
32   // TODO: See if we need to add more checks
33   //
34   return createLinkGraphFromXCOFFObject_ppc64(ObjectBuffer, std::move(SSP));
35 }
36 
link_XCOFF(std::unique_ptr<LinkGraph> G,std::unique_ptr<JITLinkContext> Ctx)37 void link_XCOFF(std::unique_ptr<LinkGraph> G,
38                 std::unique_ptr<JITLinkContext> Ctx) {
39   link_XCOFF_ppc64(std::move(G), std::move(Ctx));
40 }
41 
42 } // namespace jitlink
43 } // namespace llvm
44