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] Patch for PR gold/19042 - unsupported reloc 311/312.


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

commit 4d2f5d5824be99326c2c3e459c298e338856d8c8
Author: Han Shen <shenhan@google.com>
Date:   Tue Oct 27 15:17:54 2015 -0700

    Patch for PR gold/19042 - unsupported reloc 311/312.
    
    gold/
    
    	* aarch64.cc (Target_aarch64::Scan::local): Add support for
    	reloc 311/312.

Diff:
---
 gold/ChangeLog  |  7 +++++++
 gold/aarch64.cc | 23 +++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 46a0636..dc1c0ea 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,10 @@
+2015-10.27  Han Shen  <shenhan@google.com>
+
+	PR gold/19042 - unsupported reloc 311/312.
+
+	* aarch64.cc (Target_aarch64::Scan::local): Add support for
+	reloc 311/312.
+
 2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* x86_64.cc (Target_x86_64<size>::Scan::get_reference_flags):
diff --git a/gold/aarch64.cc b/gold/aarch64.cc
index 2e3c42a..275d94c 100644
--- a/gold/aarch64.cc
+++ b/gold/aarch64.cc
@@ -5987,6 +5987,29 @@ Target_aarch64<size, big_endian>::Scan::local(
     case elfcpp::R_AARCH64_PREL16:
       break;
 
+    case elfcpp::R_AARCH64_ADR_GOT_PAGE:
+    case elfcpp::R_AARCH64_LD64_GOT_LO12_NC:
+      // This pair of relocations is used to access a specific GOT entry.
+      {
+	bool is_new = false;
+	// This symbol requires a GOT entry.
+	if (is_ifunc)
+	  is_new = got->add_local_plt(object, r_sym, GOT_TYPE_STANDARD);
+	else
+	  is_new = got->add_local(object, r_sym, GOT_TYPE_STANDARD);
+	if (is_new && parameters->options().output_is_position_independent())
+	  target->rela_dyn_section(layout)->
+	    add_local_relative(object,
+			       r_sym,
+			       elfcpp::R_AARCH64_RELATIVE,
+			       got,
+			       object->local_got_offset(r_sym,
+							GOT_TYPE_STANDARD),
+			       0,
+			       false);
+      }
+      break;
+
     case elfcpp::R_AARCH64_LD_PREL_LO19:        // 273
     case elfcpp::R_AARCH64_ADR_PREL_LO21:       // 274
     case elfcpp::R_AARCH64_ADR_PREL_PG_HI21:    // 275


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