Patchwork Fix part of PR gcov-profile/54487 (issue6501100)

login
register
mail settings
Submitter Teresa Johnson
Date Sept. 7, 2012, 5:51 a.m.
Message ID <20120907055117.8F47D61464@tjsboxrox.mtv.corp.google.com>
Download mbox | patch
Permalink /patch/182323/
State New
Headers show

Comments

Teresa Johnson - Sept. 7, 2012, 5:51 a.m.
This fixes part of the issue described in PR gcov-profile/54487 where
there were warnings about mismatches due to slight differences in the
merged histograms in different object files. This can happen due to
the truncating integer division in the merge routine, which could result
in slightly different histograms when summaries are merged in different
orders.

Tested with bootstrap and profiledbootstrap on x86_64-unknown-linux-gnu.
Ok for trunk?

Teresa

2012-09-06  Teresa Johnson  <tejohnson@google.com>

        PR gcov-profile/54487
	* libgcc/libgcov.c (gcov_exit): Avoid warning on histogram
        differences.


--
This patch is available for review at http://codereview.appspot.com/6501100
Jan Hubicka - Sept. 7, 2012, 10:55 a.m.
> This fixes part of the issue described in PR gcov-profile/54487 where
> there were warnings about mismatches due to slight differences in the
> merged histograms in different object files. This can happen due to
> the truncating integer division in the merge routine, which could result
> in slightly different histograms when summaries are merged in different
> orders.
> 
> Tested with bootstrap and profiledbootstrap on x86_64-unknown-linux-gnu.
> Ok for trunk?

OK,
thanks!
Honza
> 
> Teresa
> 
> 2012-09-06  Teresa Johnson  <tejohnson@google.com>
> 
>         PR gcov-profile/54487
> 	* libgcc/libgcov.c (gcov_exit): Avoid warning on histogram
>         differences.
> 
> Index: libgcc/libgcov.c
> ===================================================================
> --- libgcc/libgcov.c	(revision 191035)
> +++ libgcc/libgcov.c	(working copy)
> @@ -707,7 +707,13 @@ gcov_exit (void)
>  	    memcpy (cs_all, cs_prg, sizeof (*cs_all));
>  	  else if (!all_prg.checksum
>  		   && (!GCOV_LOCKED || cs_all->runs == cs_prg->runs)
> -		   && memcmp (cs_all, cs_prg, sizeof (*cs_all)))
> +                   /* Don't compare the histograms, which may have slight
> +                      variations depending on the order they were updated
> +                      due to the truncating integer divides used in the
> +                      merge.  */
> +                   && memcmp (cs_all, cs_prg,
> +                              sizeof (*cs_all) - (sizeof (gcov_bucket_type)
> +                                                  * GCOV_HISTOGRAM_SIZE)))
>  	    {
>  	      fprintf (stderr, "profiling:%s:Invocation mismatch - some data files may have been removed%s\n",
>  		       gi_filename, GCOV_LOCKED
> 
> --
> This patch is available for review at http://codereview.appspot.com/6501100

Patch

Index: libgcc/libgcov.c
===================================================================
--- libgcc/libgcov.c	(revision 191035)
+++ libgcc/libgcov.c	(working copy)
@@ -707,7 +707,13 @@  gcov_exit (void)
 	    memcpy (cs_all, cs_prg, sizeof (*cs_all));
 	  else if (!all_prg.checksum
 		   && (!GCOV_LOCKED || cs_all->runs == cs_prg->runs)
-		   && memcmp (cs_all, cs_prg, sizeof (*cs_all)))
+                   /* Don't compare the histograms, which may have slight
+                      variations depending on the order they were updated
+                      due to the truncating integer divides used in the
+                      merge.  */
+                   && memcmp (cs_all, cs_prg,
+                              sizeof (*cs_all) - (sizeof (gcov_bucket_type)
+                                                  * GCOV_HISTOGRAM_SIZE)))
 	    {
 	      fprintf (stderr, "profiling:%s:Invocation mismatch - some data files may have been removed%s\n",
 		       gi_filename, GCOV_LOCKED