1## This test checks that an archive is flattened correctly. 2 3# RUN: yaml2obj %S/Inputs/input1.yaml -o %t-input1.o 4# RUN: yaml2obj %S/Inputs/input2.yaml -o %t-input2.o 5# RUN: llvm-as %S/Inputs/x86_64-osx.ll -o %t-x86_64.bc 6 7## Input a correct archive: 8# RUN: rm -f %t.correct.ar 9# RUN: llvm-ar cr %t.correct.ar %t-x86_64.bc %t-input1.o %t-input2.o 10# RUN: llvm-libtool-darwin -static -o %t.lib %t.correct.ar 11 12## Check that binaries are present: 13# RUN: llvm-ar t %t.lib | \ 14# RUN: FileCheck %s --check-prefix=CHECK-NAMES --implicit-check-not={{.}} -DPREFIX=%basename_t.tmp 15 16# CHECK-NAMES: [[PREFIX]]-x86_64.bc 17# CHECK-NAMES-NEXT: [[PREFIX]]-input1.o 18# CHECK-NAMES-NEXT: [[PREFIX]]-input2.o 19 20## Check that symbols are present: 21# RUN: llvm-nm --print-armap %t.lib | \ 22# RUN: FileCheck %s --check-prefix=CHECK-SYMBOLS -DPREFIX=%basename_t.tmp --match-full-lines 23 24# CHECK-SYMBOLS: Archive map 25# CHECK-SYMBOLS-NEXT: _x86_64 in [[PREFIX]]-x86_64.bc 26# CHECK-SYMBOLS-NEXT: _symbol1 in [[PREFIX]]-input1.o 27# CHECK-SYMBOLS-NEXT: _symbol2 in [[PREFIX]]-input2.o 28# CHECK-SYMBOLS-EMPTY: 29 30## Check that output archive is in Darwin format: 31# RUN: llvm-objdump --macho --archive-headers %t.lib | \ 32# RUN: FileCheck %s --check-prefix=FORMAT -DPREFIX=%basename_t.tmp -DARCHIVE=%t.lib 33 34# FORMAT: Archive : [[ARCHIVE]] 35# FORMAT-NEXT: __.SYMDEF 36# FORMAT-NEXT: [[PREFIX]]-x86_64.bc 37# FORMAT-NEXT: [[PREFIX]]-input1.o 38# FORMAT-NEXT: [[PREFIX]]-input2.o 39# FORMAT-NOT: {{.}} 40 41## Passing both archive, bitcode and object file: 42# RUN: llvm-libtool-darwin -static -o %t.lib %t-x86_64.bc %t.correct.ar %t-input1.o 43# RUN: llvm-ar t %t.lib | \ 44# RUN: FileCheck %s --check-prefix=BOTH-NAMES --implicit-check-not={{.}} -DPREFIX=%basename_t.tmp 45# RUN: llvm-nm --print-armap %t.lib | \ 46# RUN: FileCheck %s --check-prefix=BOTH-SYMBOLS -DPREFIX=%basename_t.tmp --match-full-lines 47 48# BOTH-NAMES: [[PREFIX]]-x86_64.bc 49# BOTH-NAMES-NEXT: [[PREFIX]]-x86_64.bc 50# BOTH-NAMES-NEXT: [[PREFIX]]-input1.o 51# BOTH-NAMES-NEXT: [[PREFIX]]-input2.o 52# BOTH-NAMES-NEXT: [[PREFIX]]-input1.o 53 54# BOTH-SYMBOLS: Archive map 55# BOTH-SYMBOLS-NEXT: _x86_64 in [[PREFIX]]-x86_64.bc 56# BOTH-SYMBOLS-NEXT: _x86_64 in [[PREFIX]]-x86_64.bc 57# BOTH-SYMBOLS-NEXT: _symbol1 in [[PREFIX]]-input1.o 58# BOTH-SYMBOLS-NEXT: _symbol2 in [[PREFIX]]-input2.o 59# BOTH-SYMBOLS-NEXT: _symbol1 in [[PREFIX]]-input1.o 60# BOTH-SYMBOLS-EMPTY: 61 62# RUN: llvm-libtool-darwin -static -o %t.lib %t-x86_64.bc %t.correct.ar %t-input1.o 2>&1 | \ 63# RUN: FileCheck %s --check-prefix=DUPLICATE-INPUT -DFILEA=%basename_t.tmp-input1.o \ 64# RUN: -DPATHA=%t-input1.o -DFILEB=%basename_t.tmp-x86_64.bc -DPATHB=%t-x86_64.bc -DPATHCORRECT=%t.correct.ar 65 66# DUPLICATE-INPUT: warning: file '[[FILEB]]' was specified multiple times. 67# DUPLICATE-INPUT-DAG: [[PATHB]] 68# DUPLICATE-INPUT-DAG: [[PATHCORRECT]] 69# DUPLICATE-INPUT: file '[[FILEA]]' was specified multiple times. 70# DUPLICATE-INPUT-DAG: [[PATHA]] 71# DUPLICATE-INPUT-DAG: [[PATHCORRECT]] 72 73## Cannot read archive: 74# RUN: echo '!<arch>' > %t-invalid-archive.lib 75# RUN: echo 'invalid' >> %t-invalid-archive.lib 76# RUN: not llvm-libtool-darwin -static -o %t.lib %t-invalid-archive.lib 2>&1 | \ 77# RUN: FileCheck %s --check-prefix=INVALID-ARCHIVE -DARCHIVE=%t-invalid-archive.lib 78 79# INVALID-ARCHIVE: error: '[[ARCHIVE]]': truncated or malformed archive 80 81## Archive member not an object file: 82# RUN: rm -f %t.not-object.ar 83# RUN: touch %t.txt 84# RUN: llvm-ar cr %t.not-object.ar %t.txt 85# RUN: not llvm-libtool-darwin -static -o %t.lib %t.not-object.ar 2>&1 | \ 86# RUN: FileCheck %s --check-prefix=NOT-OBJECT -DARCHIVE=%t.not-object.ar -DFILE=%basename_t.tmp.txt 87 88## Do not recursively flatten archives: 89# RUN: rm -f %t.inner 90# RUN: rm -f %t.outer 91# RUN: llvm-ar cr %t.inner %t-input1.o 92# RUN: llvm-ar cr %t.outer %t.inner 93# RUN: not llvm-libtool-darwin -static -o %t.lib %t.outer 2>&1 | \ 94# RUN: FileCheck %s --check-prefix=NOT-OBJECT -DARCHIVE=%t.outer -DFILE=%basename_t.tmp.inner 95 96# NOT-OBJECT: error: '[[ARCHIVE]]': '[[FILE]]': The file was not recognized as a valid object file 97 98## Archive member not a Mach-O object file: 99# RUN: rm -f %t.not-macho.ar 100# RUN: yaml2obj %s -o %t.elf 101# RUN: llvm-ar cr %t.not-macho.ar %t.elf 102# RUN: not llvm-libtool-darwin -static -o %t.lib %t.not-macho.ar 2>&1 | \ 103# RUN: FileCheck %s --check-prefix=NOT-MACHO -DARCHIVE=%t.not-macho.ar -DFILE=%basename_t.tmp.elf 104 105# NOT-MACHO: error: '[[ARCHIVE]]': '[[FILE]]': format not supported 106 107--- !ELF 108FileHeader: 109 Class: ELFCLASS64 110 Data: ELFDATA2LSB 111 Type: ET_REL 112 Machine: EM_X86_64 113