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.
This commit is contained in:
parent
6cda5a2082
commit
9892017203
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -1,3 +1,15 @@
|
||||
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.
|
||||
|
||||
2011-10-21 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/13302
|
||||
|
@ -210,3 +210,4 @@ if { !([istarget "i?86-*-linux*"]
|
||||
|
||||
run_dump_test "compressed1"
|
||||
run_dump_test "pr12627"
|
||||
run_dump_test "pr13302"
|
||||
|
12
ld/testsuite/ld-i386/pr13302.d
Normal file
12
ld/testsuite/ld-i386/pr13302.d
Normal file
@ -0,0 +1,12 @@
|
||||
#name: PR ld/13302
|
||||
#as: --32
|
||||
#ld: -pie -melf_i386
|
||||
#readelf: -r --wide
|
||||
|
||||
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 +
|
||||
|
||||
Relocation section '.rel.plt' 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_IRELATIVE +
|
11
ld/testsuite/ld-i386/pr13302.s
Normal file
11
ld/testsuite/ld-i386/pr13302.s
Normal file
@ -0,0 +1,11 @@
|
||||
.text
|
||||
.globl _start
|
||||
.type ifunc, @gnu_indirect_function
|
||||
_start:
|
||||
lea .Ljmp@GOTOFF(%ebx), %eax
|
||||
ifunc:
|
||||
jmp *(%eax)
|
||||
.section .data.rel.ro.local,"aw",@progbits
|
||||
.align 4
|
||||
.Ljmp:
|
||||
.long ifunc
|
@ -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_IRELATIVE +[0-9a-f]+
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[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
|
||||
|
@ -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_IRELATIVE +[0-9a-f]+
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[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
|
||||
|
@ -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_IRELATIVE +[0-9a-f]+
|
||||
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[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
|
||||
|
Loading…
x
Reference in New Issue
Block a user