This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Remove warning about references from shared objects to hidden symbols.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=c20ceeb226168ffd84078ef74d890c2b7f69a435

commit c20ceeb226168ffd84078ef74d890c2b7f69a435
Author: Yiran Wang <yiran@google.com>
Date:   Mon Jul 20 08:47:57 2015 -0700

    Remove warning about references from shared objects to hidden symbols.
    
    gold/
    	PR gold/15574
    	* resolve.cc (Symbol_table): Remove warning about references
    	from shared objects to hidden symbols.
    	* testsuite/Makefile.am (hidden_test): Add hidden_test.syms.
    	* testsuite/Makefile.in: Regenerate.
    	* testsuite/hidden_test.sh: Check dynamic symbol table; update
    	expected error messages.

Diff:
---
 gold/ChangeLog                | 11 +++++++++++
 gold/resolve.cc               | 13 ++++---------
 gold/testsuite/Makefile.am    |  4 +++-
 gold/testsuite/Makefile.in    |  3 +++
 gold/testsuite/hidden_test.sh | 24 ++++++++++++++----------
 5 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 309b4753..de73b7d 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,14 @@
+2015-07-20  Yiran Wang  <yiran@google.com>
+	Cary Coutant  <ccoutant@gmail.com>
+
+	PR gold/15574
+	* resolve.cc (Symbol_table): Remove warning about references
+	from shared objects to hidden symbols.
+	* testsuite/Makefile.am (hidden_test): Add hidden_test.syms.
+	* testsuite/Makefile.in: Regenerate.
+	* testsuite/hidden_test.sh: Check dynamic symbol table; update
+	expected error messages.
+
 2015-07-14  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* compressed_output.cc (Output_compressed_section::set_final_data_size):
diff --git a/gold/resolve.cc b/gold/resolve.cc
index fdae0ba..22d1e78 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -286,15 +286,10 @@ Symbol_table::resolve(Sized_symbol<size>* to,
            && (to->visibility() == elfcpp::STV_HIDDEN
                || to->visibility() == elfcpp::STV_INTERNAL))
     {
-      // A dynamic object cannot reference a hidden or internal symbol
-      // defined in another object.
-      gold_warning(_("%s symbol '%s' in %s is referenced by DSO %s"),
-                   (to->visibility() == elfcpp::STV_HIDDEN
-                    ? "hidden"
-                    : "internal"),
-                   to->demangled_name().c_str(),
-                   to->object()->name().c_str(),
-                   object->name().c_str());
+      // The symbol is hidden, so a reference from a shared object
+      // cannot bind to it.  We tried issuing a warning in this case,
+      // but that produces false positives when the symbol is
+      // actually resolved in a different shared object (PR 15574).
       return;
     }
   else
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
index 41186c6..cf56c32 100644
--- a/gold/testsuite/Makefile.am
+++ b/gold/testsuite/Makefile.am
@@ -2099,11 +2099,13 @@ endif MCMODEL_MEDIUM
 # referenced by a shared library.
 check_SCRIPTS += hidden_test.sh
 check_DATA += hidden_test.err
-MOSTLYCLEANFILES += hidden_test hidden_test.err
+MOSTLYCLEANFILES += hidden_test hidden_test.err hidden_test.syms
 libhidden.so: hidden_test_1.c gcctestdir/ld
 	$(COMPILE) -Bgcctestdir/ -g -shared -fPIC -w -o $@ $(srcdir)/hidden_test_1.c
 hidden_test: hidden_test_main.o libhidden.so gcctestdir/ld
 	$(LINK) -Bgcctestdir/ -Wl,-R,. hidden_test_main.o libhidden.so 2>hidden_test.err
+hidden_test.syms: hidden_test
+	$(TEST_NM) -D hidden_test > $@
 hidden_test.err: hidden_test
 	@touch hidden_test.err
 
diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
index 563f598..fc10639 100644
--- a/gold/testsuite/Makefile.in
+++ b/gold/testsuite/Makefile.in
@@ -498,6 +498,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	discard_locals_relocatable_test1.out \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	discard_locals_relocatable_test2.out \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	hidden_test hidden_test.err \
+@GCC_TRUE@@NATIVE_LINKER_TRUE@	hidden_test.syms \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	retain_symbols_file_test \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	retain_symbols_file_test.in \
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	retain_symbols_file_test.stdout \
@@ -6013,6 +6014,8 @@ uninstall-am:
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	$(COMPILE) -Bgcctestdir/ -g -shared -fPIC -w -o $@ $(srcdir)/hidden_test_1.c
 @GCC_TRUE@@NATIVE_LINKER_TRUE@hidden_test: hidden_test_main.o libhidden.so gcctestdir/ld
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	$(LINK) -Bgcctestdir/ -Wl,-R,. hidden_test_main.o libhidden.so 2>hidden_test.err
+@GCC_TRUE@@NATIVE_LINKER_TRUE@hidden_test.syms: hidden_test
+@GCC_TRUE@@NATIVE_LINKER_TRUE@	$(TEST_NM) -D hidden_test > $@
 @GCC_TRUE@@NATIVE_LINKER_TRUE@hidden_test.err: hidden_test
 @GCC_TRUE@@NATIVE_LINKER_TRUE@	@touch hidden_test.err
 @GCC_TRUE@@NATIVE_LINKER_TRUE@retain_symbols_file_test.so: basic_pic_test.o gcctestdir/ld
diff --git a/gold/testsuite/hidden_test.sh b/gold/testsuite/hidden_test.sh
index 8366bc9..48bae4a 100755
--- a/gold/testsuite/hidden_test.sh
+++ b/gold/testsuite/hidden_test.sh
@@ -29,11 +29,11 @@
 # error messages are issued for the references to internal and
 # hidden symbols.  The errors will be found in hidden_test.err.
 
-check()
+check_missing()
 {
-    if ! grep -q "$2" "$1"
+    if grep -q "$2" "$1"
     then
-	echo "Did not find expected error in $1:"
+	echo "Found unexpected error in $1:"
 	echo "   $2"
 	echo ""
 	echo "Actual error output below:"
@@ -42,25 +42,29 @@ check()
     fi
 }
 
-check_missing()
+check_missing_sym()
 {
     if grep -q "$2" "$1"
     then
-	echo "Found unexpected error in $1:"
+	echo "Found unexpected symbol in $1:"
 	echo "   $2"
 	echo ""
-	echo "Actual error output below:"
+	echo "Actual nm output below:"
 	cat "$1"
 	exit 1
     fi
 }
 
-# We should see errors for hidden and internal symbols.
-check hidden_test.err "hidden symbol 'main_hidden' in hidden_test_main.o is referenced by DSO libhidden.so"
-check hidden_test.err "internal symbol 'main_internal' in hidden_test_main.o is referenced by DSO libhidden.so"
-
 # We shouldn't see errors for the default and protected symbols.
 check_missing hidden_test.err "main_default"
 check_missing hidden_test.err "main_protected"
 
+# We shouldn't see errors for the hidden and internal symbols either (PR 15574).
+check_missing hidden_test.err "main_hidden"
+check_missing hidden_test.err "main_internal"
+
+# We shouldn't see the hidden or internal symbols in the dynamic symbol table.
+check_missing_sym hidden_test.syms "main_hidden"
+check_missing_sym hidden_test.syms "main_internal"
+
 exit 0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]