Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -167,8 +167,13 @@ return; case file_magic::archive: if (InWholeArchive) { - for (MemoryBufferRef MB : getArchiveMembers(MBRef)) - Files.push_back(createObjectFile(MB, Path)); + for (MemoryBufferRef MB : getArchiveMembers(MBRef)) { + file_magic Magic = identify_magic(MB.getBuffer()); + if (Magic == file_magic::elf_relocatable || + Magic == file_magic::bitcode) + Files.push_back (createObjectFile (MB, Path)); + } + return; } Files.push_back(make(MBRef)); Index: test/ELF/non-elf-archive.s =================================================================== --- test/ELF/non-elf-archive.s +++ test/ELF/non-elf-archive.s @@ -0,0 +1,9 @@ +// REQUIRES: x86 +// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux +// RUN: echo foo > %t.foo +// RUN: rm -f %t.a +// RUN: llvm-ar rc %t.a %t.o %t.foo +// RUN: ld.lld --whole-archive %t.a -o t + + .global _start +_start: