}
void LinkerDriver::main(ArrayRef<const char *> ArgsArr) {
- initSymbols();
-
opt::InputArgList Args = parseArgs(&Alloc, ArgsArr.slice(1));
if (Args.hasArg(OPT_help)) {
printHelp(ArgsArr[0]);
}
template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
+ initSymbols<ELFT>();
// For LTO
InitializeAllTargets();
InitializeAllTargetMCs();
return createObjectFile(MBRef, File->getName());
}
-template <class ELFT> static void doInitSymbols() {
+template <class ELFT> void elf::initSymbols() {
ElfSym<ELFT>::Etext.setBinding(STB_GLOBAL);
ElfSym<ELFT>::Edata.setBinding(STB_GLOBAL);
ElfSym<ELFT>::End.setBinding(STB_GLOBAL);
ElfSym<ELFT>::Ignored.setVisibility(STV_HIDDEN);
}
-void elf::initSymbols() {
- doInitSymbols<ELF32LE>();
- doInitSymbols<ELF32BE>();
- doInitSymbols<ELF64LE>();
- doInitSymbols<ELF64BE>();
-}
-
// Returns the demangled C++ symbol name for Name.
std::string elf::demangle(StringRef Name) {
#if !defined(HAVE_CXXABI_H)
template class elf::DefinedSynthetic<ELF32BE>;
template class elf::DefinedSynthetic<ELF64LE>;
template class elf::DefinedSynthetic<ELF64BE>;
+
+template void elf::initSymbols<ELF32LE>();
+template void elf::initSymbols<ELF32BE>();
+template void elf::initSymbols<ELF64LE>();
+template void elf::initSymbols<ELF64BE>();
template <class ELFT> class SharedFile;
// Initializes global objects defined in this file.
-// Called at the beginning of main().
-void initSymbols();
+template <class ELFT> void initSymbols();
// Returns a demangled C++ symbol name. If Name is not a mangled
// name or the system does not provide __cxa_demangle function,