PR 6660
authorIan Lance Taylor <ian@airs.com>
Mon, 30 Jun 2008 16:36:40 +0000 (16:36 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 30 Jun 2008 16:36:40 +0000 (16:36 +0000)
PR 6682
* powerpc.cc (Powerpc_relocate_functions::addr16_ha) [both
versions]: Don't try to read the value in the contents, since we
don't use it.  Use the template endianness when writing.

gold/ChangeLog
gold/powerpc.cc

index b8d811866ff981e7dbe2767da913a4f19120fa2e..4eae47442658541ff783590baa0170c14a33fcce 100644 (file)
@@ -1,3 +1,11 @@
+2008-06-30  Ian Lance Taylor  <iant@google.com>
+
+       PR 6660
+       PR 6682
+       * powerpc.cc (Powerpc_relocate_functions::addr16_ha) [both
+       versions]: Don't try to read the value in the contents, since we
+       don't use it.  Use the template endianness when writing.
+
 2008-06-25  Cary Coutant  <ccoutant@google.com>
 
        * fileread.cc (File_read::make_view): Assert on zero-length view.
index 4f44fee175aa117fab27efc2d70745aca9d544ad..4e7406eb837d103c16570b6dc3bc8a04d6bf5f48 100644 (file)
@@ -594,9 +594,6 @@ public:
            typename elfcpp::Elf_types<size>::Elf_Addr value,
            typename elfcpp::Elf_types<size>::Elf_Addr addend)
   {
-    typedef typename elfcpp::Swap<16, true>::Valtype Valtype;
-    Valtype* wv = reinterpret_cast<Valtype*>(view);
-    Valtype val = elfcpp::Swap<16, true>::readval(wv);
     typename elfcpp::Elf_types<size>::Elf_Addr reloc;
 
     reloc = value + addend;
@@ -605,10 +602,7 @@ public:
       reloc += 0x10000;
     reloc >>= 16;
 
-    val &= ~static_cast<Valtype>(0xffff);
-    reloc &= static_cast<Valtype>(0xffff);
-
-    elfcpp::Swap<16, true>::writeval(wv, val | reloc);
+    elfcpp::Swap<16, big_endian>::writeval(view, reloc);
   }
 
   static inline void
@@ -617,9 +611,6 @@ public:
            const Symbol_value<size>* psymval,
            typename elfcpp::Elf_types<size>::Elf_Addr addend)
   {
-    typedef typename elfcpp::Swap<16, true>::Valtype Valtype;
-    Valtype* wv = reinterpret_cast<Valtype*>(view);
-    Valtype val = elfcpp::Swap<16, true>::readval(wv);
     typename elfcpp::Elf_types<size>::Elf_Addr reloc;
 
     reloc = psymval->value(object, addend);
@@ -628,10 +619,7 @@ public:
       reloc += 0x10000;
     reloc >>= 16;
 
-    val &= ~static_cast<Valtype>(0xffff);
-    reloc &= static_cast<Valtype>(0xffff);
-
-    elfcpp::Swap<16, true>::writeval(wv, val | reloc);
+    elfcpp::Swap<16, big_endian>::writeval(view, reloc);
   }
 
   // R_PPC_REL16: (Symbol + Addend - Address) & 0xffff