[llvm] r316813 - Revert "Add support for writing 64-bit symbol tables for archives when offsets become too large for 32-bit"
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 27 17:03:59 PDT 2017
It is common practice to say in the commit message why something is
being reverted.
Cheers,
Rafael
Jake Ehrlich via llvm-commits <llvm-commits at lists.llvm.org> writes:
> Author: jakehehrlich
> Date: Fri Oct 27 16:39:31 2017
> New Revision: 316813
>
> URL: http://llvm.org/viewvc/llvm-project?rev=316813&view=rev
> Log:
> Revert "Add support for writing 64-bit symbol tables for archives when offsets become too large for 32-bit"
>
> This reverts commit r316805.
>
> Removed:
> llvm/trunk/test/Object/archive-SYM64-write.test
> Modified:
> llvm/trunk/lib/Object/ArchiveWriter.cpp
>
> Modified: llvm/trunk/lib/Object/ArchiveWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ArchiveWriter.cpp?rev=316813&r1=316812&r2=316813&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Object/ArchiveWriter.cpp (original)
> +++ llvm/trunk/lib/Object/ArchiveWriter.cpp Fri Oct 27 16:39:31 2017
> @@ -122,11 +122,11 @@ static void printWithSpacePadding(raw_os
> static bool isBSDLike(object::Archive::Kind Kind) {
> switch (Kind) {
> case object::Archive::K_GNU:
> - case object::Archive::K_GNU64:
> return false;
> case object::Archive::K_BSD:
> case object::Archive::K_DARWIN:
> return true;
> + case object::Archive::K_GNU64:
> case object::Archive::K_DARWIN64:
> case object::Archive::K_COFF:
> break;
> @@ -134,8 +134,8 @@ static bool isBSDLike(object::Archive::K
> llvm_unreachable("not supported for writting");
> }
>
> -template <class T>
> -static void print(raw_ostream &Out, object::Archive::Kind Kind, T Val) {
> +static void print32(raw_ostream &Out, object::Archive::Kind Kind,
> + uint32_t Val) {
> if (isBSDLike(Kind))
> support::endian::Writer<support::little>(Out).write(Val);
> else
> @@ -216,20 +216,6 @@ static std::string computeRelativePath(S
> return Relative.str();
> }
>
> -static bool is64BitKind(object::Archive::Kind Kind) {
> - switch (Kind) {
> - case object::Archive::K_GNU:
> - case object::Archive::K_BSD:
> - case object::Archive::K_DARWIN:
> - case object::Archive::K_COFF:
> - return false;
> - case object::Archive::K_DARWIN64:
> - case object::Archive::K_GNU64:
> - return true;
> - }
> - llvm_unreachable("not supported for writting");
> -}
> -
> static void addToStringTable(raw_ostream &Out, StringRef ArcName,
> const NewArchiveMember &M, bool Thin) {
> StringRef ID = M.Buf->getBufferIdentifier();
> @@ -302,14 +288,6 @@ static bool isArchiveSymbol(const object
> return true;
> }
>
> -static void printNBits(raw_ostream &Out, object::Archive::Kind Kind,
> - uint64_t Val) {
> - if (is64BitKind(Kind))
> - print<uint64_t>(Out, Kind, Val);
> - else
> - print<uint32_t>(Out, Kind, Val);
> -}
> -
> static void writeSymbolTable(raw_ostream &Out, object::Archive::Kind Kind,
> bool Deterministic, ArrayRef<MemberData> Members,
> StringRef StringTable) {
> @@ -321,11 +299,9 @@ static void writeSymbolTable(raw_ostream
> NumSyms += M.Symbols.size();
>
> unsigned Size = 0;
> - Size += is64BitKind(Kind) ? 8 : 4; // Number of entries
> + Size += 4; // Number of entries
> if (isBSDLike(Kind))
> Size += NumSyms * 8; // Table
> - else if (is64BitKind(Kind))
> - Size += NumSyms * 8; // Table
> else
> Size += NumSyms * 4; // Table
> if (isBSDLike(Kind))
> @@ -342,30 +318,27 @@ static void writeSymbolTable(raw_ostream
> if (isBSDLike(Kind))
> printBSDMemberHeader(Out, Out.tell(), "__.SYMDEF", now(Deterministic), 0, 0,
> 0, Size);
> - else if (is64BitKind(Kind))
> - printGNUSmallMemberHeader(Out, "/SYM64", now(Deterministic), 0, 0, 0, Size);
> else
> printGNUSmallMemberHeader(Out, "", now(Deterministic), 0, 0, 0, Size);
>
> uint64_t Pos = Out.tell() + Size;
>
> if (isBSDLike(Kind))
> - print<uint32_t>(Out, Kind, NumSyms * 8);
> + print32(Out, Kind, NumSyms * 8);
> else
> - printNBits(Out, Kind, NumSyms);
> + print32(Out, Kind, NumSyms);
>
> for (const MemberData &M : Members) {
> for (unsigned StringOffset : M.Symbols) {
> if (isBSDLike(Kind))
> - print<uint32_t>(Out, Kind, StringOffset);
> - printNBits(Out, Kind, Pos); // member offset
> + print32(Out, Kind, StringOffset);
> + print32(Out, Kind, Pos); // member offset
> }
> Pos += M.Header.size() + M.Data.size() + M.Padding.size();
> }
>
> if (isBSDLike(Kind))
> - // byte count of the string table
> - print<uint32_t>(Out, Kind, StringTable.size());
> + print32(Out, Kind, StringTable.size()); // byte count of the string table
> Out << StringTable;
>
> while (Pad--)
> @@ -469,25 +442,6 @@ Error llvm::writeArchive(StringRef ArcNa
> if (!StringTableBuf.empty())
> Data.insert(Data.begin(), computeStringTable(StringTableBuf));
>
> - // We would like to detect if we need to switch to a 64-bit symbol table.
> - if (WriteSymtab) {
> - uint64_t MaxOffset = 0;
> - uint64_t LastOffset = MaxOffset;
> - for (const auto& M : Data) {
> - // Record the start of the member's offset
> - LastOffset = MaxOffset;
> - // Account for the size of each part associated with the member.
> - MaxOffset += M.Header.size() + M.Data.size() + M.Padding.size();
> - // We assume 32-bit symbols to see if 32-bit symbols are possible or not.
> - MaxOffset += M.Symbols.size() * 4;
> - }
> - // If LastOffset isn't going to fit in a 32-bit varible we need to switch
> - // to 64-bit. Note that the file can be larger than 4GB as long as the last
> - // member starts before the 4GB offset.
> - if (LastOffset >> 32 != 0)
> - Kind = object::Archive::K_GNU64;
> - }
> -
> SmallString<128> TmpArchive;
> int TmpArchiveFD;
> if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a",
>
> Removed: llvm/trunk/test/Object/archive-SYM64-write.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-SYM64-write.test?rev=316812&view=auto
> ==============================================================================
> --- llvm/trunk/test/Object/archive-SYM64-write.test (original)
> +++ llvm/trunk/test/Object/archive-SYM64-write.test (removed)
> @@ -1,31 +0,0 @@
> -# RUN: yaml2obj %s > %t
> -# RUN: rm -f %t.lib
> -# RUN: cp %t %t2
> -# RUN: llvm-ar cr %t.lib %t %t2 %p/Inputs/trivial-object-test.elf-x86-64
> -# RUN: llvm-nm --print-armap %t.lib | FileCheck %s
> -
> -!ELF
> -FileHeader:
> - Class: ELFCLASS64
> - Data: ELFDATA2LSB
> - Type: ET_EXEC
> - Machine: EM_X86_64
> -Sections:
> - - Name: .data
> - Type: SHT_PROGBITS
> - Flags: [ SHF_ALLOC ]
> - AddressAlign: 0x0000000000000001
> - Content: "00"
> - Size: 2147483648
> -
> -# CHECK: Archive map
> -# CHECK-NEXT: main in trivial-object-test.elf-x86-64
> -
> -# CHECK: archive-SYM64-write.test.tmp:
> -
> -# CHECK: archive-SYM64-write.test.tmp2:
> -
> -# CHECK: trivial-object-test.elf-x86-64:
> -# CHECK-NEXT: U SomeOtherFunction
> -# CHECK-NEXT: 0000000000000000 T main
> -# CHECK-NEXT: U puts
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list