diff --git a/llvm/test/Object/ar-create.test b/llvm/test/Object/ar-create.test --- a/llvm/test/Object/ar-create.test +++ b/llvm/test/Object/ar-create.test @@ -1,3 +1,4 @@ +XFAIL: system-aix Test which operations create an archive and which don't. RUN: touch %t diff --git a/llvm/test/Object/archive-extract-dir.test b/llvm/test/Object/archive-extract-dir.test --- a/llvm/test/Object/archive-extract-dir.test +++ b/llvm/test/Object/archive-extract-dir.test @@ -1,3 +1,5 @@ +XFAIL: system-aix + RUN: mkdir -p %t RUN: cd %t RUN: rm -rf foo diff --git a/llvm/test/Object/archive-malformed-object.test b/llvm/test/Object/archive-malformed-object.test --- a/llvm/test/Object/archive-malformed-object.test +++ b/llvm/test/Object/archive-malformed-object.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Show that the archive library emits error messages when adding malformed ## objects. diff --git a/llvm/test/Object/archive-replace-pos.test b/llvm/test/Object/archive-replace-pos.test --- a/llvm/test/Object/archive-replace-pos.test +++ b/llvm/test/Object/archive-replace-pos.test @@ -1,3 +1,5 @@ +XFAIL: system-aix + Test adding a member to a particular position RUN: touch %t.foo diff --git a/llvm/test/Object/archive-unknown-filetype.test b/llvm/test/Object/archive-unknown-filetype.test --- a/llvm/test/Object/archive-unknown-filetype.test +++ b/llvm/test/Object/archive-unknown-filetype.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Show that the archive library does not emit an error or add any symbols to ## the archive symbol table, when it encounters an unknown file type, but still ## adds the file to the archive. diff --git a/llvm/test/Object/archive-update.test b/llvm/test/Object/archive-update.test --- a/llvm/test/Object/archive-update.test +++ b/llvm/test/Object/archive-update.test @@ -1,3 +1,5 @@ +XFAIL: system-aix + Test the 'u' option of llvm-ar RUN: rm -rf %t && mkdir -p %t && cd %t diff --git a/llvm/test/Object/directory.ll b/llvm/test/Object/directory.ll --- a/llvm/test/Object/directory.ll +++ b/llvm/test/Object/directory.ll @@ -1,3 +1,5 @@ +; XFAIL: system-aix + ;RUN: rm -rf %t && mkdir -p %t ;RUN: not llvm-ar r %t/test.a . 2>&1 | FileCheck -DMSG=%errc_EISDIR %s ;CHECK: .: [[MSG]] diff --git a/llvm/test/tools/llvm-ar/Inputs/xcoff.yaml b/llvm/test/tools/llvm-ar/Inputs/xcoff.yaml new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-ar/Inputs/xcoff.yaml @@ -0,0 +1,3 @@ +--- !XCOFF +FileHeader: + MagicNumber: 0x1DF diff --git a/llvm/test/tools/llvm-ar/count.test b/llvm/test/tools/llvm-ar/count.test --- a/llvm/test/tools/llvm-ar/count.test +++ b/llvm/test/tools/llvm-ar/count.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix # Test the 'N' count parameter. # Get a temp clean cwd to extract into. diff --git a/llvm/test/tools/llvm-ar/create.test b/llvm/test/tools/llvm-ar/create.test --- a/llvm/test/tools/llvm-ar/create.test +++ b/llvm/test/tools/llvm-ar/create.test @@ -1,3 +1,4 @@ +XFAIL: system-aix ## Test the creation warning and supression of that warning. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/dash-before-letter.test b/llvm/test/tools/llvm-ar/dash-before-letter.test --- a/llvm/test/tools/llvm-ar/dash-before-letter.test +++ b/llvm/test/tools/llvm-ar/dash-before-letter.test @@ -1,3 +1,4 @@ +XFAIL: system-aix # Test the use of dash before key letters. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/default-xcoff.test b/llvm/test/tools/llvm-ar/default-xcoff.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-ar/default-xcoff.test @@ -0,0 +1,10 @@ +; REQUIRES: system-aix +;; Test llvm-ar does not support Big AIX archive write operation. + +; RUN: yaml2obj %S/Inputs/xcoff.yaml -o %t.obj +; RUN: rm -f %t.ar +; RUN: not llvm-ar cr %t.ar %t.obj 2>&1 | FileCheck %s +; RUN: echo "test big archive" > %t.txt +; RUN: not llvm-ar cr %t.ar %t.txt 2>&1 | FileCheck %s + +; CHECK: unsupported big AIX write operation diff --git a/llvm/test/tools/llvm-ar/delete.test b/llvm/test/tools/llvm-ar/delete.test --- a/llvm/test/tools/llvm-ar/delete.test +++ b/llvm/test/tools/llvm-ar/delete.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test the deletion of members and that symbols are removed from the symbol table. # RUN: yaml2obj %s -o %t-delete.o --docnum=1 diff --git a/llvm/test/tools/llvm-ar/display-empty.test b/llvm/test/tools/llvm-ar/display-empty.test --- a/llvm/test/tools/llvm-ar/display-empty.test +++ b/llvm/test/tools/llvm-ar/display-empty.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test Display of empty archives. # RUN: rm -rf %t && mkdir -p %t diff --git a/llvm/test/tools/llvm-ar/double-hyphen.test b/llvm/test/tools/llvm-ar/double-hyphen.test --- a/llvm/test/tools/llvm-ar/double-hyphen.test +++ b/llvm/test/tools/llvm-ar/double-hyphen.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test the use of "--" on the commandline # RUN: echo contents > %t.txt diff --git a/llvm/test/tools/llvm-ar/error-opening-permission.test b/llvm/test/tools/llvm-ar/error-opening-permission.test --- a/llvm/test/tools/llvm-ar/error-opening-permission.test +++ b/llvm/test/tools/llvm-ar/error-opening-permission.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Unsupported on windows as marking files "unreadable" ## is non-trivial on windows. # UNSUPPORTED: system-windows diff --git a/llvm/test/tools/llvm-ar/extract.test b/llvm/test/tools/llvm-ar/extract.test --- a/llvm/test/tools/llvm-ar/extract.test +++ b/llvm/test/tools/llvm-ar/extract.test @@ -1,5 +1,5 @@ ## Test extract operation. -# XFAIL: system-darwin +# XFAIL: system-darwin,system-aix # RUN: rm -rf %t && mkdir -p %t/extracted/ diff --git a/llvm/test/tools/llvm-ar/flatten-thin-archive.test b/llvm/test/tools/llvm-ar/flatten-thin-archive.test --- a/llvm/test/tools/llvm-ar/flatten-thin-archive.test +++ b/llvm/test/tools/llvm-ar/flatten-thin-archive.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix # This test creates a thin archive that contains a thin archive, a regular # archive, and a file. # diff --git a/llvm/test/tools/llvm-ar/full-path-option.test b/llvm/test/tools/llvm-ar/full-path-option.test --- a/llvm/test/tools/llvm-ar/full-path-option.test +++ b/llvm/test/tools/llvm-ar/full-path-option.test @@ -1,3 +1,4 @@ +XFAIL: system-aix # Note: many of these tests depend on relative paths, so we have to cd to a # test directory first. RUN: mkdir -p %t && cd %t diff --git a/llvm/test/tools/llvm-ar/full-to-thin-archive.test b/llvm/test/tools/llvm-ar/full-to-thin-archive.test --- a/llvm/test/tools/llvm-ar/full-to-thin-archive.test +++ b/llvm/test/tools/llvm-ar/full-to-thin-archive.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test archives do not convert to thin archives. # RUN: rm -rf %t && mkdir -p %t diff --git a/llvm/test/tools/llvm-ar/insert-after.test b/llvm/test/tools/llvm-ar/insert-after.test --- a/llvm/test/tools/llvm-ar/insert-after.test +++ b/llvm/test/tools/llvm-ar/insert-after.test @@ -1,3 +1,4 @@ +XFAIL: system-aix ## Test inserting files after a file. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/insert-before.test b/llvm/test/tools/llvm-ar/insert-before.test --- a/llvm/test/tools/llvm-ar/insert-before.test +++ b/llvm/test/tools/llvm-ar/insert-before.test @@ -1,3 +1,4 @@ +XFAIL: system-aix ## Test inserting files before a file. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/move-after.test b/llvm/test/tools/llvm-ar/move-after.test --- a/llvm/test/tools/llvm-ar/move-after.test +++ b/llvm/test/tools/llvm-ar/move-after.test @@ -1,3 +1,4 @@ +XFAIL: system-aix ## Test moving files after a file. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/move-before.test b/llvm/test/tools/llvm-ar/move-before.test --- a/llvm/test/tools/llvm-ar/move-before.test +++ b/llvm/test/tools/llvm-ar/move-before.test @@ -1,3 +1,4 @@ +XFAIL: system-aix ## Test moving files after a file. RUN: touch %t1.txt diff --git a/llvm/test/tools/llvm-ar/mri-delete.test b/llvm/test/tools/llvm-ar/mri-delete.test --- a/llvm/test/tools/llvm-ar/mri-delete.test +++ b/llvm/test/tools/llvm-ar/mri-delete.test @@ -1,3 +1,4 @@ +XFAIL: system-aix RUN: yaml2obj %S/Inputs/elf.yaml -o %t.o RUN: rm -f %t.ar diff --git a/llvm/test/tools/llvm-ar/mri-nonascii.test b/llvm/test/tools/llvm-ar/mri-nonascii.test --- a/llvm/test/tools/llvm-ar/mri-nonascii.test +++ b/llvm/test/tools/llvm-ar/mri-nonascii.test @@ -1,3 +1,4 @@ +XFAIL: system-aix # Test non-ascii archive members RUN: rm -rf %t && mkdir -p %t/extracted diff --git a/llvm/test/tools/llvm-ar/non-windows-name-case.test b/llvm/test/tools/llvm-ar/non-windows-name-case.test --- a/llvm/test/tools/llvm-ar/non-windows-name-case.test +++ b/llvm/test/tools/llvm-ar/non-windows-name-case.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test that on windows, members are case insensitive. # UNSUPPORTED: system-windows diff --git a/llvm/test/tools/llvm-ar/plugin.test b/llvm/test/tools/llvm-ar/plugin.test --- a/llvm/test/tools/llvm-ar/plugin.test +++ b/llvm/test/tools/llvm-ar/plugin.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test that --plugin is ignored. # RUN: rm -f %t.a diff --git a/llvm/test/tools/llvm-ar/print.test b/llvm/test/tools/llvm-ar/print.test --- a/llvm/test/tools/llvm-ar/print.test +++ b/llvm/test/tools/llvm-ar/print.test @@ -1,5 +1,5 @@ ## Test Print output -# XFAIL: system-darwin +# XFAIL: system-darwin,system-aix # RUN: rm -rf %t && mkdir -p %t # RUN: echo file1 > %t/1.txt diff --git a/llvm/test/tools/llvm-ar/quick-append.test b/llvm/test/tools/llvm-ar/quick-append.test --- a/llvm/test/tools/llvm-ar/quick-append.test +++ b/llvm/test/tools/llvm-ar/quick-append.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test quick append # RUN: rm -rf %t && mkdir -p %t diff --git a/llvm/test/tools/llvm-ar/read-only-archive.test b/llvm/test/tools/llvm-ar/read-only-archive.test --- a/llvm/test/tools/llvm-ar/read-only-archive.test +++ b/llvm/test/tools/llvm-ar/read-only-archive.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test that read-only archives cannot be edited # RUN: rm -rf %t && mkdir -p %t diff --git a/llvm/test/tools/llvm-ar/response-utf8.test b/llvm/test/tools/llvm-ar/response-utf8.test --- a/llvm/test/tools/llvm-ar/response-utf8.test +++ b/llvm/test/tools/llvm-ar/response-utf8.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Check that response files can cope with non-ascii characters. # RUN: echo 'contents' > %t-£.txt diff --git a/llvm/test/tools/llvm-ar/thin-to-full-archive.test b/llvm/test/tools/llvm-ar/thin-to-full-archive.test --- a/llvm/test/tools/llvm-ar/thin-to-full-archive.test +++ b/llvm/test/tools/llvm-ar/thin-to-full-archive.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## Test thin archives do not siletly convert to full archives on write. # RUN: rm -f %tthin.a %tfull.a diff --git a/llvm/test/tools/llvm-libtool-darwin/archive-flattening.test b/llvm/test/tools/llvm-libtool-darwin/archive-flattening.test --- a/llvm/test/tools/llvm-libtool-darwin/archive-flattening.test +++ b/llvm/test/tools/llvm-libtool-darwin/archive-flattening.test @@ -1,3 +1,4 @@ +# XFAIL: system-aix ## This test checks that an archive is flattened correctly. # RUN: yaml2obj %S/Inputs/input1.yaml -o %t-input1.o diff --git a/llvm/test/tools/llvm-link/archivell.ll b/llvm/test/tools/llvm-link/archivell.ll --- a/llvm/test/tools/llvm-link/archivell.ll +++ b/llvm/test/tools/llvm-link/archivell.ll @@ -1,4 +1,4 @@ -# RUN: llvm-ar cr %t.fg.a %S/Inputs/f.ll %S/Inputs/g.ll +# RUN: llvm-ar --format=gnu cr %t.fg.a %S/Inputs/f.ll %S/Inputs/g.ll # RUN: not llvm-link %S/Inputs/h.ll %t.fg.a -o %t.linked.bc 2>&1 | FileCheck %s # RUN: rm -f %t.fg.a diff --git a/llvm/test/tools/llvm-nm/option-X.test b/llvm/test/tools/llvm-nm/option-X.test --- a/llvm/test/tools/llvm-nm/option-X.test +++ b/llvm/test/tools/llvm-nm/option-X.test @@ -56,7 +56,7 @@ # RUN: yaml2obj --docnum=2 -DFLAG=0x1DF %s -o %t_xcoff32.o # RUN: yaml2obj --docnum=2 -DFLAG=0x1F7 %s -o %t_xcoff64.o # RUN: rm -f %t.a -# RUN: llvm-ar -q -c %t.a %t_xcoff32.o %t_xcoff64.o +# RUN: llvm-ar --format=gnu -q -c %t.a %t_xcoff32.o %t_xcoff64.o # RUN: llvm-nm --format=just-symbols -X32 %t_xcoff32.o | \ # RUN: FileCheck --check-prefixes=XCOFF32 %s --implicit-check-not={{.}} diff --git a/llvm/test/tools/llvm-readobj/basic.test b/llvm/test/tools/llvm-readobj/basic.test --- a/llvm/test/tools/llvm-readobj/basic.test +++ b/llvm/test/tools/llvm-readobj/basic.test @@ -16,7 +16,7 @@ # Test that unrecognised files in archives are ignored. RUN: rm -f %t.a -RUN: llvm-ar rc %t.a %t.empty +RUN: llvm-ar --format=gnu rc %t.a %t.empty RUN: llvm-readobj --all %t.a 2>&1 | FileCheck --check-prefix=NO-OUTPUT --allow-empty %s NO-OUTPUT-NOT: {{.}} diff --git a/llvm/test/tools/llvm-size/archive.test b/llvm/test/tools/llvm-size/archive.test --- a/llvm/test/tools/llvm-size/archive.test +++ b/llvm/test/tools/llvm-size/archive.test @@ -5,21 +5,21 @@ ## Case 1: Empty archive. No output expected. # RUN: rm -f %t1.a -# RUN: llvm-ar rc %t1.a +# RUN: llvm-ar --format=gnu rc %t1.a # RUN: llvm-size -B %t1.a | count 0 # RUN: llvm-size -A %t1.a | count 0 ## Case 2: Single member. # RUN: rm -f %t2.a -# RUN: llvm-ar rc %t2.a %t1 +# RUN: llvm-ar --format=gnu rc %t2.a %t1 # RUN: llvm-size -B %t2.a | FileCheck %s -DARCHIVE=%t2.a --check-prefix=BERKELEY-1 # RUN: llvm-size -A %t2.a | FileCheck %s -DARCHIVE=%t2.a --check-prefix=SYSV-1 ## Case 3: Multiple members. # RUN: rm -f %t3.a -# RUN: llvm-ar rc %t3.a %t1 %t2 +# RUN: llvm-ar --format=gnu rc %t3.a %t1 %t2 # RUN: llvm-size -B %t3.a | FileCheck %s -DARCHIVE=%t3.a --check-prefixes=BERKELEY-1,BERKELEY-2 # RUN: llvm-size -A %t3.a | FileCheck %s -DARCHIVE=%t3.a --check-prefixes=SYSV-1,SYSV-2 diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -22,6 +22,7 @@ #include "llvm/Object/MachO.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/SymbolicFile.h" +#include "llvm/Object/XCOFFObjectFile.h" #include "llvm/Support/Chrono.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/ConvertUTF.h" @@ -881,9 +882,11 @@ } static object::Archive::Kind getDefaultForHost() { - return Triple(sys::getProcessTriple()).isOSDarwin() + Triple HostTriple(sys::getProcessTriple()); + return HostTriple.isOSDarwin() ? object::Archive::K_DARWIN - : object::Archive::K_GNU; + : (HostTriple.isOSAIX() ? object::Archive::K_AIXBIG + : object::Archive::K_GNU); } static object::Archive::Kind getKindFromMember(const NewArchiveMember &Member) { @@ -894,7 +897,9 @@ if (OptionalObject) return isa(**OptionalObject) ? object::Archive::K_DARWIN - : object::Archive::K_GNU; + : (isa(**OptionalObject) + ? object::Archive::K_AIXBIG + : object::Archive::K_GNU); // squelch the error in case we had a non-object file consumeError(OptionalObject.takeError()); @@ -939,6 +944,8 @@ else Kind = !NewMembers.empty() ? getKindFromMember(NewMembers.front()) : getDefaultForHost(); + if (Kind == object::Archive::K_AIXBIG) + fail("unsupported big AIX write operation"); break; case GNU: Kind = object::Archive::K_GNU;