Fix for segmentation fault.
authorMark Shinwell <shinwell@codesourcery.com>
Wed, 21 Jun 2006 13:25:54 +0000 (13:25 +0000)
committerMark Shinwell <shinwell@codesourcery.com>
Wed, 21 Jun 2006 13:25:54 +0000 (13:25 +0000)
* ldlang.c (lang_insert_orphan): Correctly handle the case where
the section is to end up after the section currently at the end
of the list in output_bfd.

ld/ChangeLog
ld/ldlang.c

index 836a73b1c6491734384bd28fa288ec66fca67dd2..684d34f5c5a1862249b855ba06d370d89fac0393 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-21  Mark Shinwell  <shinwell@codesourcery.com>
+
+       * ldlang.c (lang_insert_orphan): Correctly handle the case where
+       the section is to end up after the section currently at the end
+       of the list in output_bfd.
+
 2006-06-21  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * emultempl/mmo.em: Improve comments.  Explain why there's
index cc08726ba9bd0b7361e8ebe31cad13e4a62d9270..9e307f8f0995f7019386c491cbda2c75ec4552a0 100644 (file)
@@ -1445,7 +1445,18 @@ lang_insert_orphan (asection *s,
        place->section = &output_bfd->sections;
 
       as = *place->section;
-      if (as != snew && as->prev != snew)
+
+      if (!as)
+        {
+          /* Put the section at the end of the list.  */
+
+         /* Unlink the section.  */
+         bfd_section_list_remove (output_bfd, snew);
+
+         /* Now tack it back on in the right place.  */
+         bfd_section_list_append (output_bfd, snew);
+        }
+      else if (as != snew && as->prev != snew)
        {
          /* Unlink the section.  */
          bfd_section_list_remove (output_bfd, snew);