lto: fix error handling for -Wl,-plugin-opt=debug
When one uses something like: -Wl,-plugin-opt=debug, we end up with lto1 WPA invocation that has 'debug' on command line. We interpret that as input filename. The patch moves resolution checking later so that we end up with a reasonable error message: lto1: fatal error: open debug failed: No such file or directory compilation terminated. PR lto/104333 gcc/lto/ChangeLog: * lto-common.cc (read_cgraph_and_symbols): Move resolution checking for number of files later and report a reasonable error message. * lto-object.cc (lto_obj_file_open): Make error fatal.
This commit is contained in:
parent
302caa1fae
commit
9a92e46c0e
@ -2704,6 +2704,7 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
||||
{
|
||||
unsigned int i, last_file_ix;
|
||||
FILE *resolution;
|
||||
unsigned resolution_objects = 0;
|
||||
int count = 0;
|
||||
struct lto_file_decl_data **decl_data;
|
||||
symtab_node *snode;
|
||||
@ -2726,18 +2727,14 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
||||
if (resolution_file_name)
|
||||
{
|
||||
int t;
|
||||
unsigned num_objects;
|
||||
|
||||
resolution = fopen (resolution_file_name, "r");
|
||||
if (resolution == NULL)
|
||||
fatal_error (input_location,
|
||||
"could not open symbol resolution file: %m");
|
||||
|
||||
t = fscanf (resolution, "%u", &num_objects);
|
||||
t = fscanf (resolution, "%u", &resolution_objects);
|
||||
gcc_assert (t == 1);
|
||||
|
||||
/* True, since the plugin splits the archives. */
|
||||
gcc_assert (num_objects == nfiles);
|
||||
}
|
||||
symtab->state = LTO_STREAMING;
|
||||
|
||||
@ -2806,7 +2803,11 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
||||
lto_register_canonical_types_for_odr_types ();
|
||||
|
||||
if (resolution_file_name)
|
||||
fclose (resolution);
|
||||
{
|
||||
/* True, since the plugin splits the archives. */
|
||||
gcc_assert (resolution_objects == nfiles);
|
||||
fclose (resolution);
|
||||
}
|
||||
|
||||
/* Show the LTO report before launching LTRANS. */
|
||||
if (flag_lto_report || (flag_wpa && flag_lto_report_wpa))
|
||||
|
@ -103,10 +103,7 @@ lto_obj_file_open (const char *filename, bool writable)
|
||||
: O_RDONLY | O_BINARY),
|
||||
0666);
|
||||
if (lo->fd == -1)
|
||||
{
|
||||
error ("open %s failed: %s", fname, xstrerror (errno));
|
||||
goto fail;
|
||||
}
|
||||
fatal_error (input_location, "open %s failed: %s", fname, xstrerror (errno));
|
||||
|
||||
if (!writable)
|
||||
{
|
||||
@ -146,13 +143,12 @@ lto_obj_file_open (const char *filename, bool writable)
|
||||
|
||||
return &lo->base;
|
||||
|
||||
fail_errmsg:
|
||||
fail_errmsg:
|
||||
if (err == 0)
|
||||
error ("%s: %s", fname, errmsg);
|
||||
else
|
||||
error ("%s: %s: %s", fname, errmsg, xstrerror (err));
|
||||
|
||||
fail:
|
||||
if (lo->fd != -1)
|
||||
lto_obj_file_close ((lto_file *) lo);
|
||||
free (lo);
|
||||
|
Loading…
Reference in New Issue
Block a user