OSDN Git Service

* jvspec.c (lang_specific_pre_link): Re-arrange the linker
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 May 2001 18:34:51 +0000 (18:34 +0000)
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 May 2001 18:34:51 +0000 (18:34 +0000)
        command line so the jvgenmain-generated main program comes first.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42270 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 7fd7de5..677d507 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 c02071f..4a8c333 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;
 }