diff options
-rw-r--r-- | llvm/lib/Object/ArchiveWriter.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Object/archive-symtab.test | 8 |
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp index 015c24836fa..ce83cb1245f 100644 --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -351,7 +351,8 @@ writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind, // ld64 requires the next member header to start at an offset that is // 4 bytes aligned. - unsigned Pad = OffsetToAlignment(Out.tell(), 4); + unsigned Alignment = isBSDLike(Kind) ? 4 : 2; + unsigned Pad = OffsetToAlignment(Out.tell(), Alignment); while (Pad--) Out.write(uint8_t(0)); diff --git a/llvm/test/Object/archive-symtab.test b/llvm/test/Object/archive-symtab.test index 0fcf9adf916..485838b7c20 100644 --- a/llvm/test/Object/archive-symtab.test +++ b/llvm/test/Object/archive-symtab.test @@ -122,3 +122,11 @@ RUN: llvm-ar --format=bsd rcsU %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 ` + +With a gnu symbol table we only align to two +8 + 60 + 14 = 82 +RUN: rm -f %t.a +RUN: llvm-ar --format=gnu rcsD %t.a %p/Inputs/trivial-object-test.macho-x86-64 +RUN: FileCheck --check-prefix=GNU-SYMTAB-ALIGN %s < %t.a +GNU-SYMTAB-ALIGN: !<arch> +GNU-SYMTAB-ALIGN-NEXT: / 0 0 0 0 14 ` |