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 ignoring the parsing an imported symbol file that begins with #! +# RUN: echo "#!" > imp.txt +# RUN: llvm-nm --export-symbols imp.txt 2>&1 | FileCheck --allow-empty --implicit-check-not={{.}} %s + --- !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 parsing an imported symbol file that begins with #! when we export + // 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 =