1//===- HexagonEmulation.cpp -----------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#include "Hexagon.h" 10#include "mcld/LinkerScript.h" 11#include "mcld/LinkerConfig.h" 12#include "mcld/Support/TargetRegistry.h" 13#include "mcld/Target/ELFEmulation.h" 14 15namespace mcld { 16 17static bool MCLDEmulateHexagonELF(LinkerScript& pScript, 18 LinkerConfig& pConfig) { 19 if (!MCLDEmulateELF(pScript, pConfig)) 20 return false; 21 22 // set up bitclass and endian 23 pConfig.targets().setEndian(TargetOptions::Little); 24 pConfig.targets().setBitClass(32); 25 26 // set up target-dependent constraints of attributes 27 pConfig.attribute().constraint().enableWholeArchive(); 28 pConfig.attribute().constraint().enableAsNeeded(); 29 pConfig.attribute().constraint().setSharedSystem(); 30 31 // set up the predefined attributes 32 pConfig.attribute().predefined().unsetWholeArchive(); 33 pConfig.attribute().predefined().unsetAsNeeded(); 34 pConfig.attribute().predefined().setDynamic(); 35 return true; 36} 37 38//===----------------------------------------------------------------------===// 39// emulateHexagonLD - the help function to emulate Hexagon ld 40//===----------------------------------------------------------------------===// 41bool emulateHexagonLD(LinkerScript& pScript, LinkerConfig& pConfig) { 42 if (pConfig.targets().triple().isOSDarwin()) { 43 assert(0 && "MachO linker has not supported yet"); 44 return false; 45 } 46 if (pConfig.targets().triple().isOSWindows()) { 47 assert(0 && "COFF linker has not supported yet"); 48 return false; 49 } 50 51 return MCLDEmulateHexagonELF(pScript, pConfig); 52} 53 54} // namespace mcld 55 56//===----------------------------------------------------------------------===// 57// HexagonEmulation 58//===----------------------------------------------------------------------===// 59extern "C" void MCLDInitializeHexagonEmulation() { 60 // Register the emulation 61 mcld::TargetRegistry::RegisterEmulation(mcld::TheHexagonTarget, 62 mcld::emulateHexagonLD); 63} 64