* ldlang.c (lang_finish): If the entry symbol is not found, try
authorIan Lance Taylor <ian@airs.com>
Tue, 2 Jun 1998 16:59:37 +0000 (16:59 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 2 Jun 1998 16:59:37 +0000 (16:59 +0000)
parsing it as a number.
* ld.texinfo (Options): Document this.

ld/ChangeLog
ld/ldlang.c

index 7ba7a61a52bec0232dd3a705cbb98f5d831603ad..c0ee4eb1f9d940bb93014f6d9dc1df4a317f77fc 100644 (file)
@@ -1,3 +1,9 @@
+Tue Jun  2 12:55:03 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+       * ldlang.c (lang_finish): If the entry symbol is not found, try
+       parsing it as a number.
+       * ld.texinfo (Options): Document this.
+
 Mon Jun  1 14:01:20 1998  Ian Lance Taylor  <ian@cygnus.com>
 
        * ld.texinfo (Input Section Wildcards): Document SORT keyword.
index 3721716c355d54c984dce09117a92a2afe5f0862..4f692b143335a239e35c4d06c729e93ed62c698a 100644 (file)
@@ -985,9 +985,9 @@ wild_sort (wild, file, section)
          int i;
 
          i = strcmp (file->filename, ls->ifile->filename);
-         if (i < 0)
+         if (i > 0)
            continue;
-         else if (i > 0)
+         else if (i < 0)
            break;
        }
 
@@ -999,7 +999,7 @@ wild_sort (wild, file, section)
          if (strcmp (section_name,
                      bfd_get_section_name (ls->ifile->the_bfd,
                                            ls->section))
-             > 0)
+             < 0)
            break;
        }
     }
@@ -2791,25 +2791,40 @@ lang_finish ()
     }
   else
     {
-      asection *ts;
+      bfd_vma val;
+      char *send;
 
-      /* Can't find the entry symbol.  Use the first address in the
-        text section.  */
-      ts = bfd_get_section_by_name (output_bfd, ".text");
-      if (ts != (asection *) NULL)
+      /* We couldn't find the entry symbol.  Try parsing it as a
+         number.  */
+      val = bfd_scan_vma (entry_symbol, &send, 0);
+      if (*send == '\0')
        {
-         if (warn)
-           einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
-                  entry_symbol, bfd_get_section_vma (output_bfd, ts));
-         if (! bfd_set_start_address (output_bfd,
-                                      bfd_get_section_vma (output_bfd, ts)))
+         if (! bfd_set_start_address (output_bfd, val))
            einfo (_("%P%F: can't set start address\n"));
        }
       else
        {
-         if (warn)
-           einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
-                  entry_symbol);
+         asection *ts;
+
+         /* Can't find the entry symbol, and it's not a number.  Use
+            the first address in the text section.  */
+         ts = bfd_get_section_by_name (output_bfd, ".text");
+         if (ts != (asection *) NULL)
+           {
+             if (warn)
+               einfo (_("%P: warning: cannot find entry symbol %s; defaulting to %V\n"),
+                      entry_symbol, bfd_get_section_vma (output_bfd, ts));
+             if (! bfd_set_start_address (output_bfd,
+                                          bfd_get_section_vma (output_bfd,
+                                                               ts)))
+               einfo (_("%P%F: can't set start address\n"));
+           }
+         else
+           {
+             if (warn)
+               einfo (_("%P: warning: cannot find entry symbol %s; not setting start address\n"),
+                      entry_symbol);
+           }
        }
     }
 }