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