diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp --- a/llvm/lib/Object/ArchiveWriter.cpp +++ b/llvm/lib/Object/ArchiveWriter.cpp @@ -76,9 +76,11 @@ if (auto ObjOrErr = object::SymbolicFile::createSymbolicFile( MemBufferRef, file_magic::bitcode, &Context)) { auto &IRObject = cast(**ObjOrErr); - return Triple(IRObject.getTargetTriple()).isOSDarwin() + auto TargetTriple = Triple(IRObject.getTargetTriple()); + return TargetTriple.isOSDarwin() ? object::Archive::K_DARWIN - : object::Archive::K_GNU; + : (TargetTriple.isOSAIX() ? object::Archive::K_AIXBIG + : object::Archive::K_GNU); } else { // Squelch the error in case this was not a SymbolicFile. consumeError(ObjOrErr.takeError()); diff --git a/llvm/test/tools/llvm-ar/Inputs/aix-foo.ll b/llvm/test/tools/llvm-ar/Inputs/aix-foo.ll new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-ar/Inputs/aix-foo.ll @@ -0,0 +1,8 @@ +target datalayout = "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512" +target triple = "powerpc64-ibm-aix7.2.0.0" + +define signext i32 @foo() { +entry: + ret i32 42 +} + diff --git a/llvm/test/tools/llvm-ar/aix-bitcode.test b/llvm/test/tools/llvm-ar/aix-bitcode.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-ar/aix-bitcode.test @@ -0,0 +1,7 @@ +# Check if llvm-ar correctly archives bitcode files on AIX. +# RUN: rm -rf %t && mkdir -p %t +# RUN: llvm-as %S/Inputs/aix-foo.ll -o %t/aix-foo.bc +# RUN: llvm-ar qc %t/aix-foo.a %t/aix-foo.bc +# RUN: FileCheck %s --input-file=%t/aix-foo.a + +# CHECK: bigaf