aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2012-01-27 23:26:55 +0000
committerH.J. Lu <hjl.tools@gmail.com>2012-01-27 23:26:55 +0000
commit1bae613c85d3266ff261e36da1625582dd5d2655 (patch)
tree67beb6fad0a2e89a80fcfa12185d6147c2172be1
parent24482ca0577ae94fdfa6523d4a5942fc3a610d47 (diff)
downloadgdb-1bae613c85d3266ff261e36da1625582dd5d2655.zip
gdb-1bae613c85d3266ff261e36da1625582dd5d2655.tar.gz
gdb-1bae613c85d3266ff261e36da1625582dd5d2655.tar.bz2
Support x32 IFUNC function pointer
2012-01-27 H.J. Lu <hongjiu.lu@intel.com> * x86_64.cc (Scan::global): Support x32 IFUNC function pointer.
-rw-r--r--gold/ChangeLog4
-rw-r--r--gold/x86_64.cc3
2 files changed, 6 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 8ed05f5..627dcb2 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -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.
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index cfc6384..029f89c 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -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()