static bool MCLDEmulateARMELF(LinkerConfig& pConfig) { if (!MCLDEmulateELF(pConfig)) return false; // set up bitclass and endian pConfig.targets().setEndian(TargetOptions::Little); pConfig.targets().setBitClass(32); // set up target-dependent constraints of attributes pConfig.attribute().constraint().enableWholeArchive(); pConfig.attribute().constraint().enableAsNeeded(); pConfig.attribute().constraint().setSharedSystem(); // set up the predefined attributes pConfig.attribute().predefined().unsetWholeArchive(); pConfig.attribute().predefined().unsetAsNeeded(); pConfig.attribute().predefined().setDynamic(); // set up section map if (pConfig.codeGenType() != LinkerConfig::Object) { bool exist = false; pConfig.scripts().sectionMap().append(".ARM.exidx", ".ARM.exidx", exist); pConfig.scripts().sectionMap().append(".ARM.extab", ".ARM.extab", exist); pConfig.scripts().sectionMap().append(".ARM.attributes", ".ARM.attributes", exist); } return true; }
static bool MCLDEmulateX86ELF(LinkerScript& pScript, LinkerConfig& pConfig) { if (!MCLDEmulateELF(pScript, pConfig)) return false; // set up bitclass and endian pConfig.targets().setEndian(TargetOptions::Little); unsigned int bitclass; Triple::ArchType arch = pConfig.targets().triple().getArch(); assert (arch == Triple::x86 || arch == Triple::x86_64); if (arch == Triple::x86 || pConfig.targets().triple().getEnvironment() == Triple::GNUX32) { bitclass = 32; } else { bitclass = 64; } pConfig.targets().setBitClass(bitclass); // set up target-dependent constraints of attributes pConfig.attribute().constraint().enableWholeArchive(); pConfig.attribute().constraint().enableAsNeeded(); pConfig.attribute().constraint().setSharedSystem(); // set up the predefined attributes pConfig.attribute().predefined().unsetWholeArchive(); pConfig.attribute().predefined().unsetAsNeeded(); pConfig.attribute().predefined().setDynamic(); return true; }
static bool MCLDEmulateHexagonELF(LinkerConfig& pConfig) { if (!MCLDEmulateELF(pConfig)) return false; // set up bitclass and endian pConfig.targets().setEndian(TargetOptions::Little); pConfig.targets().setBitClass(32); // set up target-dependent constraints of attributes pConfig.attribute().constraint().enableWholeArchive(); pConfig.attribute().constraint().enableAsNeeded(); pConfig.attribute().constraint().setSharedSystem(); // set up the predefined attributes pConfig.attribute().predefined().unsetWholeArchive(); pConfig.attribute().predefined().unsetAsNeeded(); pConfig.attribute().predefined().setDynamic(); return true; }