Hi,
if lto-wrapper can't find mkoffload for an acceleration target it shows
this error:
...
$ gcc -fopenacc test.c
lto-wrapper: fatal error: problem with building target image for nvptx-none
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
...
This error message does not say what is really going wrong, nor suggest
how to fix.
This patch adds a more precise error message, with a suggestion on how
to fix the error:
...
$ gcc -fopenacc test.c
lto-wrapper: fatal error: could not find accel/nvptx-none/mkoffload in
install/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.0.1/:install/bin/../libexec/gcc/
(consider using '-B')
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
...
OK for trunk?
Thanks,
- Tom
[lto] Add "could not find mkoffload" error message to lto-wrapper
2018-05-01 Tom de Vries <t...@codesourcery.com>
PR lto/85451
* lto-wrapper.c (compile_offload_image): Add "could not find mkoffload"
error message.
---
gcc/lto-wrapper.c | 66 ++++++++++++++++++++++++++++---------------------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index a61d5dd..7de58d4 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -749,42 +749,44 @@ compile_offload_image (const char *target, const char *compiler_path,
break;
}
- if (compiler)
- {
- /* Generate temporary output file name. */
- filename = make_temp_file (".target.o");
-
- struct obstack argv_obstack;
- obstack_init (&argv_obstack);
- obstack_ptr_grow (&argv_obstack, compiler);
- if (save_temps)
- obstack_ptr_grow (&argv_obstack, "-save-temps");
- if (verbose)
- obstack_ptr_grow (&argv_obstack, "-v");
- obstack_ptr_grow (&argv_obstack, "-o");
- obstack_ptr_grow (&argv_obstack, filename);
+ if (!compiler)
+ fatal_error (input_location,
+ "could not find %s in %s (consider using '-B')\n", suffix + 1,
+ compiler_path);
- /* Append names of input object files. */
- for (unsigned i = 0; i < in_argc; i++)
- obstack_ptr_grow (&argv_obstack, in_argv[i]);
+ /* Generate temporary output file name. */
+ filename = make_temp_file (".target.o");
- /* Append options from offload_lto sections. */
- append_compiler_options (&argv_obstack, compiler_opts,
- compiler_opt_count);
- append_diag_options (&argv_obstack, linker_opts, linker_opt_count);
+ struct obstack argv_obstack;
+ obstack_init (&argv_obstack);
+ obstack_ptr_grow (&argv_obstack, compiler);
+ if (save_temps)
+ obstack_ptr_grow (&argv_obstack, "-save-temps");
+ if (verbose)
+ obstack_ptr_grow (&argv_obstack, "-v");
+ obstack_ptr_grow (&argv_obstack, "-o");
+ obstack_ptr_grow (&argv_obstack, filename);
- /* Append options specified by -foffload last. In case of conflicting
- options we expect offload compiler to choose the latest. */
- append_offload_options (&argv_obstack, target, compiler_opts,
- compiler_opt_count);
- append_offload_options (&argv_obstack, target, linker_opts,
- linker_opt_count);
+ /* Append names of input object files. */
+ for (unsigned i = 0; i < in_argc; i++)
+ obstack_ptr_grow (&argv_obstack, in_argv[i]);
- obstack_ptr_grow (&argv_obstack, NULL);
- argv = XOBFINISH (&argv_obstack, char **);
- fork_execute (argv[0], argv, true);
- obstack_free (&argv_obstack, NULL);
- }
+ /* Append options from offload_lto sections. */
+ append_compiler_options (&argv_obstack, compiler_opts,
+ compiler_opt_count);
+ append_diag_options (&argv_obstack, linker_opts, linker_opt_count);
+
+ /* Append options specified by -foffload last. In case of conflicting
+ options we expect offload compiler to choose the latest. */
+ append_offload_options (&argv_obstack, target, compiler_opts,
+ compiler_opt_count);
+ append_offload_options (&argv_obstack, target, linker_opts,
+ linker_opt_count);
+
+ obstack_ptr_grow (&argv_obstack, NULL);
+ argv = XOBFINISH (&argv_obstack, char **);
+ fork_execute (argv[0], argv, true);
+ obstack_free (&argv_obstack, NULL);
free_array_of_ptrs ((void **) paths, n_paths);
return filename;