diff options
Diffstat (limited to 'gold/plugin.cc')
-rw-r--r-- | gold/plugin.cc | 17 |
1 files changed, 12 insertions, 5 deletions
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. |