[lld][WebAssembly] Improve error reporting for bad ar archive members
authorSam Clegg <sbc@chromium.org>
Tue, 1 Mar 2022 00:32:02 +0000 (16:32 -0800)
committerSam Clegg <sbc@chromium.org>
Tue, 1 Mar 2022 23:21:53 +0000 (15:21 -0800)
Show the name of of the archive in the error message as well as the name
of the object within it.

Differential Revision: https://reviews.llvm.org/D120689

lld/test/wasm/bad-archive-member.s [new file with mode: 0644]
lld/wasm/InputFiles.cpp

diff --git a/lld/test/wasm/bad-archive-member.s b/lld/test/wasm/bad-archive-member.s
new file mode 100644 (file)
index 0000000..029027a
--- /dev/null
@@ -0,0 +1,11 @@
+# REQUIRES: x86
+
+# RUN: rm -rf %t.dir
+# RUN: mkdir -p %t.dir
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux -o %t.dir/elf.o %s
+# RUN: llvm-ar rcs %t.dir/libfoo.a %t.dir/elf.o
+# RUN: not wasm-ld %t.dir/libfoo.a -o /dev/null 2>&1 | FileCheck %s
+# CHECK: error: unknown file type: {{.*}}libfoo.a(elf.o)
+
+.globl _start
+_start:
index 1e69f16..ebff723 100644 (file)
@@ -87,7 +87,12 @@ InputFile *createObjectFile(MemoryBufferRef mb, StringRef archiveName,
   if (magic == file_magic::bitcode)
     return make<BitcodeFile>(mb, archiveName, offsetInArchive);
 
-  fatal("unknown file type: " + mb.getBufferIdentifier());
+  std::string name = mb.getBufferIdentifier().str();
+  if (!archiveName.empty()) {
+    name = archiveName.str() + "(" + name + ")";
+  }
+
+  fatal("unknown file type: " + name);
 }
 
 // Relocations contain either symbol or type indices.  This function takes a