Support x32 IFUNC function pointer
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 27 Jan 2012 23:26:55 +0000 (23:26 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 27 Jan 2012 23:26:55 +0000 (23:26 +0000)
2012-01-27  H.J. Lu  <hongjiu.lu@intel.com>

* x86_64.cc (Scan::global): Support x32 IFUNC function pointer.

gold/ChangeLog
gold/x86_64.cc

index 8ed05f5..627dcb2 100644 (file)
@@ -1,5 +1,9 @@
 2012-01-27  H.J. Lu  <hongjiu.lu@intel.com>
 
+       * x86_64.cc (Scan::global): Support x32 IFUNC function pointer.
+
+2012-01-27  H.J. Lu  <hongjiu.lu@intel.com>
+
        * configure.ac: Check if -mcmodel=medium works.
        * configure: Regenerated.
 
index cfc6384..029f89c 100644 (file)
@@ -2476,7 +2476,8 @@ Target_x86_64<size>::Scan::global(Symbol_table* symtab,
                 target->copy_reloc(symtab, layout, object,
                                    data_shndx, output_section, gsym, reloc);
               }
-           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->type() == elfcpp::STT_GNU_IFUNC
                     && gsym->can_use_relative_reloc(false)
                     && !gsym->is_from_dynobj()