diff options
| -rw-r--r-- | lld/ELF/Driver.cpp | 13 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.cpp | 11 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.h | 2 |
3 files changed, 10 insertions, 16 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index bb80bc21218..8d025922e6f 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -1342,6 +1342,11 @@ static void findKeepUniqueSections(opt::InputArgList &Args) { } } +template <class ELFT> static Symbol *addUndefined(StringRef Name) { + return Symtab->addUndefined<ELFT>(Name, STB_GLOBAL, STV_DEFAULT, 0, false, + nullptr); +} + // The --wrap option is a feature to rename symbols so that you can write // wrappers for existing functions. If you pass `-wrap=foo`, all // occurrences of symbol `foo` are resolved to `wrap_foo` (so, you are @@ -1375,8 +1380,8 @@ static std::vector<WrappedSymbol> addWrappedSymbols(opt::InputArgList &Args) { if (!Sym) continue; - Symbol *Real = Symtab->addUndefined<ELFT>(Saver.save("__real_" + Name)); - Symbol *Wrap = Symtab->addUndefined<ELFT>(Saver.save("__wrap_" + Name)); + Symbol *Real = addUndefined<ELFT>(Saver.save("__real_" + Name)); + Symbol *Wrap = addUndefined<ELFT>(Saver.save("__wrap_" + Name)); V.push_back({Sym, Real, Wrap}); // We want to tell LTO not to inline symbols to be overwritten @@ -1483,8 +1488,8 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) { // Some symbols (such as __ehdr_start) are defined lazily only when there // are undefined symbols for them, so we add these to trigger that logic. - for (StringRef Sym : Script->ReferencedSymbols) - Symtab->addUndefined<ELFT>(Sym); + for (StringRef Name : Script->ReferencedSymbols) + addUndefined<ELFT>(Name); // Handle the `--undefined <sym>` options. for (StringRef S : Config->Undefined) diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index cdcebab09b3..1e8eba0b47f 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -241,12 +241,6 @@ std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name, uint8_t Type, return {S, WasInserted}; } -template <class ELFT> Symbol *SymbolTable::addUndefined(StringRef Name) { - return addUndefined<ELFT>(Name, STB_GLOBAL, STV_DEFAULT, - /*Type*/ 0, - /*CanOmitFromDynSym*/ false, /*File*/ nullptr); -} - static uint8_t getVisibility(uint8_t StOther) { return StOther & 3; } template <class ELFT> @@ -779,11 +773,6 @@ template void SymbolTable::addFile<ELF32BE>(InputFile *); template void SymbolTable::addFile<ELF64LE>(InputFile *); template void SymbolTable::addFile<ELF64BE>(InputFile *); -template Symbol *SymbolTable::addUndefined<ELF32LE>(StringRef); -template Symbol *SymbolTable::addUndefined<ELF32BE>(StringRef); -template Symbol *SymbolTable::addUndefined<ELF64LE>(StringRef); -template Symbol *SymbolTable::addUndefined<ELF64BE>(StringRef); - template Symbol *SymbolTable::addUndefined<ELF32LE>(StringRef, uint8_t, uint8_t, uint8_t, bool, InputFile *); template Symbol *SymbolTable::addUndefined<ELF32BE>(StringRef, uint8_t, uint8_t, diff --git a/lld/ELF/SymbolTable.h b/lld/ELF/SymbolTable.h index 3626bc1b000..fc420ffbdf2 100644 --- a/lld/ELF/SymbolTable.h +++ b/lld/ELF/SymbolTable.h @@ -45,10 +45,10 @@ public: uint8_t Visibility = llvm::ELF::STV_HIDDEN, uint8_t Binding = llvm::ELF::STB_GLOBAL); - template <class ELFT> Symbol *addUndefined(StringRef Name); template <class ELFT> Symbol *addUndefined(StringRef Name, uint8_t Binding, uint8_t StOther, uint8_t Type, bool CanOmitFromDynSym, InputFile *File); + Symbol *addRegular(StringRef Name, uint8_t StOther, uint8_t Type, uint64_t Value, uint64_t Size, uint8_t Binding, SectionBase *Section, InputFile *File); |

