2010-02-04 Doug Kwan <dougkwan@google.com>
authorDoug Kwan <dougkwan@google.com>
Fri, 5 Feb 2010 00:30:35 +0000 (00:30 +0000)
committerDoug Kwan <dougkwan@google.com>
Fri, 5 Feb 2010 00:30:35 +0000 (00:30 +0000)
PR 11247
* arm-reloc-property.cc (cstdio): Include.
* configure.ac (targetobjs): Remove duplicates.
* configure: Regenerate.
* resolve.cc (Symbol_table::resolve): Explicit instantiate both
big and little endian version for a given address size.

gold/ChangeLog
gold/arm-reloc-property.cc
gold/configure
gold/configure.ac
gold/resolve.cc

index 05cfc71..e4c6d03 100644 (file)
@@ -1,3 +1,12 @@
+2010-02-04  Doug Kwan  <dougkwan@google.com>
+
+       PR 11247
+       * arm-reloc-property.cc (cstdio): Include.
+       * configure.ac (targetobjs): Remove duplicates.
+       * configure: Regenerate.
+       * resolve.cc (Symbol_table::resolve): Explicit instantiate both
+       big and little endian version for a given address size.
+
 2010-02-03  Doug Kwan  <dougkwan@google.com>
 
        * arm-reloc-property.cc
index ab37263..4f8fa9e 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "gold.h"
 
+#include <cstdio>
 #include <cstring>
 #include <stack>
 #include <string>
index 4817e44..dbc6319 100755 (executable)
@@ -3410,6 +3410,9 @@ fi
   fi
 done
 
+# Remove any duplicates.
+targetobjs=`echo $targetobjs | tr ' ' '\n' | sort | uniq | tr '\n' ' '`
+
 if test -n "$targ_32_little"; then
 
 $as_echo "#define HAVE_TARGET_32_LITTLE 1" >>confdefs.h
index 7102670..4bf223c 100644 (file)
@@ -162,6 +162,9 @@ for targ in $target $canon_targets; do
   fi
 done
 
+# Remove any duplicates.
+targetobjs=`echo $targetobjs | tr ' ' '\n' | sort | uniq | tr '\n' ' '`
+
 if test -n "$targ_32_little"; then
   AC_DEFINE(HAVE_TARGET_32_LITTLE, 1,
              [Define to support 32-bit little-endian targets])
index 3c7c7a8..8b1c321 100644 (file)
@@ -916,7 +916,10 @@ Symbol_table::override_with_special(Sized_symbol<size>* tosym,
 // script to restrict this to only the ones needed for implemented
 // targets.
 
-#ifdef HAVE_TARGET_32_LITTLE
+// We have to instantiate both big and little endian versions because
+// these are used by other templates that depends on size only.
+
+#if defined(HAVE_TARGET_32_LITTLE) || defined(HAVE_TARGET_32_BIG)
 template
 void
 Symbol_table::resolve<32, false>(
@@ -927,9 +930,7 @@ Symbol_table::resolve<32, false>(
     unsigned int orig_st_shndx,
     Object* object,
     const char* version);
-#endif
 
-#ifdef HAVE_TARGET_32_BIG
 template
 void
 Symbol_table::resolve<32, true>(
@@ -942,7 +943,7 @@ Symbol_table::resolve<32, true>(
     const char* version);
 #endif
 
-#ifdef HAVE_TARGET_64_LITTLE
+#if defined(HAVE_TARGET_64_LITTLE) || defined(HAVE_TARGET_64_BIG)
 template
 void
 Symbol_table::resolve<64, false>(
@@ -953,9 +954,7 @@ Symbol_table::resolve<64, false>(
     unsigned int orig_st_shndx,
     Object* object,
     const char* version);
-#endif
 
-#ifdef HAVE_TARGET_64_BIG
 template
 void
 Symbol_table::resolve<64, true>(