diff options
Diffstat (limited to 'bfd/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index ab72306..2b37c27 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -3955,19 +3955,22 @@ elf_x86_64_relocate_section (bfd *output_bfd, /* Relocation is relative to the start of the global offset table. */ - /* 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. */ + /* Check to make sure it isn't a protected function or data + symbol for shared library since it may not be local when + used as function address or with copy relocation. */ if (!info->executable && h && !SYMBOLIC_BIND (info, h) && h->def_regular - && h->type == STT_FUNC + && (h->type == STT_FUNC + || h->type == STT_OBJECT) && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) { (*_bfd_error_handler) - (_("%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object"), - input_bfd, h->root.root.string); + (_("%B: relocation R_X86_64_GOTOFF64 against protected %s `%s' can not be used when making a shared object"), + input_bfd, + h->type == STT_FUNC ? "function" : "data", + h->root.root.string); bfd_set_error (bfd_error_bad_value); return FALSE; } |