summaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authortejohnson <tejohnson@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-07 13:49:47 +0000
committertejohnson <tejohnson@138bc75d-0d04-0410-961f-82ee72b054a4>2012-09-07 13:49:47 +0000
commit7995ce5f5a7afcbc98d7c0fc23218d039b12d463 (patch)
treec39d7334f52a5e6331db1c4a7f53a91d5887df86 /libgcc
parentdd1d981f2684109fad33454b9231a33db4bbb141 (diff)
downloadgcc-7995ce5f5a7afcbc98d7c0fc23218d039b12d463.tar.gz
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. 2012-09-07 Teresa Johnson <tejohnson@google.com> PR gcov-profile/54487 * libgcc/libgcov.c (gcov_exit): Avoid warning on histogram differences. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191074 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog6
-rw-r--r--libgcc/libgcov.c8
2 files changed, 13 insertions, 1 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 7ffb58c3d24..cc030f2640a 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,9 @@
+2012-09-07 Teresa Johnson <tejohnson@google.com>
+
+ PR gcov-profile/54487
+ * libgcc/libgcov.c (gcov_exit): Avoid warning on histogram
+ differences.
+
2012-09-05 Georg-Johann Lay <avr@gjlay.de>
PR target/54461
diff --git a/libgcc/libgcov.c b/libgcc/libgcov.c
index fce8587affe..c58427e753b 100644
--- a/libgcc/libgcov.c
+++ b/libgcc/libgcov.c
@@ -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