Fix internal error when linking an archive library with no preceding objects.

gold/
	PR gold/18696
	* archive.cc (Library_base::should_include_member): Don't use entry
	point for relocatable links, or if target is not yet valid.
	* parameters.cc (Parameters::entry): Check target_valid().
This commit is contained in:
Cary Coutant 2015-07-21 12:42:07 -07:00
parent af1b22f300
commit cb5cf5e26e
3 changed files with 16 additions and 5 deletions

View File

@ -1,3 +1,10 @@
2015-07-21 Cary Coutant <ccoutant@gmail.com>
PR gold/18696
* archive.cc (Library_base::should_include_member): Don't use entry
point for relocatable links, or if target is not yet valid.
* parameters.cc (Parameters::entry): Check target_valid().
2015-07-20 Han Shen <shenhan@google.com>
Optimize erratum 843419 fix.

View File

@ -138,11 +138,15 @@ Library_base::should_include_member(Symbol_table* symtab, Layout* layout,
return Library_base::SHOULD_INCLUDE_YES;
}
if (strcmp(sym_name, parameters->entry()) == 0)
if (!parameters->options().relocatable())
{
*why = "entry symbol ";
*why += sym_name;
return Library_base::SHOULD_INCLUDE_YES;
const char* entry_sym = parameters->entry();
if (entry_sym != NULL && strcmp(sym_name, entry_sym) == 0)
{
*why = "entry symbol ";
*why += sym_name;
return Library_base::SHOULD_INCLUDE_YES;
}
}
return Library_base::SHOULD_INCLUDE_UNKNOWN;

View File

@ -237,7 +237,7 @@ const char*
Parameters::entry() const
{
const char* ret = this->options().entry();
if (ret == NULL)
if (ret == NULL && parameters->target_valid())
ret = parameters->target().entry_symbol_name();
return ret;
}