summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog8
-rw-r--r--gold/i386.cc7
-rw-r--r--gold/x86_64.cc7
3 files changed, 14 insertions, 8 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 964b7d76045..c2acb20a74d 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,11 @@
+2019-09-28 Alan Modra <amodra@gmail.com>
+
+ PR 16794
+ * i386.cc (Target_i386::Relocate::relocate <R_386_GOTOFF>): Don't
+ ignore addend, apply using pcrel32.
+ * x86_64.cc (Target_x86_64::Relocate::relocate <R_X86_64_GOTOFF64>):
+ Similarly use pcrel64.
+
2019-09-24 Nick Clifton <nickc@redhat.com>
* descriptors.cc: Include <string>
diff --git a/gold/i386.cc b/gold/i386.cc
index dd0b268e10b..2d3db7c2c2f 100644
--- a/gold/i386.cc
+++ b/gold/i386.cc
@@ -2957,10 +2957,9 @@ Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo,
case elfcpp::R_386_GOTOFF:
{
- elfcpp::Elf_types<32>::Elf_Addr value;
- value = (psymval->value(object, 0)
- - target->got_plt_section()->address());
- Relocate_functions<32, false>::rel32(view, value);
+ elfcpp::Elf_types<32>::Elf_Addr reladdr;
+ reladdr = target->got_plt_section()->address();
+ Relocate_functions<32, false>::pcrel32(view, object, psymval, reladdr);
}
break;
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index c06a2822473..bafd90ef5ef 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -4852,10 +4852,9 @@ Target_x86_64<size>::Relocate::relocate(
case elfcpp::R_X86_64_GOTOFF64:
{
- typename elfcpp::Elf_types<size>::Elf_Addr value;
- value = (psymval->value(object, 0)
- - target->got_plt_section()->address());
- Reloc_funcs::rela64(view, value, addend);
+ typename elfcpp::Elf_types<size>::Elf_Addr reladdr;
+ reladdr = target->got_plt_section()->address();
+ Reloc_funcs::pcrela64(view, object, psymval, addend, reladdr);
}
break;