From: H.J. Lu Date: Fri, 9 Mar 2012 16:28:38 +0000 (+0000) Subject: Restore R_386_IRELATIVE and R_X86_64_IRELATIVE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=56b8aada47fa75b378cfa821857730d4e3400318;p=binutils-gdb.git Restore R_386_IRELATIVE and R_X86_64_IRELATIVE bfd/ 2012-03-09 H.J. Lu 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/testsuite/ 2012-03-09 H.J. Lu PR ld/13817 * 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 21402408d6d..66a7339b6f7 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2012-03-09 H.J. Lu + + 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. + 2012-03-08 Tristan Gingold * vms-lib.c (_bfd_vms_lib_write_archive_contents): Set maximum diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index d1873051b4d..01c06695956 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -3257,7 +3257,6 @@ 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. */ @@ -3278,14 +3277,15 @@ elf_i386_relocate_section (bfd *output_bfd, || 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_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. */ - if (! relocate) - continue; + continue; } /* FALLTHROUGH */ case R_386_PC32: diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 81ed8660a24..47f12952d7c 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3156,7 +3156,6 @@ 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. */ @@ -3176,15 +3175,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_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_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. */ - if (! relocate) - continue; + continue; } /* FALLTHROUGH */ case R_X86_64_PC32: diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index b49cce5c2ef..1e3c5c13848 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2012-03-09 H.J. Lu + + PR ld/13817 + * 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. + 2012-03-06 Alan Modra PR ld/13683 diff --git a/ld/testsuite/ld-i386/pr13302.d b/ld/testsuite/ld-i386/pr13302.d index 3d85d085d79..35c09ae0de2 100644 --- a/ld/testsuite/ld-i386/pr13302.d +++ b/ld/testsuite/ld-i386/pr13302.d @@ -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 diff --git a/ld/testsuite/ld-x86-64/pr13082-5b.d b/ld/testsuite/ld-x86-64/pr13082-5b.d index 48e37c3eedc..1c5a5e79b53 100644 --- a/ld/testsuite/ld-x86-64/pr13082-5b.d +++ b/ld/testsuite/ld-x86-64/pr13082-5b.d @@ -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 diff --git a/ld/testsuite/ld-x86-64/pr13082-6a.d b/ld/testsuite/ld-x86-64/pr13082-6a.d index de90bb85e99..9a1a6551853 100644 --- a/ld/testsuite/ld-x86-64/pr13082-6a.d +++ b/ld/testsuite/ld-x86-64/pr13082-6a.d @@ -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 diff --git a/ld/testsuite/ld-x86-64/pr13082-6b.d b/ld/testsuite/ld-x86-64/pr13082-6b.d index 66ff59b0149..792c3483eba 100644 --- a/ld/testsuite/ld-x86-64/pr13082-6b.d +++ b/ld/testsuite/ld-x86-64/pr13082-6b.d @@ -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