* elf32-frv.c (elf32_frv_relocate_section): Set "name" for global syms.
authorAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2010 09:11:34 +0000 (09:11 +0000)
committerAlan Modra <amodra@gmail.com>
Mon, 11 Oct 2010 09:11:34 +0000 (09:11 +0000)
(elf32_frvfdpic_finish_dynamic_sections): Don't crash on
__ROFIXUP_END__ defined in shared lib.

bfd/ChangeLog
bfd/elf32-frv.c

index fcfa94518806e9d7b31e714ded5a5b1358ba5045..2e18e8c2b0fb29df42db90a3135d4fa756a8f7b5 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-11  Alan Modra  <amodra@gmail.com>
+
+       * elf32-frv.c (elf32_frv_relocate_section): Set "name" for global syms.
+       (elf32_frvfdpic_finish_dynamic_sections): Don't crash on
+       __ROFIXUP_END__ defined in shared lib.
+
 2010-10-11  Thomas Schwinge  <thomas@codesourcery.com>
 
        * elf32-arm.c (elf32_arm_final_link_relocate)
index 2acc9173ce7b4b601da05d8ce08a37845f13ea7f..f6975f3fba90c3f1484f01960f10768fcb4e1462 100644 (file)
@@ -2770,7 +2770,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
       struct elf_link_hash_entry *h;
       bfd_vma relocation;
       bfd_reloc_status_type r;
-      const char * name = NULL;
+      const char *name;
       int r_type;
       asection *osec;
       struct frvfdpic_relocs_info *picrel;
@@ -2796,7 +2796,8 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
 
          name = bfd_elf_string_from_elf_section
            (input_bfd, symtab_hdr->sh_link, sym->st_name);
-         name = (name == NULL) ? bfd_section_name (input_bfd, sec) : name;
+         if (name == NULL || name[0] == 0)
+           name = bfd_section_name (input_bfd, sec);
        }
       else
        {
@@ -2808,6 +2809,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
                                   h, sec, relocation,
                                   unresolved_reloc, warned);
          osec = sec;
+         name = h->root.root.string;
        }
 
       if (sec != NULL && elf_discarded_section (sec))
@@ -5896,7 +5898,8 @@ elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
                                       FALSE, FALSE, TRUE);
          if (hend
              && (hend->type == bfd_link_hash_defined
-                 || hend->type == bfd_link_hash_defweak))
+                 || hend->type == bfd_link_hash_defweak)
+             && hend->u.def.section->output_section != NULL)
            {
              bfd_vma value =
                frvfdpic_gotfixup_section (info)->output_section->vma