diff options
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-cris.c | 11 |
2 files changed, 15 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bc40030..5100257 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2003-06-18 Hans-Peter Nilsson <hp@axis.com> + + * elf32-cris.c (cris_elf_relocate_section) <case + R_CRIS_32_GOTREL>: When linking a program, don't complain about a + symbol from a normal object or an undefined weak symbol. + 2003-06-18 Alan Modra <amodra@bigpond.net.au> * elf64-ppc.c (ppc64_elf_relocate_section): Accept a symbol on diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index 40327b6..1d278a0 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -1129,8 +1129,15 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, break; case R_CRIS_32_GOTREL: - /* This relocation must only be performed against local symbols. */ - if (h != NULL && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) + /* This relocation must only be performed against local symbols. + It's also ok when we link a program and the symbol is either + defined in an ordinary (non-DSO) object or is undefined weak. */ + if (h != NULL + && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !(!info->shared + && ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0 + || ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 + && h->root.type == bfd_link_hash_undefweak)))) { (*_bfd_error_handler) (_("%s: relocation %s is not allowed for global symbol: `%s' from %s section"), |