Commit 1bba63a7 by Andi Kleen Committed by Andi Kleen

Don't cause ICEs when auto profile file is not found with checking

Currently, on a checking enabled compiler when -fauto-profile does
not find the profile feedback file it errors out with assertation
failures. Add proper errors for this case.

gcc/:

2016-05-30  Andi Kleen  <ak@linux.intel.com>

	* auto-profile.c (read_profile): Replace asserts with errors
	when file does not exist.
	* gcov-io.c (gcov_read_words): Dito.

From-SVN: r236894
parent 53803093
2016-05-30 Andi Kleen <ak@linux.intel.com>
* auto-profile.c (read_profile): Replace asserts with errors
when file does not exist.
* gcov-io.c (gcov_read_words): Dito.
2016-05-30 Jan Hubicka <hubicka@ucw.cz> 2016-05-30 Jan Hubicka <hubicka@ucw.cz>
* tree-cfg.c (print_loop): Print likely upper bounds. * tree-cfg.c (print_loop): Print likely upper bounds.
......
...@@ -884,16 +884,25 @@ static void ...@@ -884,16 +884,25 @@ static void
read_profile (void) read_profile (void)
{ {
if (gcov_open (auto_profile_file, 1) == 0) if (gcov_open (auto_profile_file, 1) == 0)
error ("Cannot open profile file %s.", auto_profile_file); {
error ("Cannot open profile file %s.", auto_profile_file);
return;
}
if (gcov_read_unsigned () != GCOV_DATA_MAGIC) if (gcov_read_unsigned () != GCOV_DATA_MAGIC)
error ("AutoFDO profile magic number does not mathch."); {
error ("AutoFDO profile magic number does not match.");
return;
}
/* Skip the version number. */ /* Skip the version number. */
unsigned version = gcov_read_unsigned (); unsigned version = gcov_read_unsigned ();
if (version != AUTO_PROFILE_VERSION) if (version != AUTO_PROFILE_VERSION)
error ("AutoFDO profile version %u does match %u.", {
version, AUTO_PROFILE_VERSION); error ("AutoFDO profile version %u does match %u.",
version, AUTO_PROFILE_VERSION);
return;
}
/* Skip the empty integer. */ /* Skip the empty integer. */
gcov_read_unsigned (); gcov_read_unsigned ();
...@@ -901,19 +910,28 @@ read_profile (void) ...@@ -901,19 +910,28 @@ read_profile (void)
/* string_table. */ /* string_table. */
afdo_string_table = new string_table (); afdo_string_table = new string_table ();
if (!afdo_string_table->read()) if (!afdo_string_table->read())
error ("Cannot read string table from %s.", auto_profile_file); {
error ("Cannot read string table from %s.", auto_profile_file);
return;
}
/* autofdo_source_profile. */ /* autofdo_source_profile. */
afdo_source_profile = autofdo_source_profile::create (); afdo_source_profile = autofdo_source_profile::create ();
if (afdo_source_profile == NULL) if (afdo_source_profile == NULL)
error ("Cannot read function profile from %s.", auto_profile_file); {
error ("Cannot read function profile from %s.", auto_profile_file);
return;
}
/* autofdo_module_profile. */ /* autofdo_module_profile. */
fake_read_autofdo_module_profile (); fake_read_autofdo_module_profile ();
/* Read in the working set. */ /* Read in the working set. */
if (gcov_read_unsigned () != GCOV_TAG_AFDO_WORKING_SET) if (gcov_read_unsigned () != GCOV_TAG_AFDO_WORKING_SET)
error ("Cannot read working set from %s.", auto_profile_file); {
error ("Cannot read working set from %s.", auto_profile_file);
return;
}
/* Skip the length of the section. */ /* Skip the length of the section. */
gcov_read_unsigned (); gcov_read_unsigned ();
......
...@@ -493,7 +493,9 @@ gcov_read_words (unsigned words) ...@@ -493,7 +493,9 @@ gcov_read_words (unsigned words)
const gcov_unsigned_t *result; const gcov_unsigned_t *result;
unsigned excess = gcov_var.length - gcov_var.offset; unsigned excess = gcov_var.length - gcov_var.offset;
gcov_nonruntime_assert (gcov_var.mode > 0); if (gcov_var.mode <= 0)
return NULL;
if (excess < words) if (excess < words)
{ {
gcov_var.start += gcov_var.offset; gcov_var.start += gcov_var.offset;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment