aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIlya Verbin <ilya.verbin@intel.com>2014-12-09 22:44:16 +0000
committerIlya Verbin <iverbin@gcc.gnu.org>2014-12-09 22:44:16 +0000
commit443743fd95a5f87c21354bb44e31daaae6ef05bf (patch)
treec794771581c3a03e67a31e87a7be71285b56b08d /gcc
parent3f6ad8df42fcf4b9afa29ca9170e075e7482be3d (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/lto-wrapper.c48
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);
}