* elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_8>
authorHans-Peter Nilsson <hp@axis.com>
Tue, 27 Jan 2009 06:07:54 +0000 (06:07 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Tue, 27 Jan 2009 06:07:54 +0000 (06:07 +0000)
<R_CRIS_16, R_CRIS_32>: Don't call BFD_ASSERT for weak undefined
symbols with non-default visibility.

bfd/ChangeLog
bfd/elf32-cris.c

index 5873b1b320b144cb4593f6554655e5d8cf82527c..99618693fd9ffe5d81ae192d0dc3c3657aa161f8 100644 (file)
@@ -1,3 +1,9 @@
+2009-01-27  Hans-Peter Nilsson  <hp@axis.com>
+
+       * elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_8>
+       <R_CRIS_16, R_CRIS_32>: Don't call BFD_ASSERT for weak undefined
+       symbols with non-default visibility.
+
 2009-01-26  Nathan Sidwell  <nathan@codesourcery.com>
 
        * elf32-ppc.c (ppc_elf_relax_section): Add space for relocs
index 4b59d33e0383cdda0305c7c0db73c0c5be04fb77..6b71ee47b9c556faeb7cac89a49e11b410788fe6 100644 (file)
@@ -1528,7 +1528,16 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                                         rel->r_offset);
              if (outrel.r_offset == (bfd_vma) -1)
                skip = TRUE;
-             else if (outrel.r_offset == (bfd_vma) -2)
+             else if (outrel.r_offset == (bfd_vma) -2
+                      /* For now, undefined weak symbols with non-default
+                         visibility (yielding 0), like exception info for
+                         discarded sections, will get a R_CRIS_NONE
+                         relocation rather than no relocation, because we
+                         notice too late that the symbol doesn't need a
+                         relocation.  */
+                      || (h != NULL
+                          && h->root.type == bfd_link_hash_undefweak
+                          && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT))
                skip = TRUE, relocate = TRUE;
              outrel.r_offset += (input_section->output_section->vma
                                  + input_section->output_offset);