16f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===- HexagonMCLinker.cpp ------------------------------------------------===// 26f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 36f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// The MCLinker Project 46f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 56f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// This file is distributed under the University of Illinois Open Source 66f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// License. See LICENSE.TXT for details. 76f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 86f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 96f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "Hexagon.h" 106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "HexagonELFMCLinker.h" 116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Module.h> 126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <mcld/Support/TargetRegistry.h> 136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <llvm/ADT/Triple.h> 146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesusing namespace mcld; 166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesnamespace mcld { 186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/// createHexagonMCLinker - the help funtion to create corresponding 206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/// HexagonMCLinker 216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesMCLinker* createHexagonMCLinker(const std::string &pTriple, 226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines LinkerConfig& pConfig, 236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines mcld::Module& pModule, 24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines FileHandle& pFileHandle) 256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines llvm::Triple theTriple(pTriple); 276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (theTriple.isOSDarwin()) { 286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines assert(0 && "MachO linker has not supported yet"); 296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return NULL; 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (theTriple.isOSWindows()) { 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines assert(0 && "COFF linker has not supported yet"); 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return NULL; 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (theTriple.isArch32Bit()) 37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return new HexagonELFMCLinker(pConfig, pModule, pFileHandle); 386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines assert(0 && "Hexagon_64 has not supported yet"); 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return NULL; 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} // namespace of mcld 446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// HexagonMCLinker 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesextern "C" void MCLDInitializeHexagonMCLinker() { 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines // Register the linker frontend 506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines mcld::TargetRegistry::RegisterMCLinker(TheHexagonTarget, 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines createHexagonMCLinker); 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 54