From 4b889c3013d7d45e2775781c3904b657419db2fa Mon Sep 17 00:00:00 2001 From: Ian Coolidge Date: Mon, 20 Apr 2015 18:04:07 -0700 Subject: [PATCH] Ensure that dynamically loaded libraries won't use separate copies of GNU_UNIQUE symbols. gold/ * symtab.cc (Symbol::should_add_dynsym_entry): Return true for GNU_UNIQUE. --- gold/ChangeLog | 5 +++++ gold/symtab.cc | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 789ba66726c..e736d331043 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2015-04-20 Ian Coolidge + + * symtab.cc (Symbol::should_add_dynsym_entry): Return true for + GNU_UNIQUE. + 2015-04-17 Rafael Ávila de Espíndola * gc.cc (Garbage_collection::do_transitive_closure): Use back and diff --git a/gold/symtab.cc b/gold/symtab.cc index d4f40c8d54e..c1972210d67 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -419,9 +419,13 @@ Symbol::should_add_dynsym_entry(Symbol_table* symtab) const } // If exporting all symbols or building a shared library, + // or the symbol should be globally unique (GNU_UNIQUE), // and the symbol is defined in a regular object and is // externally visible, we need to add it. - if ((parameters->options().export_dynamic() || parameters->options().shared()) + if ((parameters->options().export_dynamic() + || parameters->options().shared() + || (parameters->options().gnu_unique() + && this->binding() == elfcpp::STB_GNU_UNIQUE)) && !this->is_from_dynobj() && !this->is_undefined() && this->is_externally_visible()) -- 2.30.2