summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-07 15:53:40 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-07 15:53:40 +0000
commiteb4ef3d174e02aef6597790662ecfceed210cbb1 (patch)
tree29dabebed4129e0cb07c2120a2171cf6005fa4b9
parentfa60f42b454d2f8e591d9cf767ac00821dbf2ee2 (diff)
downloadgcc-eb4ef3d174e02aef6597790662ecfceed210cbb1.tar.gz
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. 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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/gcc.c37
-rw-r--r--gcc/lto/ChangeLog8
-rw-r--r--gcc/lto/lang.opt4
-rw-r--r--gcc/lto/lto-lang.c2
-rw-r--r--lto-plugin/ChangeLog8
-rw-r--r--lto-plugin/lto-plugin.c25
7 files changed, 51 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d334f639f51..486a7137104 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a25077e24f7..7e4343de4ac 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -782,6 +782,7 @@ proper position among the other output files. */
-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%*} \
@@ -2044,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;
/* Allocate the argument vector. */
@@ -2081,7 +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)
- record_temp_file (arg, delete_always, delete_failure);
+ record_temp_file (temp_filename, delete_always, delete_failure);
}
/* Load specs from a file name named FILENAME, replacing occurrences of
@@ -2384,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
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 5bbb2e31780..2496d66d623 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -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.
diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt
index a8b791663eb..53ab8e80830 100644
--- a/gcc/lto/lang.opt
+++ b/gcc/lto/lang.opt
@@ -36,8 +36,8 @@ fwpa
LTO Report Var(flag_wpa) Optimization
Run the link-time optimizer in whole program analysis (WPA) mode.
-fresolution
-LTO Separate
+fresolution=
+LTO Joined
The resolution file
; This comment is to ensure we retain the blank line above.
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 4c9072153ac..72149082d0a 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -624,7 +624,7 @@ lto_handle_option (size_t scode, const char *arg,
switch (code)
{
- case OPT_fresolution:
+ case OPT_fresolution_:
resolution_file_name = arg;
result = 1;
break;
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog
index 338f58ce332..df771284e67 100644
--- a/lto-plugin/ChangeLog
+++ b/lto-plugin/ChangeLog
@@ -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
diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c
index d0266ffee6c..cb785c428a8 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -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;
}
}