diff options
Diffstat (limited to 'lto-plugin')
-rw-r--r-- | lto-plugin/ChangeLog | 8 | ||||
-rw-r--r-- | lto-plugin/lto-plugin.c | 25 |
2 files changed, 14 insertions, 19 deletions
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; } } |