|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar rcsU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s | 
|  |  | 
|  | CHECK: Archive map | 
|  | CHECK-NEXT: main in trivial-object-test.elf-x86-64 | 
|  | CHECK-NEXT: foo in trivial-object-test2.elf-x86-64 | 
|  | CHECK-NEXT: main in trivial-object-test2.elf-x86-64 | 
|  | CHECK-NOT: bar | 
|  |  | 
|  |  | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar --format=gnu rcT %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 | 
|  | RUN: llvm-nm -M %t.a | FileCheck --check-prefix=THIN %s | 
|  |  | 
|  | THIN: Archive map | 
|  | THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test.elf-x86-64 | 
|  | THIN-NEXT: foo in {{.*}}/Inputs/trivial-object-test2.elf-x86-64 | 
|  | THIN-NEXT: main in {{.*}}/Inputs/trivial-object-test2.elf-x86-64 | 
|  |  | 
|  |  | 
|  | CHECK: trivial-object-test.elf-x86-64: | 
|  | CHECK-NEXT:                  U SomeOtherFunction | 
|  | CHECK-NEXT: 0000000000000000 T main | 
|  | CHECK-NEXT:                  U puts | 
|  |  | 
|  | CHECK: trivial-object-test2.elf-x86-64: | 
|  | CHECK-NEXT: 0000000000000000 t bar | 
|  | CHECK-NEXT: 0000000000000006 T foo | 
|  | CHECK-NEXT: 0000000000000016 T main | 
|  |  | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar rcSU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=NOMAP | 
|  |  | 
|  | NOMAP-NOT: Archive map | 
|  |  | 
|  | RUN: llvm-ar s %t.a | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s | 
|  |  | 
|  | check that the archive does have a corrupt symbol table. | 
|  | RUN: rm -f %t.a | 
|  | RUN: cp %p/Inputs/archive-test.a-corrupt-symbol-table %t.a | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=CORRUPT | 
|  |  | 
|  | CORRUPT: Archive map | 
|  | CORRUPT-NEXT: mbin in trivial-object-test.elf-x86-64 | 
|  | CORRUPT-NEXT: foo in trivial-object-test2.elf-x86-64 | 
|  | CORRUPT-NEXT: main in trivial-object-test2.elf-x86-64 | 
|  |  | 
|  | CORRUPT: trivial-object-test.elf-x86-64: | 
|  | CORRUPT-NEXT:                  U SomeOtherFunction | 
|  | CORRUPT-NEXT: 0000000000000000 T main | 
|  | CORRUPT-NEXT:                  U puts | 
|  |  | 
|  | CORRUPT: trivial-object-test2.elf-x86-64: | 
|  | CORRUPT-NEXT: 0000000000000000 t bar | 
|  | CORRUPT-NEXT: 0000000000000006 T foo | 
|  | CORRUPT-NEXT: 0000000000000016 T main | 
|  |  | 
|  | check that the we *don't* update the symbol table. | 
|  | RUN: llvm-ar s %t.a | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=CORRUPT | 
|  |  | 
|  | repeate the test with llvm-ranlib | 
|  |  | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar rcSU %t.a %p/Inputs/trivial-object-test.elf-x86-64 %p/Inputs/trivial-object-test2.elf-x86-64 | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s --check-prefix=NOMAP | 
|  |  | 
|  | RUN: llvm-ranlib %t.a | 
|  | RUN: llvm-nm -M %t.a | FileCheck %s | 
|  |  | 
|  | RUN: llvm-nm -M %p/Inputs/macho-archive-x86_64.a | FileCheck %s --check-prefix=BSD-MachO | 
|  | RUN: llvm-nm -M %p/Inputs/macho-archive-unsorted-x86_64.a | FileCheck %s --check-prefix=BSD-MachO | 
|  |  | 
|  | BSD-MachO: Archive map | 
|  | BSD-MachO: _bar in bar.o | 
|  | BSD-MachO: _foo in foo.o | 
|  |  | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar --format=bsd rcsU %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test2.macho-x86-64 | 
|  | RUN: llvm-nm -M %t.a | FileCheck --check-prefix=MACHO %s | 
|  |  | 
|  | MACHO: Archive map | 
|  | MACHO-NEXT: _main in trivial-object-test.macho-x86-64 | 
|  | MACHO-NEXT: _foo in trivial-object-test2.macho-x86-64 | 
|  | MACHO-NEXT: _main in trivial-object-test2.macho-x86-64 | 
|  | MACHO-NOT: {{^}}bar | 
|  |  | 
|  | MACHO: trivial-object-test.macho-x86-64 | 
|  | MACHO-NEXT: 0000000000000028 s L_.str | 
|  | MACHO-NEXT:                  U _SomeOtherFunction | 
|  | MACHO-NEXT: 0000000000000000 T _main | 
|  | MACHO-NEXT:                  U _puts | 
|  |  | 
|  | MACHO: trivial-object-test2.macho-x86-64 | 
|  | MACHO-NEXT: 0000000000000000 t _bar | 
|  | MACHO-NEXT: 0000000000000001 T _foo | 
|  | MACHO-NEXT: 0000000000000002 T _main | 
|  |  | 
|  | RUN: llvm-nm -M %p/Inputs/macho-toc64-archive-x86_64.a | FileCheck --check-prefix=MACHO-TOC64 %s | 
|  |  | 
|  | MACHO-TOC64: Archive map | 
|  | MACHO-TOC64-NEXT: _test in test.o | 
|  | MACHO-TOC64-NEXT: _test in xtest.o | 
|  |  | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar --format=gnu rcsU %t.a %p/Inputs/coff-short-import-code %p/Inputs/coff-short-import-data | 
|  | RUN: llvm-nm -M %t.a | FileCheck --check-prefix=COFF-SHORT-IMPORT %s | 
|  |  | 
|  | COFF-SHORT-IMPORT:      Archive map | 
|  | COFF-SHORT-IMPORT-NEXT: __imp__foo in coff-short-import-code | 
|  | COFF-SHORT-IMPORT-NEXT: _foo in coff-short-import-code | 
|  | COFF-SHORT-IMPORT-NEXT: __imp__bar in coff-short-import-data | 
|  | COFF-SHORT-IMPORT-NOT:  _bar in coff-short-import-data | 
|  |  | 
|  | Test that we pad the symbol table so that it ends in a multiple of 8 bytes: | 
|  | 8 + 60 + 36 == 104 | 
|  | RUN: rm -f %t.a | 
|  | 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        ` | 
|  |  | 
|  | Test that we pad the symbol table so that it ends in a multiple of 8 bytes: | 
|  | 8 + 60 + 52 == 120 | 
|  | RUN: rm -f %t.a | 
|  | RUN: llvm-ar --format=bsd rcsD %t.a %p/Inputs/trivial-object-test.macho-x86-64 %p/Inputs/trivial-object-test.macho-x86-64 | 
|  | RUN: FileCheck --check-prefix=MACHO-SYMTAB-ALIGN2 %s < %t.a | 
|  | MACHO-SYMTAB-ALIGN2: !<arch> | 
|  | MACHO-SYMTAB-ALIGN2-NEXT: #1/12           0           0     0     0       52        ` | 
|  |  | 
|  | 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        ` |