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] Gold: Don't fail on R_386_GOT32X relocation


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

commit 493d4b48decc2b3c5fe9d2df68bcee67fdd8b7cb
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 22 04:54:42 2015 -0700

    Gold: Don't fail on R_386_GOT32X relocation
    
    This patch updates gold to treat the R_386_GOT32X relocation proposed in
    
    https://groups.google.com/forum/#!topic/ia32-abi/GbJJskkid4I
    
    the same as R_386_GOT32.  FIXME: Gold should perform the transformations
    as suggested.
    
    elfcpp/
    
    	* i386.h (R_386_GOT32X): New.
    
    gold/
    
    	* i386.cc (Target_i386::Scan::get_reference_flags(): Treat
    	R_386_GOT32X the same as R_386_GOT32.
    	(Target_i386::Scan::local): Likewise.
    	(Target_i386::Scan::possible_function_pointer_reloc): Likewise.
    	(Target_i386::Scan::global): Likewise.
    	(Target_i386::Relocate::relocate): Likewise.
    	(Target_i386::Relocatable_size_for_reloc::get_size_for_reloc):
    	Likewise.

Diff:
---
 elfcpp/ChangeLog |  4 ++++
 elfcpp/i386.h    |  1 +
 gold/ChangeLog   | 11 +++++++++++
 gold/i386.cc     |  6 ++++++
 4 files changed, 22 insertions(+)

diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog
index 18c1d5a..c0f1698 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,7 @@
+2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* i386.h (R_386_GOT32X): New.
+
 2015-10-13  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR gold/19118
diff --git a/elfcpp/i386.h b/elfcpp/i386.h
index 16fdef8..9d57a0f 100644
--- a/elfcpp/i386.h
+++ b/elfcpp/i386.h
@@ -86,6 +86,7 @@ enum
   R_386_TLS_DESC = 41,      // TLS descriptor containing pointer to code and
                             // to argument, returning TLS offset for symbol
   R_386_IRELATIVE = 42,     // Adjust indirectly by program base
+  R_386_GOT32X = 43,        // 32 bit GOT entry, relaxable
   // Used by Intel.
   R_386_USED_BY_INTEL_200 = 200,
   // GNU vtable garbage collection extensions.
diff --git a/gold/ChangeLog b/gold/ChangeLog
index a3d0571..c0af029 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,14 @@
+2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* i386.cc (Target_i386::Scan::get_reference_flags(): Treat
+	R_386_GOT32X the same as R_386_GOT32.
+	(Target_i386::Scan::local): Likewise.
+	(Target_i386::Scan::possible_function_pointer_reloc): Likewise.
+	(Target_i386::Scan::global): Likewise.
+	(Target_i386::Relocate::relocate): Likewise.
+	(Target_i386::Relocatable_size_for_reloc::get_size_for_reloc):
+	Likewise.
+
 2015-10-20  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* testsuite/Makefile.am (x86_64_mov_to_lea11): Replace
diff --git a/gold/i386.cc b/gold/i386.cc
index 202f518..36c5724 100644
--- a/gold/i386.cc
+++ b/gold/i386.cc
@@ -1690,6 +1690,7 @@ Target_i386::Scan::get_reference_flags(unsigned int r_type)
       return Symbol::FUNCTION_CALL | Symbol::RELATIVE_REF;
 
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
       // Absolute in GOT.
       return Symbol::ABSOLUTE_REF;
 
@@ -1854,6 +1855,7 @@ Target_i386::Scan::local(Symbol_table* symtab,
       break;
 
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
       {
 	// We need GOT section.
 	Output_data_got<32, false>* got = target->got_section(symtab, layout);
@@ -2105,6 +2107,7 @@ Target_i386::Scan::possible_function_pointer_reloc(unsigned int r_type)
     case elfcpp::R_386_8:
     case elfcpp::R_386_GOTOFF:
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
       {
 	return true;
       }
@@ -2266,6 +2269,7 @@ Target_i386::Scan::global(Symbol_table* symtab,
       break;
 
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
       {
 	// The symbol requires a GOT section.
 	Output_data_got<32, false>* got = target->got_section(symtab, layout);
@@ -2834,6 +2838,7 @@ Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo,
       break;
 
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
       // Convert
       // mov foo@GOT(%reg), %reg
       // to
@@ -3617,6 +3622,7 @@ Target_i386::Relocatable_size_for_reloc::get_size_for_reloc(
     case elfcpp::R_386_32:
     case elfcpp::R_386_PC32:
     case elfcpp::R_386_GOT32:
+    case elfcpp::R_386_GOT32X:
     case elfcpp::R_386_PLT32:
     case elfcpp::R_386_GOTOFF:
     case elfcpp::R_386_GOTPC:


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