* elf32-cris.c (cris_elf_relocate_section) <case
authorHans-Peter Nilsson <hp@axis.com>
Wed, 18 Jun 2003 04:14:14 +0000 (04:14 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Wed, 18 Jun 2003 04:14:14 +0000 (04:14 +0000)
R_CRIS_32_GOTREL>: When linking a program, don't complain about a
symbol from a normal object or an undefined weak symbol.

bfd/ChangeLog
bfd/elf32-cris.c

index bc40030..5100257 100644 (file)
@@ -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
index 40327b6..1d278a0 100644 (file)
@@ -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"),