Use relative relocation for R_X86_64_32 on x32
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 3 Sep 2013 17:38:57 +0000 (17:38 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 3 Sep 2013 17:38:57 +0000 (17:38 +0000)
2013-09-03  Pavel Chupin  <pavel.v.chupin@intel.com>

PR gold/15927
* x86_64.cc (Target_x86_64<size>::Scan::global): Use relative
relocation for R_X86_64_32 on x32.

gold/ChangeLog
gold/x86_64.cc

index df61e9c..ed8105d 100644 (file)
@@ -1,3 +1,9 @@
+2013-09-03  Pavel Chupin  <pavel.v.chupin@intel.com>
+
+       PR gold/15927
+       * x86_64.cc (Target_x86_64<size>::Scan::global): Use relative
+       relocation for R_X86_64_32 on x32.
+
 2013-08-27  Roland McGrath  <mcgrathr@google.com>
 
        * output.cc (Output_segment::set_section_addresses): Take new
index dca6022..5bf78fd 100644 (file)
@@ -2742,7 +2742,8 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
                                                       reloc.get_r_offset(),
                                                       reloc.get_r_addend());
              }
-           else if (r_type == elfcpp::R_X86_64_64
+           else if (((size == 64 && r_type == elfcpp::R_X86_64_64)
+                     || (size == 32 && r_type == elfcpp::R_X86_64_32))
                     && gsym->can_use_relative_reloc(false))
              {
                Reloc_section* rela_dyn = target->rela_dyn_section(layout);