diff mbox

[2/5] Don't cause ICEs when auto profile file is not found with checking

Message ID 1463848586-19259-3-git-send-email-andi@firstfloor.org
State New
Headers show

Commit Message

Andi Kleen May 21, 2016, 4:36 p.m. UTC
From: Andi Kleen <ak@linux.intel.com>

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-21  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.
---
 gcc/auto-profile.c | 32 +++++++++++++++++++++++++-------
 gcc/gcov-io.c      |  4 +++-
 2 files changed, 28 insertions(+), 8 deletions(-)

Comments

Bernhard Reutner-Fischer May 21, 2016, 7:51 p.m. UTC | #1
On May 21, 2016 6:36:23 PM GMT+02:00, Andi Kleen <andi@firstfloor.org> wrote:
>From: Andi Kleen <ak@linux.intel.com>
>
>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.

Please s/mathch/match/ while at it.

thanks,
Jan Hubicka May 30, 2016, 12:30 a.m. UTC | #2
> From: Andi Kleen <ak@linux.intel.com>
> 
> 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-21  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.

OK,
thanks!

Honza
diff mbox

Patch

diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
index cd82ab4..9e3fd02 100644
--- a/gcc/auto-profile.c
+++ b/gcc/auto-profile.c
@@ -884,16 +884,25 @@  static void
 read_profile (void)
 {
   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)
-    error ("AutoFDO profile magic number does not mathch.");
+    {
+      error ("AutoFDO profile magic number does not mathch.");
+      return;
+    }
 
   /* Skip the version number.  */
   unsigned version = gcov_read_unsigned ();
   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.  */
   gcov_read_unsigned ();
@@ -901,19 +910,28 @@  read_profile (void)
   /* string_table.  */
   afdo_string_table = new string_table ();
   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.  */
   afdo_source_profile = autofdo_source_profile::create ();
   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.  */
   fake_read_autofdo_module_profile ();
 
   /* Read in the 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.  */
   gcov_read_unsigned ();
diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c
index 17fcae0..95ead22 100644
--- a/gcc/gcov-io.c
+++ b/gcc/gcov-io.c
@@ -493,7 +493,9 @@  gcov_read_words (unsigned words)
   const gcov_unsigned_t *result;
   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)
     {
       gcov_var.start += gcov_var.offset;