diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-09 22:48:06 +0300 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-07-09 22:48:06 +0300 |
commit | 594e676cbe475dc879980e919731c3614aa083eb (patch) | |
tree | 8a0481d1897f997251ac8c782c125b9f13941856 | |
parent | 5a88e1a8c649ecb5567b8263f4426d781f1c3b72 (diff) |
llvm-ar: Pad the symbol table to 4 bytes.
It looks like ld64 requires it. With this we seem to be able to bootstrap using
llvm-ar+/usr/bin/true instead of ar+ranlib (currently on stage2).
llvm-svn: 241842
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 7 | ||||
-rw-r--r-- | llvm/test/Object/archive-symtab.test | 8 |
2 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index c485b34a0814..1148c847549a 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -237,8 +237,11 @@ writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind, print32(Out, Kind, StringTable.size()); // byte count of the string table Out << StringTable; - if (Out.tell() % 2) - Out << '\0'; + // ld64 requires the next member header to start at an offset that is + // 4 bytes aligned. + unsigned Pad = OffsetToAlignment(Out.tell(), 4); + while (Pad--) + Out.write(uint8_t(0)); // Patch up the size of the symbol table now that we know how big it is. unsigned Pos = Out.tell(); diff --git a/llvm/test/Object/archive-symtab.test b/llvm/test/Object/archive-symtab.test index 5de2f2b5e1d6..5f648ebc1098 100644 --- a/llvm/test/Object/archive-symtab.test +++ b/llvm/test/Object/archive-symtab.test @@ -87,3 +87,11 @@ MACHO: trivial-object-test2.macho-x86-64 MACHO-NEXT: 0000000000000000 t _bar MACHO-NEXT: 0000000000000001 T _foo MACHO-NEXT: 0000000000000002 T _main + +Test that we pad the symbol table so that it ends in a multiple of 4 bytes: +8 + 60 + 36 == 104 +RUN: rm -f %t.a +RUN: llvm-ar --format=bsd rcs %t.a %p/Inputs/trivial-object-test.macho-x86-64 +RUN: FileCheck --check-prefix=MACHO-SYMTAB-ALIGN %s < %t.a +MACHO-SYMTAB-ALIGN: !<arch> +MACHO-SYMTAB-ALIGN-NEXT: #1/12 {{..........}} 0 0 0 36 ` |