diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 9 | ||||
-rw-r--r-- | bfd/elflink.c | 9 |
2 files changed, 16 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 55c37f0..056833e 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2015-04-14 H.J. Lu <hongjiu.lu@intel.com> + + PR ld/pr17709 + * elflink.c (_bfd_elf_adjust_dynamic_copy): Check + info->extern_protected_data when warning copy relocs against + protected symbols. + (_bfd_elf_symbol_refs_local_p): Check info->extern_protected_data + when checking protected non-function symbols. + 2015-04-13 John Baldwin <jhb@FreeBSD.org> * elf.c (elfcore_grok_note): Recognize NT_X86_XSTATE on diff --git a/bfd/elflink.c b/bfd/elflink.c index e3d1abe..ea9246b 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -2675,7 +2675,9 @@ _bfd_elf_adjust_dynamic_copy (struct bfd_link_info *info, /* No error if extern_protected_data is true. */ if (h->protected_def - && !get_elf_backend_data (dynbss->owner)->extern_protected_data) + && (!info->extern_protected_data + || (info->extern_protected_data < 0 + && !get_elf_backend_data (dynbss->owner)->extern_protected_data))) info->callbacks->einfo (_("%P: copy reloc against protected `%T' is dangerous\n"), h->root.root.string); @@ -2837,7 +2839,10 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, /* If extern_protected_data is false, STV_PROTECTED non-function symbols are local. */ - if (!bed->extern_protected_data && !bed->is_function_type (h->type)) + if ((!info->extern_protected_data + || (info->extern_protected_data < 0 + && !bed->extern_protected_data)) + && !bed->is_function_type (h->type)) return TRUE; /* Function pointer equality tests may require that STV_PROTECTED |