diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-05-28 21:59:34 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-05-28 21:59:34 +0000 |
commit | bb35ebd189a01e06c450a8e0fb29ad441d7b2102 (patch) | |
tree | 27467f31f068f4032739c3e7e3d347ada1f4f866 /llvm/lib/MC/ELFObjectWriter.cpp | |
parent | cc3489f6622aa1bab13605d6f4d22f4faa15e0a6 (diff) | |
download | llvm-bb35ebd189a01e06c450a8e0fb29ad441d7b2102.zip llvm-bb35ebd189a01e06c450a8e0fb29ad441d7b2102.tar.gz llvm-bb35ebd189a01e06c450a8e0fb29ad441d7b2102.tar.bz2 |
Don't special case undefined symbol when deciding the symbol order.
ELF has no restrictions on where undefined symbols go relative to other defined
symbols. In fact, gas just sorts them together. Do the same.
This was there since r111174 probably just because the MachO writer has it.
llvm-svn: 238513
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 39efaf1..9bfe679 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -805,7 +805,6 @@ void ELFObjectWriter::computeSymbolTable( std::vector<ELFSymbolData> LocalSymbolData; std::vector<ELFSymbolData> ExternalSymbolData; - std::vector<ELFSymbolData> UndefinedSymbolData; // Add the data for the symbols. bool HasLargeSectionIndex = false; @@ -902,7 +901,7 @@ void ELFObjectWriter::computeSymbolTable( MSD.Name = StrTabBuilder.add(Name); if (MSD.SectionIndex == ELF::SHN_UNDEF) - UndefinedSymbolData.push_back(MSD); + ExternalSymbolData.push_back(MSD); else if (Local) LocalSymbolData.push_back(MSD); else @@ -930,7 +929,6 @@ void ELFObjectWriter::computeSymbolTable( // Symbols are required to be in lexicographic order. array_pod_sort(LocalSymbolData.begin(), LocalSymbolData.end()); array_pod_sort(ExternalSymbolData.begin(), ExternalSymbolData.end()); - array_pod_sort(UndefinedSymbolData.begin(), UndefinedSymbolData.end()); // Set the symbol indices. Local symbols must come before all other // symbols with non-local bindings. @@ -954,12 +952,6 @@ void ELFObjectWriter::computeSymbolTable( writeSymbol(Writer, StringIndex, MSD, Layout); assert(MCELF::GetBinding(MSD.Symbol->getData()) != ELF::STB_LOCAL); } - for (ELFSymbolData &MSD : UndefinedSymbolData) { - unsigned StringIndex = StrTabBuilder.getOffset(MSD.Name); - MSD.Symbol->setIndex(Index++); - writeSymbol(Writer, StringIndex, MSD, Layout); - assert(MCELF::GetBinding(MSD.Symbol->getData()) != ELF::STB_LOCAL); - } uint64_t SecEnd = OS.tell(); SectionOffsets[SymtabSection] = std::make_pair(SecStart, SecEnd); |