jvspec.c (lang_specific_pre_link): Re-arrange the linker command line so the jvgenmai...
authorPer Bothner <per@bothner.com>
Fri, 18 May 2001 18:34:51 +0000 (11:34 -0700)
committerPer Bothner <bothner@gcc.gnu.org>
Fri, 18 May 2001 18:34:51 +0000 (11:34 -0700)
* jvspec.c (lang_specific_pre_link):  Re-arrange the linker
        command line so the jvgenmain-generated main program comes first.

From-SVN: r42270

gcc/java/ChangeLog
gcc/java/jvspec.c

index 7fd7de5b6e3614cdc205832c0ed06ef02e567714..677d507e6303f1b0df93053b3f079fb639ea874c 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-18  Per Bothner  <per@bothner.com>
+
+       * jvspec.c (lang_specific_pre_link):  Re-arrange the linker
+        command line so the jvgenmain-generated main program comes first.
+
 2001-05-15  Tom Tromey  <tromey@redhat.com>
 
        * class.c (build_utf8_ref): Don't generate identifier based on
index c02071ff3084590c163eadcdc77716c22ccfbc0d..4a8c333db342ae288f9d8cf7336e88a0bc52dc1f 100644 (file)
@@ -525,9 +525,23 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
 int
 lang_specific_pre_link ()
 {
+  int err;
   if (main_class_name == NULL)
     return 0;
   input_filename = main_class_name;
   input_filename_length = strlen (main_class_name);
-  return do_spec (jvgenmain_spec);
+  err = do_spec (jvgenmain_spec);
+  if (err == 0)
+    {
+      /* Shift the outfiles array so the generated main comes first.
+        This is important when linking against (non-shared) libraries,
+        since otherwise we risk (a) nothing getting linked or
+        (b) 'main' getting picked up from a library. */
+      int i = n_infiles;
+      const char *generated = outfiles[i];
+      while (--i >= 0)
+       outfiles[i + 1] = outfiles[i];
+      outfiles[0] = generated;
+    }
+  return err;
 }