summaryrefslogtreecommitdiff
path: root/gcc/libgcov.c
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-06 14:51:48 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2003-07-06 14:51:48 +0000
commit42fa384f7f1d12e02987b17d2650e2136b38fa00 (patch)
treea94f984308aa02ce879de7afc0672f6a1d92a100 /gcc/libgcov.c
parentb80f1d67f4ed212faa54034bed77dec05afdad97 (diff)
downloadgcc-42fa384f7f1d12e02987b17d2650e2136b38fa00.tar.gz
* gcov-io.h: Add a local time stamp.
(struct gcov_info): Add stamp field. (gcov_truncate): New. * coverage.c (read_counts_file): Skip the stamp. (coverage_begin_output): Write the stamp. (build_gcov_info): Declare and init the stamp. (coverage_finish): Only unlink data file, if stamp is zero. * gcov-dump.c (dump_file): Dump the stamp. * gcov.c (bbg_stamp): New. (release_structures): Clear bbg_stamp. (read_graph_file): Read stamp. (read_count_file): Check stamp. * libgcov.c (gcov_exit): Check stamp and truncate if needed. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69006 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/libgcov.c')
-rw-r--r--gcc/libgcov.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/gcc/libgcov.c b/gcc/libgcov.c
index 74d830dc1b0..72126466f66 100644
--- a/gcc/libgcov.c
+++ b/gcc/libgcov.c
@@ -167,8 +167,10 @@ gcov_exit (void)
gcov_unsigned_t tag, length;
gcov_position_t summary_pos = 0;
- /* Totals for this object file. */
memset (&this_object, 0, sizeof (this_object));
+ memset (&object, 0, sizeof (object));
+
+ /* Totals for this object file. */
for (t_ix = c_ix = 0,
ci_ptr = gi_ptr->counts, cs_ptr = this_object.ctrs;
t_ix != GCOV_COUNTERS_SUMMABLE; t_ix++, cs_ptr++)
@@ -223,6 +225,15 @@ gcov_exit (void)
gcov_version_mismatch (gi_ptr, length);
goto read_fatal;
}
+
+ length = gcov_read_unsigned ();
+ if (length != gi_ptr->stamp)
+ {
+ /* Read from a different compilation. Overwrite the
+ file. */
+ gcov_truncate ();
+ goto rewrite;
+ }
/* Merge execution counts for each function. */
for (f_ix = gi_ptr->n_functions, fi_ptr = gi_ptr->functions;
@@ -298,8 +309,6 @@ gcov_exit (void)
rewrite:;
gcov_rewrite ();
}
- else
- memset (&object, 0, sizeof (object));
if (!summary_pos)
memset (&program, 0, sizeof (program));
@@ -355,6 +364,7 @@ gcov_exit (void)
/* Write out the data. */
gcov_write_tag_length (GCOV_DATA_MAGIC, GCOV_VERSION);
+ gcov_write_unsigned (gi_ptr->stamp);
/* Write execution counts for each function. */
for (f_ix = gi_ptr->n_functions, fi_ptr = gi_ptr->functions; f_ix--;