Fix problem where undef can fail to trigger archive rescan. am: 41d8fcbbad
am: 73fe135cd3

Change-Id: I721a8cab09b24a6de1bdee0f47de584367c2885b
diff --git a/binutils-2.27/gold/symtab.cc b/binutils-2.27/gold/symtab.cc
index c872f47..e0b7e9d 100644
--- a/binutils-2.27/gold/symtab.cc
+++ b/binutils-2.27/gold/symtab.cc
@@ -989,7 +989,7 @@
   // ins.second: true if new entry was inserted, false if not.
 
   Sized_symbol<size>* ret;
-  bool was_undefined;
+  bool was_undefined_in_reg;
   bool was_common;
   if (!ins.second)
     {
@@ -997,7 +997,7 @@
       ret = this->get_sized_symbol<size>(ins.first->second);
       gold_assert(ret != NULL);
 
-      was_undefined = ret->is_undefined();
+      was_undefined_in_reg = ret->is_undefined() && ret->in_reg();
       // Commons from plugins are just placeholders.
       was_common = ret->is_common() && ret->object()->pluginobj() == NULL;
 
@@ -1048,7 +1048,7 @@
 	  // it, then change it to NAME/VERSION.
 	  ret = this->get_sized_symbol<size>(insdefault.first->second);
 
-	  was_undefined = ret->is_undefined();
+	  was_undefined_in_reg = ret->is_undefined() && ret->in_reg();
 	  // Commons from plugins are just placeholders.
 	  was_common = ret->is_common() && ret->object()->pluginobj() == NULL;
 
@@ -1060,7 +1060,7 @@
 	}
       else
 	{
-	  was_undefined = false;
+	  was_undefined_in_reg = false;
 	  was_common = false;
 
 	  Sized_target<size, big_endian>* target =
@@ -1104,9 +1104,10 @@
 	ret->set_is_default();
     }
 
-  // Record every time we see a new undefined symbol, to speed up
-  // archive groups.
-  if (!was_undefined && ret->is_undefined())
+  // Record every time we see a new undefined symbol, to speed up archive
+  // groups. We only care about symbols undefined in regular objects here
+  // because undefined symbols only in dynamic objects should't trigger rescans.
+  if (!was_undefined_in_reg && ret->is_undefined() && ret->in_reg())
     {
       ++this->saw_undefined_;
       if (parameters->options().has_plugins())