OSDN Git Service

* config/i386/darwin.h (SUBTARGET32_DEFAULT_CPU): Add.
[pf3gnuchains/gcc-fork.git] / gcc / gcc.c
index d001273..31e4ab3 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3606,12 +3606,6 @@ process_command (int argc, const char **argv)
                     CONST_CAST2 (const char *const **, const char ***,
                                  &argv));
 
-  /* Do language-specific adjustment/addition of flags.  */
-  lang_specific_driver (&argc,
-                       CONST_CAST2 (const char *const **, const char ***,
-                                    &argv),
-                       &added_libraries);
-
   /* Handle any -no-canonical-prefixes flag early, to assign the function
      that builds relative prefixes.  This function creates default search
      paths that are needed later in normal option handling.  */
@@ -3667,6 +3661,12 @@ process_command (int argc, const char **argv)
      is relocated. The toolchain was either relocated using GCC_EXEC_PREFIX
      or an automatically created GCC_EXEC_PREFIX from argv[0].  */
 
+  /* Do language-specific adjustment/addition of flags.  */
+  lang_specific_driver (&argc,
+                       CONST_CAST2 (const char *const **, const char ***,
+                                    &argv),
+                       &added_libraries);
+
   if (gcc_exec_prefix)
     {
       int len = strlen (gcc_exec_prefix);
@@ -4575,20 +4575,35 @@ process_command (int argc, const char **argv)
        }
       else
        {
-          const char *p = strchr (argv[i], '@');
+          const char *p = strrchr (argv[i], '@');
           char *fname;
+         long offset;
+         int consumed;
 #ifdef HAVE_TARGET_OBJECT_SUFFIX
          argv[i] = convert_filename (argv[i], 0, access (argv[i], F_OK));
 #endif
-          if (!p)
-            fname = xstrdup (argv[i]);
-          else
-            {
+         /* For LTO static archive support we handle input file
+            specifications that are composed of a filename and
+            an offset like FNAME@OFFSET.  */
+         if (p
+             && p != argv[i]
+             && sscanf (p, "@%li%n", &offset, &consumed) >= 1
+             && strlen (p) == (unsigned int)consumed)
+           {
               fname = (char *)xmalloc (p - argv[i] + 1);
               memcpy (fname, argv[i], p - argv[i]);
               fname[p - argv[i]] = '\0';
-            }
-
+             /* Only accept non-stdin and existing FNAME parts, otherwise
+                try with the full name.  */
+             if (strcmp (fname, "-") == 0 || access (fname, F_OK) < 0)
+               {
+                 free (fname);
+                 fname = xstrdup (argv[i]);
+               }
+           }
+         else
+           fname = xstrdup (argv[i]);
           if (strcmp (fname, "-") != 0 && access (fname, F_OK) < 0)
             {
               perror_with_name (fname);
@@ -5248,7 +5263,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
              buf = (char *) alloca (p - q + 1);
              strncpy (buf, q, p - q);
              buf[p - q] = 0;
-             error ("%s", buf);
+             error ("%s", _(buf));
              return -1;
            }
            break;
@@ -5262,7 +5277,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
              buf = (char *) alloca (p - q + 1);
              strncpy (buf, q, p - q);
              buf[p - q] = 0;
-             notice ("%s\n", buf);
+             notice ("%s\n", _(buf));
              if (*p)
                p++;
            }
@@ -7234,7 +7249,7 @@ main (int argc, char **argv)
     {
       printf (_("%s %s%s\n"), programname, pkgversion_string,
              version_string);
-      printf ("Copyright %s 2009 Free Software Foundation, Inc.\n",
+      printf ("Copyright %s 2010 Free Software Foundation, Inc.\n",
              _("(C)"));
       fputs (_("This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"),