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/binutils-2_25-branch] PowerPC64 GOLD: complain on misaligned _DS relocs


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

commit cff59f06b3b54ae3f5b61795c2719d4e28abf5d4
Author: Alan Modra <amodra@gmail.com>
Date:   Tue Feb 24 18:16:26 2015 +1030

    PowerPC64 GOLD: complain on misaligned _DS relocs
    
    	PR 18010
    	* powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always
    	complain if value is not a multiple of four.
    	(Target_powerpc::Relocate::relocate): Correct handling of
    	R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.

Diff:
---
 gold/ChangeLog  | 7 +++++++
 gold/powerpc.cc | 7 ++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 4fc46e4..90c3aa7 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,6 +1,13 @@
 2015-03-18  Alan Modra  <amodra@gmail.com>
 
 	Apply from master
+	2015-02-24  Alan Modra  <amodra@gmail.com>
+	PR 18010
+	* powerpc.cc (Powerpc_relocate_functions::addr16_ds): Always
+	complain if value is not a multiple of four.
+	(Target_powerpc::Relocate::relocate): Correct handling of
+	R_POWERPC_GOT_TPREL16 and R_POWERPC_GOT_TPREL16_LO for ppc64.
+
 	2015-02-18  Alan Modra  <amodra@gmail.com>
 	PR 17954
 	* powerpc.cc (Global_symbol_visitor_opd::operator()): Set default
diff --git a/gold/powerpc.cc b/gold/powerpc.cc
index 9843f2f..93f2fcc 100644
--- a/gold/powerpc.cc
+++ b/gold/powerpc.cc
@@ -1626,7 +1626,7 @@ public:
   addr16_ds(unsigned char* view, Address value, Overflow_check overflow)
   {
     Status stat = This::template rela<16,16>(view, 0, 0xfffc, value, overflow);
-    if (overflow != CHECK_NONE && (value & 3) != 0)
+    if ((value & 3) != 0)
       stat = STATUS_OVERFLOW;
     return stat;
   }
@@ -7518,8 +7518,11 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
 
     case elfcpp::R_POWERPC_GOT_DTPREL16:
     case elfcpp::R_POWERPC_GOT_DTPREL16_LO:
+    case elfcpp::R_POWERPC_GOT_TPREL16:
+    case elfcpp::R_POWERPC_GOT_TPREL16_LO:
       if (size == 64)
 	{
+	  // On ppc64 these are all ds form
 	  status = Reloc::addr16_ds(view, value, overflow);
 	  break;
 	}
@@ -7532,7 +7535,6 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
     case elfcpp::R_POWERPC_DTPREL16:
     case elfcpp::R_POWERPC_GOT_TLSGD16:
     case elfcpp::R_POWERPC_GOT_TLSLD16:
-    case elfcpp::R_POWERPC_GOT_TPREL16:
     case elfcpp::R_POWERPC_ADDR16_LO:
     case elfcpp::R_POWERPC_REL16_LO:
     case elfcpp::R_PPC64_TOC16_LO:
@@ -7542,7 +7544,6 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
     case elfcpp::R_POWERPC_DTPREL16_LO:
     case elfcpp::R_POWERPC_GOT_TLSGD16_LO:
     case elfcpp::R_POWERPC_GOT_TLSLD16_LO:
-    case elfcpp::R_POWERPC_GOT_TPREL16_LO:
       status = Reloc::addr16(view, value, overflow);
       break;


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