diff --git a/llvm/test/tools/llvm-nm/XCOFF/export-symbols.test b/llvm/test/tools/llvm-nm/XCOFF/export-symbols.test --- a/llvm/test/tools/llvm-nm/XCOFF/export-symbols.test +++ b/llvm/test/tools/llvm-nm/XCOFF/export-symbols.test @@ -52,6 +52,10 @@ # RUN: yaml2obj -DFLAG=0x2000 --docnum=2 %s -o %t_shared.o # RUN: llvm-nm --export-symbols %t_shared.o | count 0 +## Test that llvm-nm ignores AIX linker import files when using --export-symbols. These start with "#!". +# RUN: echo -e "#!\n bar\n foo " > %t_imp.txt +# RUN: llvm-nm --export-symbols %t_imp.txt 2>&1 | count 0 + --- !XCOFF FileHeader: MagicNumber: 0x1DF diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -2262,6 +2262,14 @@ if (error(BufferOrErr.getError(), Filename)) return SymbolList; + // Ignore AIX linker import files (these files start with "#!"), when + // exporting symbols. + const char *BuffStart = (*BufferOrErr)->getBufferStart(); + size_t BufferSize = (*BufferOrErr)->getBufferSize(); + if (ExportSymbols && BufferSize >= 2 && BuffStart[0] == '#' && + BuffStart[1] == '!') + return SymbolList; + LLVMContext Context; LLVMContext *ContextPtr = NoLLVMBitcode ? nullptr : &Context; Expected> BinaryOrErr =