[llvm-ar] -s: don't convert a thin archive to a regular one

In binutils, ar -s and randlib don't convert a thin archive to a regular one.
This behavior makes sense and this patch ports the behavior.

Reviewed By: gbreynoo

Differential Revision: https://reviews.llvm.org/D117443
This commit is contained in:
Fangrui Song 2022-02-01 09:59:51 -08:00
parent dd6e7e0d57
commit ceb9094a49
2 changed files with 16 additions and 0 deletions

View File

@ -58,9 +58,23 @@
# RUN: llvm-nm --print-armap %t-thin.a \ # RUN: llvm-nm --print-armap %t-thin.a \
# RUN: | FileCheck %s --check-prefix=SYMTAB # RUN: | FileCheck %s --check-prefix=SYMTAB
## llvm-ranlib does not change a thin archive to a regular one.
# RUN: rm -f %t-thin.a && llvm-ar rcTS %t-thin.a %t.o
# RUN: llvm-nm --print-armap %t-thin.a | FileCheck %s --check-prefix=NO-SYMTAB
# RUN: llvm-ranlib %t-thin.a
# RUN: llvm-nm --print-armap %t-thin.a | FileCheck %s --check-prefix=SYMTAB
# RUN: FileCheck --input-file=%t-thin.a %s --check-prefixes=THIN
## llvm-ar -s is identical to ranlib and a duplicated operation does not change the output.
# RUN: rm -f %t-thin2.a && llvm-ar rcTS %t-thin2.a %t.o
# RUN: llvm-ar s %t-thin2.a && cmp %t-thin.a %t-thin2.a
# RUN: llvm-ar s %t-thin2.a && cmp %t-thin.a %t-thin2.a
# SYMTAB: symbol in # SYMTAB: symbol in
# NO-SYMTAB-NOT: symbol in # NO-SYMTAB-NOT: symbol in
# THIN: !<thin>
--- !ELF --- !ELF
FileHeader: FileHeader:
Class: ELFCLASS64 Class: ELFCLASS64

View File

@ -968,6 +968,8 @@ static void createSymbolTable(object::Archive *OldArchive) {
if (OldArchive->hasSymbolTable()) if (OldArchive->hasSymbolTable())
return; return;
if (OldArchive->isThin())
Thin = true;
performWriteOperation(CreateSymTab, OldArchive, nullptr, nullptr); performWriteOperation(CreateSymTab, OldArchive, nullptr, nullptr);
} }