From 0e8f29daae817560fa28935f23150307abee8f43 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Tue, 29 May 2018 14:11:21 +0200 Subject: [PATCH] libgcov: report about a different timestamp (PR gcov-profile/85759). 2018-05-29 Martin Liska PR gcov-profile/85759 * doc/gcov.texi: Document GCOV_ERROR_FILE and GCOV_EXIT_AT_ERROR env variables. 2018-05-29 Martin Liska PR gcov-profile/85759 * libgcov-driver-system.c (gcov_error): Introduce usage of GCOV_EXIT_AT_ERROR env. variable. * libgcov-driver.c (merge_one_data): Print error that we overwrite a gcov file with a different timestamp. From-SVN: r260895 --- gcc/ChangeLog | 6 ++++++ gcc/doc/gcov.texi | 8 ++++++++ libgcc/ChangeLog | 8 ++++++++ libgcc/libgcov-driver-system.c | 10 +++++++++- libgcc/libgcov-driver.c | 8 ++++++-- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a3094b2164..b70c0372731 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-05-29 Martin Liska + + PR gcov-profile/85759 + * doc/gcov.texi: Document GCOV_ERROR_FILE and GCOV_EXIT_AT_ERROR + env variables. + 2018-05-29 Jakub Jelinek * tree-cfg.c (verify_gimple_assign_unary): Add checking for diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index 4bd976db0b5..1cdca118b45 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -801,6 +801,14 @@ as well as handlers registered with @code{atexit}. If an executable loads a dynamic shared object via dlopen functionality, @option{-Wl,--dynamic-list-data} is needed to dump all profile data. +Profiling run-time library reports various errors related to profile +manipulation and profile saving. Errors are printed into standard error output +or @samp{GCOV_ERROR_FILE} file, if environment variable is used. +In order to terminate immediately after an errors occurs +set @samp{GCOV_EXIT_AT_ERROR} environment variable. +That can help users to find profile clashing which leads +to a misleading profile. + @c man end @node Gcov Data Files diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 1b24190cf30..7394b1fe341 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2018-05-29 Martin Liska + + PR gcov-profile/85759 + * libgcov-driver-system.c (gcov_error): Introduce usage of + GCOV_EXIT_AT_ERROR env. variable. + * libgcov-driver.c (merge_one_data): Print error that we + overwrite a gcov file with a different timestamp. + 2018-05-23 Kalamatee * config/m68k/lb1sf68.S (Laddsf$nf): Fix sign bit handling in diff --git a/libgcc/libgcov-driver-system.c b/libgcc/libgcov-driver-system.c index 0df44239363..bf125869dc0 100644 --- a/libgcc/libgcov-driver-system.c +++ b/libgcc/libgcov-driver-system.c @@ -62,8 +62,16 @@ gcov_error (const char *fmt, ...) va_list argp; va_start (argp, fmt); - ret = vfprintf (get_gcov_error_file (), fmt, argp); + FILE *f = get_gcov_error_file (); + ret = vfprintf (f, fmt, argp); va_end (argp); + + if (getenv ("GCOV_EXIT_AT_ERROR")) + { + fprintf (f, "profiling:exiting after an error\n"); + exit (1); + } + return ret; } diff --git a/libgcc/libgcov-driver.c b/libgcc/libgcov-driver.c index b4f195b8259..610356383f1 100644 --- a/libgcc/libgcov-driver.c +++ b/libgcc/libgcov-driver.c @@ -372,8 +372,12 @@ merge_one_data (const char *filename, length = gcov_read_unsigned (); if (length != gi_ptr->stamp) - /* Read from a different compilation. Overwrite the file. */ - return 0; + { + /* Read from a different compilation. Overwrite the file. */ + gcov_error ("profiling:%s:overwriting an existing profile data " + "with a different timestamp\n", filename); + return 0; + } /* Look for program summary. */ for (f_ix = 0;;)