* target-reloc.h (relocate_section): Check whether a symbol is
authorIan Lance Taylor <ian@airs.com>
Tue, 16 Sep 2008 17:23:37 +0000 (17:23 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 16 Sep 2008 17:23:37 +0000 (17:23 +0000)
defined by the ABI before reporting an undefined symbol error.
* target.h (Target::is_defined_by_abi): Make parameter const.
(Target::do_is_defined_by_abi): Likewise.
* i386.cc (Target_i386::do_is_defined_by_abi): Likewise.
* powerpc.cc (Target_powerpc::do_is_defined_by_abi): Likewise.
* sparc.cc (Target_sparc::do_is_defined_by_abi): Likewise.
* x86_64.cc (Target_x86_64::do_is_defined_by_abi): Likewise.
* testsuite/Makefile.am (tls_test_shared.so): Add -Wl,-z,defs.
* testsuite/Makefile.in: Rebuild.

gold/ChangeLog
gold/i386.cc
gold/powerpc.cc
gold/sparc.cc
gold/target-reloc.h
gold/target.h
gold/testsuite/Makefile.am
gold/testsuite/Makefile.in
gold/x86_64.cc

index dc84079..22e4263 100644 (file)
@@ -1,5 +1,16 @@
 2008-09-16  Ian Lance Taylor  <iant@google.com>
 
+       * target-reloc.h (relocate_section): Check whether a symbol is
+       defined by the ABI before reporting an undefined symbol error.
+       * target.h (Target::is_defined_by_abi): Make parameter const.
+       (Target::do_is_defined_by_abi): Likewise.
+       * i386.cc (Target_i386::do_is_defined_by_abi): Likewise.
+       * powerpc.cc (Target_powerpc::do_is_defined_by_abi): Likewise.
+       * sparc.cc (Target_sparc::do_is_defined_by_abi): Likewise.
+       * x86_64.cc (Target_x86_64::do_is_defined_by_abi): Likewise.
+       * testsuite/Makefile.am (tls_test_shared.so): Add -Wl,-z,defs.
+       * testsuite/Makefile.in: Rebuild.
+
        * fileread.cc (make_view): Add casts to avoid warning.
 
 2008-09-16  Alexandre Oliva  <aoliva@redhat.com>
index e2fbb25..8a5558e 100644 (file)
@@ -135,7 +135,7 @@ class Target_i386 : public Sized_target<32, false>
 
   // Return whether SYM is defined by the ABI.
   bool
-  do_is_defined_by_abi(Symbol* sym) const
+  do_is_defined_by_abi(const Symbol* sym) const
   { return strcmp(sym->name(), "___tls_get_addr") == 0; }
 
   // Return the size of the GOT section.
index 421cfdb..05ce4fc 100644 (file)
@@ -129,7 +129,7 @@ class Target_powerpc : public Sized_target<size, big_endian>
 
   // Return whether SYM is defined by the ABI.
   bool
-  do_is_defined_by_abi(Symbol* sym) const
+  do_is_defined_by_abi(const Symbol* sym) const
   {
     return strcmp(sym->name(), "___tls_get_addr") == 0;
   }
index 7da59dd..cca78b7 100644 (file)
@@ -130,7 +130,7 @@ class Target_sparc : public Sized_target<size, big_endian>
                           section_size_type reloc_view_size);
   // Return whether SYM is defined by the ABI.
   bool
-  do_is_defined_by_abi(Symbol* sym) const
+  do_is_defined_by_abi(const Symbol* sym) const
   {
     // XXX Really need to support this better...
     if (sym->type() == elfcpp::STT_SPARC_REGISTER)
index 6683ddd..1cdc244 100644 (file)
@@ -283,6 +283,7 @@ relocate_section(
       if (sym != NULL
          && sym->is_undefined()
          && sym->binding() != elfcpp::STB_WEAK
+          && !target->is_defined_by_abi(sym)
          && (!parameters->options().shared()       // -shared
               || parameters->options().defs()))     // -z defs
        gold_undefined_symbol(sym, relinfo, i, offset);
index 30fa008..460ac96 100644 (file)
@@ -164,7 +164,7 @@ class Target
   // Return whether SYM is known to be defined by the ABI.  This is
   // used to avoid inappropriate warnings about undefined symbols.
   bool
-  is_defined_by_abi(Symbol* sym) const
+  is_defined_by_abi(const Symbol* sym) const
   { return this->do_is_defined_by_abi(sym); }
 
  protected:
@@ -222,7 +222,7 @@ class Target
 
   // Virtual function which may be implemented by the child class.
   virtual bool
-  do_is_defined_by_abi(Symbol*) const
+  do_is_defined_by_abi(const Symbol*) const
   { return false; }
 
  private:
index c9dd470..1f08b5a 100644 (file)
@@ -468,7 +468,7 @@ tls_test_file2_pic.o: tls_test_file2.cc
 tls_test_c_pic.o: tls_test_c.c
        $(COMPILE) -c -fpic $(TLS_TEST_C_CFLAGS) -o $@ $<
 tls_test_shared.so: tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o gcctestdir/ld
-       $(CXXLINK) -Bgcctestdir/ -shared tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o
+       $(CXXLINK) -Bgcctestdir/ -shared tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o -Wl,-z,defs
 tls_test_shared2.so: tls_test_file2_pic.o gcctestdir/ld
        $(CXXLINK) -Bgcctestdir/ -shared tls_test_file2_pic.o
 
index 9f72b88..e3d8dca 100644 (file)
@@ -2125,7 +2125,7 @@ uninstall-am: uninstall-info-am
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@tls_test_c_pic.o: tls_test_c.c
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@       $(COMPILE) -c -fpic $(TLS_TEST_C_CFLAGS) -o $@ $<
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@tls_test_shared.so: tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o gcctestdir/ld
-@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@       $(CXXLINK) -Bgcctestdir/ -shared tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o
+@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@       $(CXXLINK) -Bgcctestdir/ -shared tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o -Wl,-z,defs
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@tls_test_shared2.so: tls_test_file2_pic.o gcctestdir/ld
 @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@       $(CXXLINK) -Bgcctestdir/ -shared tls_test_file2_pic.o
 
index 46c4a22..69f76a0 100644 (file)
@@ -139,7 +139,7 @@ class Target_x86_64 : public Sized_target<64, false>
 
   // Return whether SYM is defined by the ABI.
   bool
-  do_is_defined_by_abi(Symbol* sym) const
+  do_is_defined_by_abi(const Symbol* sym) const
   { return strcmp(sym->name(), "__tls_get_addr") == 0; }
 
   // Return the size of the GOT section.