This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] Fix internal error when linking an archive library with no preceding objects.
- From: Cary Coutant <ccoutant at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 21 Jul 2015 19:44:32 -0000
- Subject: [binutils-gdb] Fix internal error when linking an archive library with no preceding objects.
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cb5cf5e26ea2e42937a2ce1b662e61e4772ba6f9
commit cb5cf5e26ea2e42937a2ce1b662e61e4772ba6f9
Author: Cary Coutant <ccoutant@gmail.com>
Date: Tue Jul 21 12:42:07 2015 -0700
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().
Diff:
---
gold/ChangeLog | 7 +++++++
gold/archive.cc | 12 ++++++++----
gold/parameters.cc | 2 +-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/gold/ChangeLog b/gold/ChangeLog
index becff51..b7f0a33 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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.
diff --git a/gold/archive.cc b/gold/archive.cc
index 6d25980..cc69c40 100644
--- a/gold/archive.cc
+++ b/gold/archive.cc
@@ -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;
diff --git a/gold/parameters.cc b/gold/parameters.cc
index 8eab000..5ed1912 100644
--- a/gold/parameters.cc
+++ b/gold/parameters.cc
@@ -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;
}