diff options
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 9 |
1 files changed, 7 insertions, 2 deletions
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 |