Hi All,
We have discovered a bug on gcno file generation registred as PR58602.
When the .gcno graph file is opened for generating the coverage graph
information, the mode used is w+ as this code is shared with updating
tools such as libgcov.
Thus, when GCC outputs .gcno files, it may leave garbage at the end of
the file if the file already exists when opening it.
This has been trackeddown from a kernel issue on lcov:
http://sourceforge.net/p/ltp/mailman/message/31141937/
This following patch fixes the function gcov_open() such that the .gcno
file is opened with truncation when gcc asks for creating a new file
(mode<0).
Regression test x86-64 are ok with this patch.
Is it ok to commit in trunk ?
Thanks
Laurent
diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c
index 5a21c1f..342877d 100644
--- a/gcc/gcov-io.c
+++ b/gcc/gcov-io.c
@@ -94,9 +94,15 @@ gcov_open (const char *name, int mode)
/* pass mode (ignored) for compatibility */
fd = open (name, O_RDONLY, S_IRUSR | S_IWUSR);
}
- else
+ else if (mode < 0)
+ {
+ /* Write mode - acquire a write-lock. */
+ s_flock.l_type = F_WRLCK;
+ fd = open (name, O_RDWR | O_CREAT | O_TRUNC, 0666);
+ }
+ else /* mode == 0 */
{
- /* Write mode - acquire a write-lock. */
+ /* Read-Write mode - acquire a write-lock. */
s_flock.l_type = F_WRLCK;
fd = open (name, O_RDWR | O_CREAT, 0666);
}