From bdb892b99584bfd481ed23c90ad7ceafb31ca791 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 20 Mar 2012 18:16:38 +0000 Subject: Handle relocation against protected function for -Bsymbolic bfd/ 2012-03-20 H.J. Lu PR ld/13880 * elf32-i386.c (elf_i386_relocate_section): Don't issue an error for R_386_GOTOFF relocation against protected function if SYMBOLIC_BIND is true. * elf64-x86-64.c (elf_x86_64_relocate_section): Don't issue an error for R_X86_64_GOTOFF64 relocation against protected function when building executable or SYMBOLIC_BIND is true. ld/testsuite/ 2012-03-20 H.J. Lu PR ld/13880 * ld-i386/i386.exp: Run protected4 and protected5. * ld-x86-64/x86-64.exp: Likewise. * ld-i386/protected4.d: New. * ld-i386/protected4.s: Likewise. * ld-i386/protected5.d: Likewise. * ld-i386/protected5.s: Likewise. * ld-x86-64/protected4.d: Likewise. * ld-x86-64/protected4.s: Likewise. * ld-x86-64/protected5.d: Likewise. * ld-x86-64/protected5.s: Likewise. --- bfd/ChangeLog | 11 +++++++++++ bfd/elf32-i386.c | 1 + bfd/elf64-x86-64.c | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b9849f8..735a0ba 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +2012-03-20 H.J. Lu + + PR ld/13880 + * elf32-i386.c (elf_i386_relocate_section): Don't issue an error + for R_386_GOTOFF relocation against protected function if + SYMBOLIC_BIND is true. + + * elf64-x86-64.c (elf_x86_64_relocate_section): Don't issue an + error for R_X86_64_GOTOFF64 relocation against protected function + when building executable or SYMBOLIC_BIND is true. + 2012-03-16 Roland McGrath * config.bfd: Handle x86_64-*-nacl*. diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 4ae2166..f35e3c22 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -3503,6 +3503,7 @@ elf_i386_relocate_section (bfd *output_bfd, return FALSE; } else if (!info->executable + && !SYMBOLIC_BIND (info, h) && h->type == STT_FUNC && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) { diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index f2f803a..cc5ee42 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3464,8 +3464,9 @@ elf_x86_64_relocate_section (bfd *output_bfd, /* Check to make sure it isn't a protected function symbol for shared library since it may not be local when used as function address. */ - if (info->shared + if (!info->executable && h + && !SYMBOLIC_BIND (info, h) && h->def_regular && h->type == STT_FUNC && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) -- cgit v1.1