1551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===- AArch64MCLinker.cpp-------------------------------------------------===//
2551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
3551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//                     The MCLinker Project
4551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
5551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// This file is distributed under the University of Illinois Open Source
6551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// License. See LICENSE.TXT for details.
7551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//
8551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
9551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include "AArch64ELFMCLinker.h"
10551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
11551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include "AArch64.h"
12551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include <llvm/ADT/Triple.h>
13551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include <mcld/Module.h>
14551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines#include <mcld/Support/TargetRegistry.h>
15551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
16551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesusing namespace mcld;
17551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
18551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesnamespace mcld {
19551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
20551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// createAArch64MCLinker - the help function to create corresponding
21551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// AArch64MCLinker
22551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
23551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen HinesMCLinker* createAArch64MCLinker(const std::string& pTriple,
24551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines                                LinkerConfig& pConfig,
25551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines                                mcld::Module& pModule,
26551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines                                FileHandle& pFileHandle)
27551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines{
28551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  llvm::Triple theTriple(pTriple);
29551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  if (theTriple.isOSDarwin()) {
30551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines    assert(0 && "MachO linker has not supported yet");
31551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines    return NULL;
32551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  }
33551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  if (theTriple.isOSWindows()) {
34551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines    assert(0 && "COFF linker has not supported yet");
35551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines    return NULL;
36551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  }
37551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
38551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  return new AArch64ELFMCLinker(pConfig, pModule, pFileHandle);
39551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines}
40551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
41551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines} // namespace of mcld
42551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
43551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
44551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines// AArch64MCLinker
45551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines//===----------------------------------------------------------------------===//
46551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesextern "C" void MCLDInitializeAArch64MCLinker() {
47551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  // Register the linker frontend
48551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines  mcld::TargetRegistry::RegisterMCLinker(TheAArch64Target,
49551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines                                         createAArch64MCLinker);
50551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines}
51551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines
52