[PATCH] D26852: [ELF] Print archive name when it fails to parse

Eugene Leviant via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 21 01:38:00 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL287527: [ELF] Better error reporting for broken archives (authored by evgeny777).

Changed prior to commit:
  https://reviews.llvm.org/D26852?vs=78515&id=78694#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D26852

Files:
  lld/trunk/ELF/Driver.cpp
  lld/trunk/ELF/InputFiles.cpp
  lld/trunk/test/ELF/bad-archive.s


Index: lld/trunk/ELF/Driver.cpp
===================================================================
--- lld/trunk/ELF/Driver.cpp
+++ lld/trunk/ELF/Driver.cpp
@@ -99,21 +99,24 @@
 std::vector<MemoryBufferRef>
 LinkerDriver::getArchiveMembers(MemoryBufferRef MB) {
   std::unique_ptr<Archive> File =
-      check(Archive::create(MB), "failed to parse archive");
+      check(Archive::create(MB),
+            MB.getBufferIdentifier() + ": failed to parse archive");
 
   std::vector<MemoryBufferRef> V;
   Error Err = Error::success();
   for (const ErrorOr<Archive::Child> &COrErr : File->children(Err)) {
-    Archive::Child C = check(COrErr, "could not get the child of the archive " +
-                                         File->getFileName());
+    Archive::Child C =
+        check(COrErr, MB.getBufferIdentifier() +
+                          ": could not get the child of the archive");
     MemoryBufferRef MBRef =
         check(C.getMemoryBufferRef(),
-              "could not get the buffer for a child of the archive " +
-                  File->getFileName());
+              MB.getBufferIdentifier() +
+                  ": could not get the buffer for a child of the archive");
     V.push_back(MBRef);
   }
   if (Err)
-    fatal("Archive::children failed: " + toString(std::move(Err)));
+    fatal(MB.getBufferIdentifier() + ": Archive::children failed: " +
+          toString(std::move(Err)));
 
   // Take ownership of memory buffers created for members of thin archives.
   for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers())
Index: lld/trunk/ELF/InputFiles.cpp
===================================================================
--- lld/trunk/ELF/InputFiles.cpp
+++ lld/trunk/ELF/InputFiles.cpp
@@ -482,7 +482,8 @@
 }
 
 template <class ELFT> void ArchiveFile::parse() {
-  File = check(Archive::create(MB), "failed to parse archive");
+  File = check(Archive::create(MB),
+               MB.getBufferIdentifier() + ": failed to parse archive");
 
   // Read the symbol table to construct Lazy objects.
   for (const Archive::Symbol &Sym : File->symbols())
Index: lld/trunk/test/ELF/bad-archive.s
===================================================================
--- lld/trunk/test/ELF/bad-archive.s
+++ lld/trunk/test/ELF/bad-archive.s
@@ -0,0 +1,13 @@
+// REQUIRES: x86
+
+// Check bad archive error reporting with --whole-archive
+// and without it.
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: echo "!<arch>" > %t.bad.a
+// RUN: echo "bad archive" >> %t.bad.a
+// RUN: not ld.lld %t.o %t.bad.a -o %t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o --whole-archive %t.bad.a -o %t 2>&1 | FileCheck %s
+// CHECK: {{.*}}.bad.a: failed to parse archive
+
+.globl _start
+_start:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26852.78694.patch
Type: text/x-patch
Size: 2752 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161121/d31a52a2/attachment.bin>


More information about the llvm-commits mailing list