PR ld/13468
authorAlan Modra <amodra@gmail.com>
Sat, 3 Dec 2011 10:29:01 +0000 (10:29 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 3 Dec 2011 10:29:01 +0000 (10:29 +0000)
* elflink.c (bfd_elf_final_link): Don't segfault when checking
for DT_TEXTREL and .dynamic does not exist.

bfd/ChangeLog
bfd/elflink.c

index 12c332a90e951f2fe55e6e05d60f21badac77a5a..77d6ad8be371b0defcfdc49d3d646d0988b3e206 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-03  Alan Modra  <amodra@gmail.com>
+
+       PR ld/13468
+       * elflink.c (bfd_elf_final_link): Don't segfault when checking
+       for DT_TEXTREL and .dynamic does not exist.
+
 2011-12-03  Alan Modra  <amodra@gmail.com>
 
        PR ld/13470
index 3448bfc5e131ebbe9e788ebfb6a1acb7df13bcf7..ac95c223325920e9a5af1bcddd9e946a409160ff 100644 (file)
@@ -11188,15 +11188,12 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
        goto error_return;
 
       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
-      if ((info->warn_shared_textrel && info->shared)
-         || info->error_textrel)
+      if (((info->warn_shared_textrel && info->shared)
+          || info->error_textrel)
+         && (o = bfd_get_section_by_name (dynobj, ".dynamic")) != NULL)
        {
          bfd_byte *dyncon, *dynconend;
 
-         /* Fix up .dynamic entries.  */
-         o = bfd_get_section_by_name (dynobj, ".dynamic");
-         BFD_ASSERT (o != NULL);
-
          dyncon = o->contents;
          dynconend = o->contents + o->size;
          for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)