Index: llvm/trunk/test/tools/llvm-ar/move.test =================================================================== --- llvm/trunk/test/tools/llvm-ar/move.test +++ llvm/trunk/test/tools/llvm-ar/move.test @@ -0,0 +1,129 @@ +## Test the move command without modifiers moves members to the end + +# RUN: rm -rf %t && mkdir -p %t +# RUN: yaml2obj %s -o %t/1.o --docnum=1 +# RUN: yaml2obj %s -o %t/2.o --docnum=2 +# RUN: yaml2obj %s -o %t/3.o --docnum=3 + +## Move single member: +# RUN: llvm-ar rc %t/single.a %t/1.o %t/2.o %t/3.o +# RUN: llvm-ar m %t/single.a %t/1.o +# RUN: llvm-ar t %t/single.a \ +# RUN: | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}} + +# SINGLE: 2.o +# SINGLE-NEXT: 3.o +# SINGLE-NEXT: 1.o + +# RUN: llvm-nm --print-armap %t/single.a \ +# RUN: | FileCheck %s --check-prefix=SINGLE-SYM + +# SINGLE-SYM: symbol2 +# SINGLE-SYM-NEXT: symbol3 +# SINGLE-SYM-NEXT: symbol1 + +## Move multiple members: +# RUN: llvm-ar rc %t/multiple.a %t/1.o %t/2.o %t/3.o +# RUN: llvm-ar m %t/multiple.a %t/1.o %t/2.o +# RUN: llvm-ar t %t/multiple.a \ +# RUN: | FileCheck %s --check-prefix=MULTIPLE --match-full-lines --implicit-check-not {{.}} + +# MULTIPLE: 3.o +# MULTIPLE-NEXT: 1.o +# MULTIPLE-NEXT: 2.o + +# RUN: llvm-nm --print-armap %t/multiple.a \ +# RUN: | FileCheck %s --check-prefix=MULTIPLE-SYM + +# MULTIPLE-SYM: symbol3 +# MULTIPLE-SYM-NEXT: symbol1 +# MULTIPLE-SYM-NEXT: symbol2 + +## Move same member: +# RUN: llvm-ar rc %t/same.a %t/1.o %t/2.o %t/3.o +# RUN: llvm-ar m %t/same.a %t/1.o %t/1.o +# RUN: llvm-ar t %t/same.a \ +# RUN: | FileCheck %s --check-prefix=SAME -DFILE=%t/2.o + +# SAME: 2.o +# SAME-NEXT: 3.o +# SAME-NEXT: 1.o + +# RUN: llvm-nm --print-armap %t/same.a \ +# RUN: | FileCheck %s --check-prefix=SAME-SYM + +# SAME-SYM: symbol2 +# SAME-SYM-NEXT: symbol3 +# SAME-SYM-NEXT: symbol1 + +## Move without member: +# RUN: llvm-ar rc %t/without.a %t/1.o %t/2.o %t/3.o +# RUN: llvm-ar m %t/without.a +# RUN: llvm-ar t %t/without.a \ +# RUN: | FileCheck %s --match-full-lines --check-prefix=WITHOUT --implicit-check-not {{.}} + +# WITHOUT: 1.o +# WITHOUT-NEXT: 2.o +# WITHOUT-NEXT: 3.o + +# RUN: llvm-nm --print-armap %t/without.a \ +# RUN: | FileCheck %s --check-prefix=WITHOUT-SYM + +# WITHOUT-SYM: symbol1 +# WITHOUT-SYM-NEXT: symbol2 +# WITHOUT-SYM-NEXT: symbol3 + +## No archive: +# RUN: not llvm-ar m 2>&1 \ +# RUN: | FileCheck %s --check-prefix=NO-ARCHIVE + +# NO-ARCHIVE: error: An archive name must be specified. + +## Member does not exist: +# RUN: llvm-ar rc %t/missing.a %t/1.o %t/2.o %t/3.o +# RUN: not llvm-ar m %t/missing.a %t/missing.txt 2>&1 \ +# RUN: | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t/missing.txt + +# MISSING-FILE: error: [[FILE]]: {{[nN]}}o such file or directory. + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS +Symbols: + - Name: symbol1 + Binding: STB_GLOBAL + Section: .text + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS +Symbols: + - Name: symbol2 + Binding: STB_GLOBAL + Section: .text + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS +Symbols: + - Name: symbol3 + Binding: STB_GLOBAL + Section: .text Index: llvm/trunk/test/tools/llvm-ar/quick-append.test =================================================================== --- llvm/trunk/test/tools/llvm-ar/quick-append.test +++ llvm/trunk/test/tools/llvm-ar/quick-append.test @@ -0,0 +1,93 @@ +## Test quick append + +# RUN: rm -rf %t && mkdir -p %t +# RUN: yaml2obj %s -o %t/1.o --docnum=1 +# RUN: yaml2obj %s -o %t/2.o --docnum=2 + +## Append single member: +# RUN: llvm-ar qc %t/single.a %t/1.o +# RUN: llvm-ar t %t/single.a \ +# RUN: | FileCheck %s --check-prefix=SINGLE --match-full-lines --implicit-check-not {{.}} + +# SINGLE: 1.o + +# RUN: llvm-nm --print-armap %t/single.a \ +# RUN: | FileCheck %s --check-prefix=SINGLE-SYM + +# SINGLE-SYM: symbol1 + +## Append multiple members: +# RUN: llvm-ar qc %t/multiple.a %t/1.o %t/2.o +# RUN: llvm-ar t %t/multiple.a \ +# RUN: | FileCheck %s --check-prefix=MULTIPLE --match-full-lines --implicit-check-not {{.}} + +# MULTIPLE: 1.o +# MULTIPLE-NEXT: 2.o + +# RUN: llvm-nm --print-armap %t/multiple.a \ +# RUN: | FileCheck %s --check-prefix=MULTIPLE-SYM + +# MULTIPLE-SYM: symbol1 +# MULTIPLE-SYM-NEXT: symbol2 + +## Append same member: +# RUN: llvm-ar qc %t/same.a %t/1.o %t/1.o +# RUN: llvm-ar t %t/same.a \ +# RUN: | FileCheck %s --check-prefix=SAME -DFILE=%t/2.o --match-full-lines --implicit-check-not {{.}} + +# SAME: 1.o +# SAME-NEXT: 1.o + +# RUN: llvm-nm --print-armap %t/same.a \ +# RUN: | FileCheck %s --check-prefix=SAME-SYM + +# SAME-SYM: symbol1 +# SAME-SYM-NEXT: symbol1 + +## Append without member: +# RUN: llvm-ar qc %t/without.a +# RUN: llvm-ar t %t/without.a \ +# RUN: | FileCheck /dev/null --allow-empty --implicit-check-not={{.}} + +# RUN: llvm-nm --print-armap %t/without.a \ +# RUN: | FileCheck /dev/null --allow-empty --implicit-check-not={{.}} + +## No archive: +# RUN: not llvm-ar qc 2>&1 \ +# RUN: | FileCheck %s --check-prefix=NO-ARCHIVE + +# NO-ARCHIVE: error: An archive name must be specified. + +## Member does not exist: +# RUN: not llvm-ar qc %t/missing.a %t/missing.txt 2>&1 \ +# RUN: | FileCheck %s --check-prefix=MISSING-FILE -DFILE=%t/missing.txt + +# MISSING-FILE: error: [[FILE]]: {{[nN]}}o such file or directory. + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS +Symbols: + - Name: symbol1 + Binding: STB_GLOBAL + Section: .text + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS +Symbols: + - Name: symbol2 + Binding: STB_GLOBAL + Section: .text Index: llvm/trunk/test/tools/llvm-ar/read-only-archive.test =================================================================== --- llvm/trunk/test/tools/llvm-ar/read-only-archive.test +++ llvm/trunk/test/tools/llvm-ar/read-only-archive.test @@ -0,0 +1,30 @@ +## Test that read-only archives cannot be edited + +# RUN: rm -rf %t && mkdir -p %t +# RUN: touch %t/1.txt +# RUN: touch %t/2.txt +# RUN: touch %t/3.txt + +# RUN: llvm-ar rc %t/archive.a %t/1.txt %t/2.txt + +## Make read only: +# RUN: chmod 444 %t/archive.a + +# RUN: not llvm-ar r %t/archive.a %t/3.txt \ +# RUN: FileCheck %s --check-prefix=ERROR -DFILE=%t/archive.a + +# ERROR: error: [[FILE]]: no such file or directory. + +# RUN: not llvm-ar q %t/archive.a %t/3.txt \ +# RUN: FileCheck %s --check-prefix=ERROR -DFILE=%t/archive.a + +# RUN: not llvm-ar m %t/archive.a t/1.txt \ +# RUN: FileCheck %s --check-prefix=ERROR-2 -DFILE=%t/archive.a + +# ERROR-2: error: [[FILE]]: permission denied. + +# RUN: llvm-ar t %t/archive.a \ +# RUN: | FileCheck %s --check-prefix=ARCHIVE --match-full-lines --implicit-check-not {{.}} + +# ARCHIVE: 1.txt +# ARCHIVE-NEXT: 2.txt