From 3d4fde6974a1237d79055ee734d99cc49c6fd3f9 Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Mon, 7 Sep 2015 09:44:11 -0700 Subject: Fix internal error caused by IFUNC patch. The previous commit to fix PR gold/18886 converted STT_IFUNC to STT_FUNC when resolving to a symbol defined in a shared library. This leads to an internal error if the shared library symbol is seen first, as we do not convert the symbol at all. We need to override the STT_IFUNC in add_from_dynobj() instead of in override_base(). gold/ PR gold/18930 PR gold/18886 * resolve.cc (Symbol::override_base): Don't convert IFUNC symbols here. * symtab.cc (Symbol_table::add_from_dynobj): Convert them here instead. --- gold/resolve.cc | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'gold/resolve.cc') diff --git a/gold/resolve.cc b/gold/resolve.cc index dd5b6b6afa6..2dcf7b5b1e8 100644 --- a/gold/resolve.cc +++ b/gold/resolve.cc @@ -98,13 +98,7 @@ Symbol::override_base(const elfcpp::Sym& sym, this->is_ordinary_shndx_ = is_ordinary; // Don't override st_type from plugin placeholder symbols. if (object->pluginobj() == NULL) - { - // Turn IFUNC symbols from shared libraries into normal FUNC symbols. - elfcpp::STT type = sym.get_st_type(); - if (object->is_dynamic() && type == elfcpp::STT_GNU_IFUNC) - type = elfcpp::STT_FUNC; - this->type_ = type; - } + this->type_ = sym.get_st_type(); this->binding_ = sym.get_st_bind(); this->override_visibility(sym.get_st_visibility()); this->nonvis_ = sym.get_st_nonvis(); -- cgit v1.2.1