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;;)