• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/Target/ELFEmulation.h>
13 #include <mcld/Support/TargetRegistry.h>
14 
15 namespace mcld {
16 
MCLDEmulateHexagonELF(LinkerScript & pScript,LinkerConfig & pConfig)17 static bool MCLDEmulateHexagonELF(LinkerScript& pScript, LinkerConfig& pConfig)
18 {
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 //===----------------------------------------------------------------------===//
emulateHexagonLD(LinkerScript & pScript,LinkerConfig & pConfig)41 bool emulateHexagonLD(LinkerScript& pScript, LinkerConfig& pConfig)
42 {
43   if (pConfig.targets().triple().isOSDarwin()) {
44     assert(0 && "MachO linker has not supported yet");
45     return false;
46   }
47   if (pConfig.targets().triple().isOSWindows()) {
48     assert(0 && "COFF linker has not supported yet");
49     return false;
50   }
51 
52   return MCLDEmulateHexagonELF(pScript, pConfig);
53 }
54 
55 } // namespace of mcld
56 
57 //===----------------------------------------------------------------------===//
58 // HexagonEmulation
59 //===----------------------------------------------------------------------===//
MCLDInitializeHexagonEmulation()60 extern "C" void MCLDInitializeHexagonEmulation() {
61   // Register the emulation
62   mcld::TargetRegistry::RegisterEmulation(mcld::TheHexagonTarget,
63                                           mcld::emulateHexagonLD);
64 }
65 
66