From 6d500da3cc6b7ccaa7bf842fba83898df823496b Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 20 Mar 2014 06:57:28 +0000 Subject: [PATCH] Revert "[ELF] Order DT_NEEDED entries by command line order." This reverts commit r204291 because it broke buildbots. llvm-svn: 204317 --- lld/lib/ReaderWriter/ELF/OutputELFWriter.h | 27 ++++----------------- lld/test/elf/DT_NEEDED-order.test | 14 ----------- lld/test/elf/Inputs/use-shared.c | 3 +-- lld/test/elf/Inputs/use-shared2.x86-64 | Bin 1536 -> 0 bytes 4 files changed, 6 insertions(+), 38 deletions(-) delete mode 100644 lld/test/elf/DT_NEEDED-order.test delete mode 100644 lld/test/elf/Inputs/use-shared2.x86-64 diff --git a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h index 8f116c8f1be8..1d734808a306 100644 --- a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h +++ b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h @@ -18,7 +18,7 @@ #include "lld/ReaderWriter/ELFLinkingContext.h" #include "lld/ReaderWriter/Writer.h" -#include +#include "llvm/ADT/StringSet.h" namespace lld { namespace elf { @@ -129,6 +129,7 @@ protected: LLD_UNIQUE_BUMP_PTR(DynamicSymbolTable) _dynamicSymbolTable; LLD_UNIQUE_BUMP_PTR(StringTable) _dynamicStringTable; LLD_UNIQUE_BUMP_PTR(HashSection) _hashTable; + llvm::StringSet<> _soNeeded; /// @} }; @@ -164,12 +165,6 @@ void OutputELFWriter::buildStaticSymbolTable(const File &file) { _symtab->addSymbol(a, ELF::SHN_UNDEF); } -struct StringRefFilePairHash { - std::size_t operator()(const std::pair &v) const { - return llvm::hash_combine(v.first, v.second); - } -}; - template void OutputELFWriter::buildDynamicSymbolTable(const File &file) { ScopedTask task(getDefaultDomain(), "buildDynamicSymbolTable"); @@ -181,26 +176,14 @@ void OutputELFWriter::buildDynamicSymbolTable(const File &file) { _dynamicSymbolTable->addSymbol(atom->_atom, section->ordinal(), atom->_virtualAddr, atom); } - std::unordered_set, StringRefFilePairHash> - soNeeded; for (const auto sla : file.sharedLibrary()) { _dynamicSymbolTable->addSymbol(sla, ELF::SHN_UNDEF); - soNeeded.insert(std::make_pair(sla->loadName(), &sla->file())); + _soNeeded.insert(sla->loadName()); } - // Sort needed entries by command line order. This is needed so the correct - // dynamic symbol is loaded in cases where multiple dynamic libraries define - // the same symbol. - std::vector> sortedSoNeeded( - soNeeded.begin(), soNeeded.end()); - std::sort(sortedSoNeeded.begin(), sortedSoNeeded.end(), - [](const std::pair &a, - const std::pair &b) { - return a.second->ordinal() < b.second->ordinal(); - }); - for (auto const &lib : sortedSoNeeded) { + for (const auto &loadName : _soNeeded) { Elf_Dyn dyn; dyn.d_tag = DT_NEEDED; - dyn.d_un.d_val = _dynamicStringTable->addString(lib.first); + dyn.d_un.d_val = _dynamicStringTable->addString(loadName.getKey()); _dynamicTable->addEntry(dyn); } const auto &rpathList = _context.getRpathList(); diff --git a/lld/test/elf/DT_NEEDED-order.test b/lld/test/elf/DT_NEEDED-order.test deleted file mode 100644 index 631bfc0ea0c2..000000000000 --- a/lld/test/elf/DT_NEEDED-order.test +++ /dev/null @@ -1,14 +0,0 @@ -RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared2.x86-64 \ -RUN: %p/Inputs/shared.so-x86-64 %p/Inputs/libundef.so -o %t -e main \ -RUN: --noinhibit-exec -RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/use-shared2.x86-64 \ -RUN: %p/Inputs/libundef.so %p/Inputs/shared.so-x86-64 -o %t2 -e main \ -RUN: --noinhibit-exec -RUN: llvm-readobj -dynamic-table %t | FileCheck --check-prefix=ORDER1 %s -RUN: llvm-readobj -dynamic-table %t2 | FileCheck --check-prefix=ORDER2 %s - -ORDER1: NEEDED SharedLibrary (shared.so -ORDER1: NEEDED SharedLibrary (libundef.so - -ORDER2: NEEDED SharedLibrary (libundef.so -ORDER2: NEEDED SharedLibrary (shared.so diff --git a/lld/test/elf/Inputs/use-shared.c b/lld/test/elf/Inputs/use-shared.c index cac8a19bcf93..b370eaa4fac2 100644 --- a/lld/test/elf/Inputs/use-shared.c +++ b/lld/test/elf/Inputs/use-shared.c @@ -1,8 +1,7 @@ extern int i; -extern long long x __attribute__((weak)); void foo(); int main() { foo(); - return i + x; + return i; } diff --git a/lld/test/elf/Inputs/use-shared2.x86-64 b/lld/test/elf/Inputs/use-shared2.x86-64 deleted file mode 100644 index 0c9c62b1db1b1def7c2b92f56a4efe3e93275f78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmbtT&2G~`5FR&$wh&N+KtjO5XQbF5gj6n7Qj~;>h*q>5KuFfs*^q#LBJZ{eTzG(9 zc!WL*5--y$cce12-bw5wTwtX2H}lQR&UkkBYj4c8PC?m(jvFe~PU#cYSFtv~x2~oU3K7AyS=9Yu~kaX!*qf zTK>I77u;HRFo5>_*Zd~tQeTg7RfX&Gd9#mVNf_@{bmOp}S=FfMoX1p%3UO;pSmb=S zFP8WcJw+=rq>uhN?7N=MDHdb~*{jHiX@wUnOHpsiLiR;n{ z)MW?FTa|wJz0q7-^-yEcyjJmpzwmp=`?&s)FwJy$P~;zFtW}sKr)hguT49nWqfkqw zLz#@jy=-=Z5hqHv)kG9>6vU8