[multiple changes]
[gcc.git] / gcc / collect2.c
index 552aa85859eb7e9eb9a77cbfb44249d4e2da3d97..99dd41dc1c542c439327ea0aadde6de5268e2036 100644 (file)
@@ -1,8 +1,6 @@
 /* Collect static initialization info into data structures that can be
    traversed by C++ initialization and finalization routines.
-   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
-   Free Software Foundation, Inc.
+   Copyright (C) 1992-2013 Free Software Foundation, Inc.
    Contributed by Chris Smith (csmith@convex.com).
    Heavily modified by Michael Meissner (meissner@cygnus.com),
    Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.com).
@@ -1024,20 +1022,20 @@ main (int argc, char **argv)
          selected_linker = USE_GOLD_LD;
 
 #ifdef COLLECT_EXPORT_LIST
-       /* since -brtl, -bexport, -b64 are not position dependent
-          also check for them here */
-       if ((argv[i][0] == '-') && (argv[i][1] == 'b'))
-         {
-           arg = argv[i];
-           /* We want to disable automatic exports on AIX when user
-              explicitly puts an export list in command line */
-           if (arg[2] == 'E' || strncmp (&arg[2], "export", 6) == 0)
-             export_flag = 1;
-           else if (arg[2] == '6' && arg[3] == '4')
-             aix64_flag = 1;
-           else if (arg[2] == 'r' && arg[3] == 't' && arg[4] == 'l')
-             aixrtl_flag = 1;
-         }
+       /* These flags are position independent, although their order
+          is important - subsequent flags override earlier ones. */
+       else if (strcmp (argv[i], "-b64") == 0)
+           aix64_flag = 1;
+       /* -bexport:filename always needs the :filename */
+       else if (strncmp (argv[i], "-bE:", 4) == 0
+             || strncmp (argv[i], "-bexport:", 9) == 0)
+           export_flag = 1;
+       else if (strcmp (argv[i], "-brtl") == 0
+             || strcmp (argv[i], "-bsvr4") == 0
+             || strcmp (argv[i], "-G") == 0)
+           aixrtl_flag = 1;
+       else if (strcmp (argv[i], "-bnortl") == 0)
+           aixrtl_flag = 0;
 #endif
       }
     vflag = debug;
@@ -2765,12 +2763,14 @@ scan_libraries (const char *prog_name)
 /* 0757 = U803XTOCMAGIC (AIX 4.3) and 0767 = U64_TOCMAGIC (AIX V5) */
 #if TARGET_AIX_VERSION >= 51
 #   define GCC_CHECK_HDR(X) \
-     ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
-      || (HEADER (X).f_magic == 0767 && aix64_flag))
+     (((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
+       || (HEADER (X).f_magic == 0767 && aix64_flag)) \
+      && !(HEADER (X).f_flags & F_LOADONLY))
 #else
 #   define GCC_CHECK_HDR(X) \
-     ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
-      || (HEADER (X).f_magic == 0757 && aix64_flag))
+     (((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
+       || (HEADER (X).f_magic == 0757 && aix64_flag)) \
+      && !(HEADER (X).f_flags & F_LOADONLY))
 #endif
 
 #endif