diff options
author | Ilya Verbin <ilya.verbin@intel.com> | 2014-12-09 22:44:16 +0000 |
---|---|---|
committer | Ilya Verbin <iverbin@gcc.gnu.org> | 2014-12-09 22:44:16 +0000 |
commit | 443743fd95a5f87c21354bb44e31daaae6ef05bf (patch) | |
tree | c794771581c3a03e67a31e87a7be71285b56b08d /lto-plugin | |
parent | 3f6ad8df42fcf4b9afa29ca9170e075e7482be3d (diff) | |
download | gcc-443743fd95a5f87c21354bb44e31daaae6ef05bf.zip gcc-443743fd95a5f87c21354bb44e31daaae6ef05bf.tar.gz gcc-443743fd95a5f87c21354bb44e31daaae6ef05bf.tar.bz2 |
lto-wrapper.c (compile_offload_image): Start processing in_argv from 0 instead of 1.
gcc/
* lto-wrapper.c (compile_offload_image): Start processing in_argv
from 0 instead of 1.
(run_gcc): Put offload objects into offload_argv, put LTO objects and
possible preceding arguments into lto_argv.
Pass offload_argv to compile_images_for_offload_targets instead of argv.
Use lto_argv for LTO recompilation instead of argv.
lto-plugin/
* lto-plugin.c (offload_files, num_offload_files): New static variables.
(free_1): Use arguments instead of global variables.
(free_2): Free offload_files.
(all_symbols_read_handler): Add names from offload_files to lto-wrapper
arguments.
(claim_file_handler): Do not add file to claimed_files if it contains
offload sections without LTO sections. Add it to offload_files instead.
From-SVN: r218543
Diffstat (limited to 'lto-plugin')
-rw-r--r-- | lto-plugin/ChangeLog | 10 | ||||
-rw-r--r-- | lto-plugin/lto-plugin.c | 65 |
2 files changed, 61 insertions, 14 deletions
diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index 5307e47..e8ec05b 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,13 @@ +2014-12-09 Ilya Verbin <ilya.verbin@intel.com> + + * lto-plugin.c (offload_files, num_offload_files): New static variables. + (free_1): Use arguments instead of global variables. + (free_2): Free offload_files. + (all_symbols_read_handler): Add names from offload_files to lto-wrapper + arguments. + (claim_file_handler): Do not add file to claimed_files if it contains + offload sections without LTO sections. Add it to offload_files instead. + 2014-11-21 H.J. Lu <hongjiu.lu@intel.com> PR bootstrap/63784 diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index fb6555d..8d957402 100644 --- a/lto-plugin/lto-plugin.c +++ b/lto-plugin/lto-plugin.c @@ -152,6 +152,9 @@ static ld_plugin_add_symbols add_symbols; static struct plugin_file_info *claimed_files = NULL; static unsigned int num_claimed_files = 0; +static struct plugin_file_info *offload_files = NULL; +static unsigned int num_offload_files = 0; + static char **output_files = NULL; static unsigned int num_output_files = 0; @@ -313,12 +316,12 @@ translate (char *data, char *end, struct plugin_symtab *out) resolution. */ static void -free_1 (void) +free_1 (struct plugin_file_info *files, unsigned num_files) { unsigned int i; - for (i = 0; i < num_claimed_files; i++) + for (i = 0; i < num_files; i++) { - struct plugin_file_info *info = &claimed_files[i]; + struct plugin_file_info *info = &files[i]; struct plugin_symtab *symtab = &info->symtab; unsigned int j; for (j = 0; j < symtab->nsyms; j++) @@ -346,6 +349,14 @@ free_2 (void) free (info->name); } + for (i = 0; i < num_offload_files; i++) + { + struct plugin_file_info *info = &offload_files[i]; + struct plugin_symtab *symtab = &info->symtab; + free (symtab->aux); + free (info->name); + } + for (i = 0; i < num_output_files; i++) free (output_files[i]); free (output_files); @@ -354,6 +365,10 @@ free_2 (void) claimed_files = NULL; num_claimed_files = 0; + free (offload_files); + offload_files = NULL; + num_offload_files = 0; + free (arguments_file_name); arguments_file_name = NULL; } @@ -608,10 +623,11 @@ static enum ld_plugin_status all_symbols_read_handler (void) { unsigned i; - unsigned num_lto_args = num_claimed_files + lto_wrapper_num_args + 1; + unsigned num_lto_args + = num_claimed_files + num_offload_files + lto_wrapper_num_args + 1; char **lto_argv; const char **lto_arg_ptr; - if (num_claimed_files == 0) + if (num_claimed_files + num_offload_files == 0) return LDPS_OK; if (nop) @@ -626,7 +642,8 @@ all_symbols_read_handler (void) write_resolution (); - free_1 (); + free_1 (claimed_files, num_claimed_files); + free_1 (offload_files, num_offload_files); for (i = 0; i < lto_wrapper_num_args; i++) *lto_arg_ptr++ = lto_wrapper_argv[i]; @@ -638,6 +655,13 @@ all_symbols_read_handler (void) *lto_arg_ptr++ = info->name; } + for (i = 0; i < num_offload_files; i++) + { + struct plugin_file_info *info = &offload_files[i]; + + *lto_arg_ptr++ = info->name; + } + *lto_arg_ptr++ = NULL; exec_lto_wrapper (lto_argv); @@ -949,16 +973,29 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) if (obj.found > 1) resolve_conflicts (<o_file.symtab, <o_file.conflicts); - status = add_symbols (file->handle, lto_file.symtab.nsyms, - lto_file.symtab.syms); - check (status == LDPS_OK, LDPL_FATAL, "could not add symbols"); + if (obj.found > 0) + { + status = add_symbols (file->handle, lto_file.symtab.nsyms, + lto_file.symtab.syms); + check (status == LDPS_OK, LDPL_FATAL, "could not add symbols"); + + num_claimed_files++; + claimed_files = + xrealloc (claimed_files, + num_claimed_files * sizeof (struct plugin_file_info)); + claimed_files[num_claimed_files - 1] = lto_file; + } + + if (obj.found == 0 && obj.offload == 1) + { + num_offload_files++; + offload_files = + xrealloc (offload_files, + num_offload_files * sizeof (struct plugin_file_info)); + offload_files[num_offload_files - 1] = lto_file; + } *claimed = 1; - num_claimed_files++; - claimed_files = - xrealloc (claimed_files, - num_claimed_files * sizeof (struct plugin_file_info)); - claimed_files[num_claimed_files - 1] = lto_file; goto cleanup; |