commit 3c537f7fdb11f02f7082749f3f21dfdd2c2025e8
Author: Peter Collingbourne <pcc@google.com>
Date:   Wed Feb 4 09:47:28 2015 -0800

    Resolve forwarding symbols in plugins.
    
    2015-02-04  Peter Collingbourne  <pcc@google.com>
    
    	* plugin.cc (Pluginobj::get_symbol_resolution_info): Resolve
    	forwarding symbols when computing symbol resolution info for plugins.

diff --git a/gold/plugin.cc b/gold/plugin.cc
index bde8c78..68da8e3 100644
--- a/gold/plugin.cc
+++ b/gold/plugin.cc
@@ -914,7 +914,8 @@ is_visible_from_outside(Symbol* lsym)
 // Get symbol resolution info.
 
 ld_plugin_status
-Pluginobj::get_symbol_resolution_info(int nsyms,
+Pluginobj::get_symbol_resolution_info(Symbol_table* symtab,
+				      int nsyms,
 				      ld_plugin_symbol* syms,
 				      int version) const
 {
@@ -943,6 +944,8 @@ Pluginobj::get_symbol_resolution_info(int nsyms,
     {
       ld_plugin_symbol* isym = &syms[i];
       Symbol* lsym = this->symbols_[i];
+      if (lsym->is_forwarder())
+        lsym = symtab->resolve_forwards(lsym);
       ld_plugin_symbol_resolution res = LDPR_UNKNOWN;
 
       if (lsym->is_undefined())
@@ -1511,14 +1514,16 @@ static enum ld_plugin_status
 get_symbols(const void* handle, int nsyms, ld_plugin_symbol* syms)
 {
   gold_assert(parameters->options().has_plugins());
-  Object* obj = parameters->options().plugins()->object(
+  Plugin_manager* plugins = parameters->options().plugins();
+  Object* obj = plugins->object(
     static_cast<unsigned int>(reinterpret_cast<intptr_t>(handle)));
   if (obj == NULL)
     return LDPS_ERR;
   Pluginobj* plugin_obj = obj->pluginobj();
   if (plugin_obj == NULL)
     return LDPS_ERR;
-  return plugin_obj->get_symbol_resolution_info(nsyms, syms, 1);
+  Symbol_table* symtab = plugins->symtab();
+  return plugin_obj->get_symbol_resolution_info(symtab, nsyms, syms, 1);
 }
 
 // Version 2 of the above.  The only difference is that this version
@@ -1528,14 +1533,16 @@ static enum ld_plugin_status
 get_symbols_v2(const void* handle, int nsyms, ld_plugin_symbol* syms)
 {
   gold_assert(parameters->options().has_plugins());
-  Object* obj = parameters->options().plugins()->object(
+  Plugin_manager* plugins = parameters->options().plugins();
+  Object* obj = plugins->object(
     static_cast<unsigned int>(reinterpret_cast<intptr_t>(handle)));
   if (obj == NULL)
     return LDPS_ERR;
   Pluginobj* plugin_obj = obj->pluginobj();
   if (plugin_obj == NULL)
     return LDPS_ERR;
-  return plugin_obj->get_symbol_resolution_info(nsyms, syms, 2);
+  Symbol_table* symtab = plugins->symtab();
+  return plugin_obj->get_symbol_resolution_info(symtab, nsyms, syms, 2);
 }
 
 // Add a new (real) input file generated by a plugin.
diff --git a/gold/plugin.h b/gold/plugin.h
index ef78b84..f926879 100644
--- a/gold/plugin.h
+++ b/gold/plugin.h
@@ -282,6 +282,10 @@ class Plugin_manager
   input_objects() const
   { return this->input_objects_; }
 
+  Symbol_table*
+  symtab()
+  { return this->symtab_; }
+
   Layout*
   layout()
   { return this->layout_; }
@@ -396,7 +400,8 @@ class Pluginobj : public Object
 
   // Fill in the symbol resolution status for the given plugin symbols.
   ld_plugin_status
-  get_symbol_resolution_info(int nsyms,
+  get_symbol_resolution_info(Symbol_table* symtab,
+			     int nsyms,
 			     ld_plugin_symbol* syms,
 			     int version) const;
 
