aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2011-10-21 19:37:15 +0000
committerH.J. Lu <hjl.tools@gmail.com>2011-10-21 19:37:15 +0000
commit9892017203958346ddb7920e8c4678d8c1640775 (patch)
treeee3cc095f4bd2c5c3438c1bbeac6574b09621e60 /bfd
parent6cda5a20820e95cf01d510f2478cd4b992cf416b (diff)
downloadfsf-binutils-gdb-9892017203958346ddb7920e8c4678d8c1640775.zip
fsf-binutils-gdb-9892017203958346ddb7920e8c4678d8c1640775.tar.gz
fsf-binutils-gdb-9892017203958346ddb7920e8c4678d8c1640775.tar.bz2
Replace IRELATIVE relocations with RELATIVE in .rel.dyn.
bfd/ 2011-10-21 H.J. Lu <hongjiu.lu@intel.com> PR ld/13302 * elf32-i386.c (elf_i386_relocate_section): Replace R_386_IRELATIVE with R_386_RELATIVE. * elf64-x86-64.c (elf_x86_64_relocate_section): Replace R_X86_64_IRELATIVE with R_X86_64_RELATIVE. ld/testsuite/ 2011-10-21 H.J. Lu <hongjiu.lu@intel.com> PR ld/13302 * ld-i386/i386.exp: Run pr13302. * ld-i386/pr13302.d: New. * ld-i386/pr13302.s: Likewise. * ld-x86-64/pr13082-5b.d: Updated. * ld-x86-64/pr13082-6a.d: Likewise. * ld-x86-64/pr13082-6b.d: Likewise.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog9
-rw-r--r--bfd/elf32-i386.c17
-rw-r--r--bfd/elf64-x86-64.c12
3 files changed, 25 insertions, 13 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a20a75d..39f1a2a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@
+2011-10-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/13302
+ * elf32-i386.c (elf_i386_relocate_section): Replace
+ R_386_IRELATIVE with R_386_RELATIVE.
+
+ * elf64-x86-64.c (elf_x86_64_relocate_section): Replace
+ R_X86_64_IRELATIVE with R_X86_64_RELATIVE.
+
2011-10-21 H.J. Lu <hongjiu.lu@intel.com>.
* elf32-i386.c (elf_i386_relocate_section): Fix a typo in
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 01c0669..d187305 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -3257,6 +3257,7 @@ elf_i386_relocate_section (bfd *output_bfd,
bfd_byte *loc;
asection *sreloc;
bfd_vma offset;
+ bfd_boolean relocate;
/* Need a dynamic relocation to get the real function
adddress. */
@@ -3277,15 +3278,14 @@ elf_i386_relocate_section (bfd *output_bfd,
|| info->executable)
{
/* This symbol is resolved locally. */
- outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
- bfd_put_32 (output_bfd,
- (h->root.u.def.value
- + h->root.u.def.section->output_section->vma
- + h->root.u.def.section->output_offset),
- contents + offset);
+ outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
+ relocate = TRUE;
}
else
- outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ {
+ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ relocate = FALSE;
+ }
sreloc = htab->elf.irelifunc;
loc = sreloc->contents;
@@ -3298,7 +3298,8 @@ elf_i386_relocate_section (bfd *output_bfd,
we need to include the symbol value so that it
becomes an addend for the dynamic reloc. For an
internal symbol, we have updated addend. */
- continue;
+ if (! relocate)
+ continue;
}
/* FALLTHROUGH */
case R_386_PC32:
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 645e5a2..2206dd4 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3161,6 +3161,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
{
Elf_Internal_Rela outrel;
asection *sreloc;
+ bfd_boolean relocate;
/* Need a dynamic relocation to get the real function
address. */
@@ -3180,15 +3181,15 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|| info->executable)
{
/* This symbol is resolved locally. */
- outrel.r_info = htab->r_info (0, R_X86_64_IRELATIVE);
- outrel.r_addend = (h->root.u.def.value
- + h->root.u.def.section->output_section->vma
- + h->root.u.def.section->output_offset);
+ outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
+ outrel.r_addend = relocation;
+ relocate = FALSE;
}
else
{
outrel.r_info = htab->r_info (h->dynindx, r_type);
outrel.r_addend = 0;
+ relocate = FALSE;
}
sreloc = htab->elf.irelifunc;
@@ -3199,7 +3200,8 @@ elf_x86_64_relocate_section (bfd *output_bfd,
we need to include the symbol value so that it
becomes an addend for the dynamic reloc. For an
internal symbol, we have updated addend. */
- continue;
+ if (! relocate)
+ continue;
}
/* FALLTHROUGH */
case R_X86_64_PC32: