OSDN Git Service

2010-05-07 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 May 2010 15:53:40 +0000 (15:53 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:02:38 +0000 (14:02 +0900)
* gcc.c (LINK_COMMAND_SPEC): Provide a resolution file to
the linker plugin.
(store_arg): Queue temp_filename for deletion instead of
the whole argument.

lto/
PR lto/43857
PR lto/43371
* lang.opt (fresolution): Change to ...
(fresolution=): ... this.
* lto-lang.c (lto_handle_option): Adjust.

lto-plugin/
* lto-plugin.c (free_2): Do not free resolution_file.
(write_resolution): Check that we were passed a resolution file.
(all_symbols_read_handler): Adjust.
(cleanup_handler): Do not remove the resolution file.
(process_option): Handle -fresolution=.

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

gcc/ChangeLog
gcc/gcc.c
gcc/lto/ChangeLog
lto-plugin/ChangeLog
lto-plugin/lto-plugin.c

index d334f63..486a713 100644 (file)
@@ -1,3 +1,10 @@
+2010-05-07  Richard Guenther <rguenther@suse.de>
+
+       * gcc.c (LINK_COMMAND_SPEC): Provide a resolution file to
+       the linker plugin.
+       (store_arg): Queue temp_filename for deletion instead of
+       the whole argument.
+
 2010-05-07  Richard Guenther  <rguenther@suse.de>
 
        * lto-wrapper.c (DUMPBASE_SUFFIX): Define.
index 39788be..7e4343d 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -781,11 +781,17 @@ proper position among the other output files.  */
     %{fuse-linker-plugin: \
     -plugin %(linker_plugin_file) \
     -plugin-opt=%(lto_wrapper) \
+    -plugin-opt=%(lto_gcc) \
     -plugin-opt=-fresolution=%u.res \
     %{static|static-libgcc:-plugin-opt=-pass-through=%(lto_libgcc)}    \
     %{static:-plugin-opt=-pass-through=-lc}    \
+    %{O*:-plugin-opt=-O%*} \
+    %{w:-plugin-opt=-w} \
+    %{f*:-plugin-opt=-f%*} \
+    %{m*:-plugin-opt=-m%*} \
+    %{v:-plugin-opt=-v} \
     } \
-    %{flto} %{fwhopr*} %l " LINK_PIE_SPEC \
+    %{flto} %{fwhopr} %l " LINK_PIE_SPEC \
    "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
     %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
     %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
@@ -2039,6 +2045,23 @@ static int signal_count;
 /* Name with which this program was invoked.  */
 
 static const char *programname;
+
+/* This is the common prefix we use to make temp file names.
+   It is chosen once for each run of this program.
+   It is substituted into a spec by %g or %j.
+   Thus, all temp file names contain this prefix.
+   In practice, all temp file names start with this prefix.
+
+   This prefix comes from the envvar TMPDIR if it is defined;
+   otherwise, from the P_tmpdir macro if that is defined;
+   otherwise, in /usr/tmp or /tmp;
+   or finally the current directory if all else fails.  */
+
+static const char *temp_filename;
+
+/* Length of the prefix.  */
+
+static int temp_filename_length;
 \f
 /* Allocate the argument vector.  */
 
@@ -2076,15 +2099,7 @@ store_arg (const char *arg, int delete_always, int delete_failure)
   if (strcmp (arg, "-o") == 0)
     have_o_argbuf_index = argbuf_index;
   if (delete_always || delete_failure)
-    {
-      const char *p;
-      /* If the temporary file we should delete is specified as
-        part of a joined argument extract the filename.  */
-      if (arg[0] == '-'
-         && (p = strrchr (arg, '=')))
-       arg = p + 1;
-      record_temp_file (arg, delete_always, delete_failure);
-    }
+    record_temp_file (temp_filename, delete_always, delete_failure);
 }
 \f
 /* Load specs from a file name named FILENAME, replacing occurrences of
@@ -2387,23 +2402,6 @@ read_specs (const char *filename, int main_p)
 /* Record the names of temporary files we tell compilers to write,
    and delete them at the end of the run.  */
 
-/* This is the common prefix we use to make temp file names.
-   It is chosen once for each run of this program.
-   It is substituted into a spec by %g or %j.
-   Thus, all temp file names contain this prefix.
-   In practice, all temp file names start with this prefix.
-
-   This prefix comes from the envvar TMPDIR if it is defined;
-   otherwise, from the P_tmpdir macro if that is defined;
-   otherwise, in /usr/tmp or /tmp;
-   or finally the current directory if all else fails.  */
-
-static const char *temp_filename;
-
-/* Length of the prefix.  */
-
-static int temp_filename_length;
-
 /* Define the list of temporary files to delete.  */
 
 struct temp_file
@@ -3014,23 +3012,14 @@ execute (void)
              for (j = commands[i].argv; *j; j++)
                {
                  const char *p;
+                 fprintf (stderr, " \"");
                  for (p = *j; *p; ++p)
-                   if (!ISALNUM ((unsigned char) *p)
-                       && *p != '_' && *p != '/' && *p != '-' && *p != '.')
-                     break;
-                 if (*p || !*j)
                    {
-                     fprintf (stderr, " \"");
-                     for (p = *j; *p; ++p)
-                       {
-                         if (*p == '"' || *p == '\\' || *p == '$')
-                           fputc ('\\', stderr);
-                         fputc (*p, stderr);
-                       }
-                     fputc ('"', stderr);
+                     if (*p == '"' || *p == '\\' || *p == '$')
+                       fputc ('\\', stderr);
+                     fputc (*p, stderr);
                    }
-                 else
-                   fprintf (stderr, " %s", *j);
+                 fputc ('"', stderr);
                }
            }
          else
index 5bbb2e3..2496d66 100644 (file)
@@ -1,3 +1,11 @@
+2010-05-07  Richard Guenther <rguenther@suse.de>
+
+       PR lto/43857
+       PR lto/43371
+       * lang.opt (fresolution): Change to ...
+       (fresolution=): ... this.
+       * lto-lang.c (lto_handle_option): Adjust.
+
 2010-05-07  Richard Guenther  <rguenther@suse.de>
 
        * lto.c (DUMPBASE_SUFFIX): Remove.
index 338f58c..df77128 100644 (file)
@@ -1,3 +1,11 @@
+2010-05-07  Richard Guenther <rguenther@suse.de>
+
+       * lto-plugin.c (free_2): Do not free resolution_file.
+       (write_resolution): Check that we were passed a resolution file.
+       (all_symbols_read_handler): Adjust.
+       (cleanup_handler): Do not remove the resolution file.
+       (process_option): Handle -fresolution=.
+
 2010-05-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        PR other/43620
index d0266ff..cb785c4 100644 (file)
@@ -294,12 +294,6 @@ free_2 (void)
   if (arguments_file_name)
     free (arguments_file_name);
   arguments_file_name = NULL;
-
-  if (resolution_file)
-    {
-      free (resolution_file);
-      resolution_file = NULL;
-    }
 }
 
 /*  Writes the relocations to disk. */
@@ -310,6 +304,7 @@ write_resolution (void)
   unsigned int i;
   FILE *f;
 
+  check (resolution_file, LDPL_FATAL, "resolution file not specified");
   f = fopen (resolution_file, "w");
   check (f, LDPL_FATAL, "could not open file");
 
@@ -467,7 +462,7 @@ static enum ld_plugin_status
 all_symbols_read_handler (void)
 {
   unsigned i;
-  unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 2 + 1;
+  unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 1;
   char **lto_argv;
   const char **lto_arg_ptr;
   if (num_claimed_files == 0)
@@ -483,8 +478,6 @@ all_symbols_read_handler (void)
   lto_arg_ptr = (const char **) lto_argv;
   assert (lto_wrapper_argv);
 
-  resolution_file = make_temp_file ("");
-
   write_resolution ();
 
   free_1 ();
@@ -492,9 +485,6 @@ all_symbols_read_handler (void)
   for (i = 0; i < lto_wrapper_num_args; i++)
     *lto_arg_ptr++ = lto_wrapper_argv[i];
 
-  *lto_arg_ptr++ = "-fresolution";
-  *lto_arg_ptr++ = resolution_file;
-
   for (i = 0; i < num_claimed_files; i++)
     {
       struct plugin_file_info *info = &claimed_files[i];
@@ -543,12 +533,6 @@ cleanup_handler (void)
       check (t == 0, LDPL_FATAL, "could not unlink arguments file");
     }
 
-  if (resolution_file)
-    {
-      t = unlink (resolution_file);
-      check (t == 0, LDPL_FATAL, "could not unlink resolution file");
-    }
-
   for (i = 0; i < num_output_files; i++)
     {
       t = unlink (output_files[i]);
@@ -657,10 +641,13 @@ process_option (const char *option)
   else
     {
       int size;
+      char *opt = xstrdup (option);
       lto_wrapper_num_args += 1;
       size = lto_wrapper_num_args * sizeof (char *);
       lto_wrapper_argv = (char **) xrealloc (lto_wrapper_argv, size);
-      lto_wrapper_argv[lto_wrapper_num_args - 1] = xstrdup(option);
+      lto_wrapper_argv[lto_wrapper_num_args - 1] = opt;
+      if (strncmp (option, "-fresolution=", sizeof ("-fresolution=") - 1) == 0)
+       resolution_file = opt + sizeof ("-fresolution=") - 1;
     }
 }