Fix collecting under AIX
authorJason Merrill <merrill@gnu.org>
Mon, 13 Feb 1995 20:21:44 +0000 (20:21 +0000)
committerJason Merrill <merrill@gnu.org>
Mon, 13 Feb 1995 20:21:44 +0000 (20:21 +0000)
From-SVN: r8933

gcc/collect2.c
gcc/config/rs6000/rs6000.h

index be28cc6..c47a167 100644 (file)
@@ -824,6 +824,8 @@ main (argc, argv)
   char **ld1           = ld1_argv;
   char **ld2_argv      = (char **) xcalloc (sizeof (char *), argc+5);
   char **ld2           = ld2_argv;
+  char **object_lst    = (char **) xcalloc (sizeof (char *), argc);
+  char **object                = object_lst;
   int first_file;
   int num_c_args       = argc+7;
 
@@ -1154,15 +1156,19 @@ main (argc, argv)
              break;
            }
        }
-      else if (first_file
-              && (p = rindex (arg, '.')) != (char *)0
+      else if ((p = rindex (arg, '.')) != (char *)0
               && (strcmp (p, ".o") == 0 || strcmp (p, ".a") == 0))
        {
-         first_file = 0;
-         /* place o_file BEFORE this argument! */
-         ld2--;
-         *ld2++ = o_file;
-         *ld2++ = arg;
+         if (first_file)
+           {
+             first_file = 0;
+             /* place o_file BEFORE this argument! */
+             ld2--;
+             *ld2++ = o_file;
+             *ld2++ = arg;
+           }
+         if (p[1] == 'o')
+           *object++ = arg;
        }
     }
 
@@ -1261,6 +1267,13 @@ main (argc, argv)
   if (rflag)
     return 0;
 
+#ifdef COLLECT_SCAN_OBJECTS
+  /* The AIX linker will discard static constructors in object files if
+     nothing else in the file is referenced, so look at them first.  */
+  while (object_lst < object)
+    scan_prog_file (*object_lst++, PASS_FIRST);
+#endif
+
   scan_prog_file (output_file, PASS_FIRST);
 
 #ifdef SCAN_LIBRARIES
index 8daf168..099dda0 100644 (file)
@@ -98,6 +98,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 /* Don't turn -B into -L if the argument specifies a relative file name.  */
 #define RELATIVE_PREFIX_NOT_LINKDIR
 
+/* The AIX linker will discard static constructors in object files before
+   collect has a chance to see them, so scan the object files directly.  */
+#define COLLECT_SCAN_OBJECTS
+
 /* Architecture type.  */
 
 extern int target_flags;