142 lines
5.2 KiB
Diff
142 lines
5.2 KiB
Diff
2012-03-09 H.J. Lu <hongjiu.lu@intel.com>
|
|
|
|
PR ld/13817
|
|
* bfd/elf32-i386.c (elf_i386_relocate_section): Restore
|
|
R_386_IRELATIVE.
|
|
|
|
* * elf64-x86-64.c (elf_x86_64_relocate_section): Restore
|
|
R_X86_64_IRELATIVE.
|
|
|
|
* ld-i386/pr13302.d: Updated.
|
|
* ld-x86-64/pr13082-5b.d: Likewise.
|
|
* ld-x86-64/pr13082-6a.d: Likewise.
|
|
* ld-x86-64/pr13082-6b.d: Likewise.
|
|
|
|
--- bfd/elf32-i386.c 21 Oct 2011 19:37:14 -0000 1.265
|
|
+++ bfd/elf32-i386.c 9 Mar 2012 16:28:36 -0000 1.266
|
|
@@ -3257,7 +3257,6 @@ elf_i386_relocate_section (bfd *output_b
|
|
bfd_byte *loc;
|
|
asection *sreloc;
|
|
bfd_vma offset;
|
|
- bfd_boolean relocate;
|
|
|
|
/* Need a dynamic relocation to get the real function
|
|
adddress. */
|
|
@@ -3278,14 +3277,15 @@ elf_i386_relocate_section (bfd *output_b
|
|
|| info->executable)
|
|
{
|
|
/* This symbol is resolved locally. */
|
|
- outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
|
|
- relocate = TRUE;
|
|
+ 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);
|
|
}
|
|
else
|
|
- {
|
|
- outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
|
|
- relocate = FALSE;
|
|
- }
|
|
+ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
|
|
|
|
sreloc = htab->elf.irelifunc;
|
|
loc = sreloc->contents;
|
|
@@ -3298,8 +3298,7 @@ elf_i386_relocate_section (bfd *output_b
|
|
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. */
|
|
- if (! relocate)
|
|
- continue;
|
|
+ continue;
|
|
}
|
|
/* FALLTHROUGH */
|
|
case R_386_PC32:
|
|
--- bfd/elf64-x86-64.c 6 Mar 2012 20:15:56 -0000 1.248
|
|
+++ bfd/elf64-x86-64.c 9 Mar 2012 16:28:36 -0000 1.249
|
|
@@ -3156,7 +3156,6 @@ elf_x86_64_relocate_section (bfd *output
|
|
{
|
|
Elf_Internal_Rela outrel;
|
|
asection *sreloc;
|
|
- bfd_boolean relocate;
|
|
|
|
/* Need a dynamic relocation to get the real function
|
|
address. */
|
|
@@ -3176,15 +3175,15 @@ elf_x86_64_relocate_section (bfd *output
|
|
|| info->executable)
|
|
{
|
|
/* This symbol is resolved locally. */
|
|
- outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
|
|
- outrel.r_addend = relocation;
|
|
- relocate = TRUE;
|
|
+ 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);
|
|
}
|
|
else
|
|
{
|
|
outrel.r_info = htab->r_info (h->dynindx, r_type);
|
|
outrel.r_addend = 0;
|
|
- relocate = FALSE;
|
|
}
|
|
|
|
sreloc = htab->elf.irelifunc;
|
|
@@ -3195,8 +3194,7 @@ elf_x86_64_relocate_section (bfd *output
|
|
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. */
|
|
- if (! relocate)
|
|
- continue;
|
|
+ continue;
|
|
}
|
|
/* FALLTHROUGH */
|
|
case R_X86_64_PC32:
|
|
|
|
--- ld/testsuite/ld-i386/pr13302.d 21 Oct 2011 19:37:15 -0000 1.1
|
|
+++ ld/testsuite/ld-i386/pr13302.d 9 Mar 2012 16:28:37 -0000 1.2
|
|
@@ -5,7 +5,7 @@
|
|
|
|
Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name
|
|
-[0-9a-f]+ +[0-9a-f]+ +R_386_RELATIVE +
|
|
+[0-9a-f]+ +[0-9a-f]+ +R_386_IRELATIVE +
|
|
|
|
Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name
|
|
--- ld/testsuite/ld-x86-64/pr13082-5b.d 21 Oct 2011 19:37:15 -0000 1.2
|
|
+++ ld/testsuite/ld-x86-64/pr13082-5b.d 9 Mar 2012 16:28:38 -0000 1.3
|
|
@@ -6,7 +6,7 @@
|
|
|
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
|
-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
|
|
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
|
|
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
|
--- ld/testsuite/ld-x86-64/pr13082-6a.d 21 Oct 2011 19:37:15 -0000 1.2
|
|
+++ ld/testsuite/ld-x86-64/pr13082-6a.d 9 Mar 2012 16:28:38 -0000 1.3
|
|
@@ -6,7 +6,7 @@
|
|
|
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
|
-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
|
|
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
|
|
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
|
--- ld/testsuite/ld-x86-64/pr13082-6b.d 21 Oct 2011 19:37:15 -0000 1.2
|
|
+++ ld/testsuite/ld-x86-64/pr13082-6b.d 9 Mar 2012 16:28:38 -0000 1.3
|
|
@@ -6,7 +6,7 @@
|
|
|
|
Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|
|
-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
|
|
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
|
|
|
|
Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
|
|
Offset Info Type Sym. Value Symbol's Name \+ Addend
|