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:
H.J. Lu 2011-10-21 19:37:15 +00:00
parent 6cda5a2082
commit 9892017203
10 changed files with 64 additions and 16 deletions

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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

View File

@ -210,3 +210,4 @@ if { !([istarget "i?86-*-linux*"]
run_dump_test "compressed1"
run_dump_test "pr12627"
run_dump_test "pr13302"

View 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 +

View 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

View File

@ -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

View File

@ -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

View File

@ -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