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 /gcc | |
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 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/lto-wrapper.c | 48 |
2 files changed, 43 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20bcbaa..cbef2f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-12-09 Ilya Verbin <ilya.verbin@intel.com> + + * 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. + 2014-12-09 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com> * doc/install.texi: Describe --with-aix-soname option. diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 0f69457..f75c0dc 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -669,7 +669,7 @@ compile_offload_image (const char *target, const char *compiler_path, obstack_ptr_grow (&argv_obstack, filename); /* Append names of input object files. */ - for (unsigned i = 1; i < in_argc; i++) + for (unsigned i = 0; i < in_argc; i++) obstack_ptr_grow (&argv_obstack, in_argv[i]); /* Append options from offload_lto sections. */ @@ -883,6 +883,8 @@ run_gcc (unsigned argc, char *argv[]) int new_head_argc; bool have_lto = false; bool have_offload = false; + unsigned lto_argc = 0, offload_argc = 0; + char **lto_argv, **offload_argv; /* Get the driver and options. */ collect_gcc = getenv ("COLLECT_GCC"); @@ -896,6 +898,11 @@ run_gcc (unsigned argc, char *argv[]) &decoded_options, &decoded_options_count); + /* Allocate arrays for input object files with LTO or offload IL, + and for possible preceding arguments. */ + lto_argv = XNEWVEC (char *, argc); + offload_argv = XNEWVEC (char *, argc); + /* Look at saved options in the IL files. */ for (i = 1; i < argc; ++i) { @@ -918,17 +925,27 @@ run_gcc (unsigned argc, char *argv[]) } fd = open (argv[i], O_RDONLY); if (fd == -1) - continue; + { + lto_argv[lto_argc++] = argv[i]; + continue; + } + + if (find_and_merge_options (fd, file_offset, LTO_SECTION_NAME_PREFIX, + &fdecoded_options, &fdecoded_options_count, + collect_gcc)) + { + have_lto = true; + lto_argv[lto_argc++] = argv[i]; + } + + if (find_and_merge_options (fd, file_offset, OFFLOAD_SECTION_NAME_PREFIX, + &offload_fdecoded_options, + &offload_fdecoded_options_count, collect_gcc)) + { + have_offload = true; + offload_argv[offload_argc++] = argv[i]; + } - have_lto - |= find_and_merge_options (fd, file_offset, LTO_SECTION_NAME_PREFIX, - &fdecoded_options, &fdecoded_options_count, - collect_gcc); - have_offload - |= find_and_merge_options (fd, file_offset, OFFLOAD_SECTION_NAME_PREFIX, - &offload_fdecoded_options, - &offload_fdecoded_options_count, - collect_gcc); close (fd); } @@ -1027,7 +1044,8 @@ run_gcc (unsigned argc, char *argv[]) if (have_offload) { - compile_images_for_offload_targets (argc, argv, offload_fdecoded_options, + compile_images_for_offload_targets (offload_argc, offload_argv, + offload_fdecoded_options, offload_fdecoded_options_count, decoded_options, decoded_options_count); @@ -1119,8 +1137,8 @@ run_gcc (unsigned argc, char *argv[]) } /* Append the input objects and possible preceding arguments. */ - for (i = 1; i < argc; ++i) - obstack_ptr_grow (&argv_obstack, argv[i]); + for (i = 0; i < lto_argc; ++i) + obstack_ptr_grow (&argv_obstack, lto_argv[i]); obstack_ptr_grow (&argv_obstack, NULL); new_argv = XOBFINISH (&argv_obstack, const char **); @@ -1295,6 +1313,8 @@ cont: if (offloadend) printf ("%s\n", offloadend); + XDELETE (lto_argv); + XDELETE (offload_argv); obstack_free (&argv_obstack, NULL); } |