This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]