gold: Provide more failed archive member info in error message

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.
This commit is contained in:
H.J. Lu
2018-12-06 12:28:46 -08:00
parent bb6bf75e7a
commit 9da0a9988d
2 changed files with 16 additions and 2 deletions

View 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.

View 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;
}