gold: Provide more failed archive member info in error message
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 6 Dec 2018 20:28:46 +0000 (12:28 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 6 Dec 2018 20:29:01 +0000 (12:29 -0800)
When gold fails to get an archive member, its error message doesn't
have information for

1. The failed archive member name.
2. The cause of failure: non-ELF object vs non-IR object.

This patch adds the failed archive member name and non-ELF/non-IR info
to gold error message.

* archive.cc (Archive::get_elf_object_for_member): Also print
archive member and non-ELF/non-IR info on error.

gold/ChangeLog
gold/archive.cc

index 2379536e702be7578f711e2f7f979609ad6f5a6f..5c5bca290ca89a9f99fcab0497dae71b8801699c 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * archive.cc (Archive::get_elf_object_for_member): Also print
+       archive member and non-ELF/non-IR info on error.
+
 2018-12-05  Alan Modra  <amodra@gmail.com>
 
        * symtab.h (Symbol::Symbol): Avoid -Wclass-memaccess warning.
index 4df9e74b07a1b2cbc2028f7017710624778aad84..fe2a507da7b1ed8b8a425e207f84926d26fd1239 100644 (file)
@@ -690,6 +690,7 @@ Archive::get_elf_object_for_member(off_t off, bool* punconfigured)
   int read_size;
   Object *obj = NULL;
   bool is_elf_obj = false;
+  bool unclaimed = false;
 
   if (is_elf_object(input_file, memoff, &ehdr, &read_size))
     {
@@ -716,12 +717,20 @@ Archive::get_elf_object_for_member(off_t off, bool* punconfigured)
            delete obj;
           return plugin_obj;
         }
+
+      unclaimed = true;
     }
 
   if (!is_elf_obj)
     {
-      gold_error(_("%s: member at %zu is not an ELF object"),
-                this->name().c_str(), static_cast<size_t>(off));
+      if (unclaimed)
+       gold_error(_("%s: plugin failed to claim member %s at %zu"),
+                  this->name().c_str(), member_name.c_str(),
+                  static_cast<size_t>(off));
+      else
+       gold_error(_("%s: member %s at %zu is not an ELF object"),
+                  this->name().c_str(), member_name.c_str(),
+                  static_cast<size_t>(off));
       return NULL;
     }