https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89961
--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Cristian Morales Vega from comment #3) > I have just took a look inside one of the intermediate format .gcov files > and didn't see any "current_working_directory". There is a full path "file" > variable though. It's there since r266521. > > Not sure if that's what you mean. In any case anything inside the .gcov > files would not solve my issue. My problem is that all the .gcov files are > being created in the same directory and the .gcov files themselves get > overwritten. > > So I have > > ./CMakeFiles/<cmake_target_name>.dir/src/error.cpp.o > ./CMakeFiles/<cmake_target_name>.dir/src/error.cpp.gcda > ./CMakeFiles/<cmake_target_name>.dir/src/error.cpp.gcno > ./test/CMakeFiles/catch_tests.dir/error.cpp.o > ./test/CMakeFiles/catch_tests.dir/error.cpp.gcda > ./test/CMakeFiles/catch_tests.dir/error.cpp.gcno > > > And a single "error.cpp.gcda.gcov" file since cmake has run > > /usr/bin/gcov -x -i -o <build_dir>/CMakeFiles/<cmake_target_name>.dir/src > <build_dir>/CMakeFiles/cmake_target_name.dir/src/error.cpp.gcda > > and > > /usr/bin/gcov -x -i -o <build_dir>/test/CMakeFiles/catch_tests.dir > <build_dir>/test/CMakeFiles/catch_tests.dir/error.cpp.gcda > > from the same directory, put all the files in a flat tarball and sent it to > a CDash server. So I need the file names written to my hard drive to be > different (i.e. -x to have effect). My suggestion would be adding 'data_file' into a JSON report: gcov -ti -l -s /tmp/auto -o /tmp/ main.gcda | python -m json.tool /tmp/main.gcda:stamp mismatch with notes file { "current_working_directory": "/tmp", "data_file": "main.gcda", "files": [ { "file": "auto/main.c", "functions": [ { "blocks": 8, "blocks_executed": 0, "demangled_name": "main", "end_column": 1, "end_line": 21, "execution_count": 0, "name": "main", "start_column": 5, "start_line": 6 } ], "lines": [ { "branches": [], "count": 0, "function_name": "main", "line_number": 6, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 8, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 10, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 12, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 15, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 17, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 18, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "main", "line_number": 20, "unexecuted_block": true } ] }, { "file": "auto/foo.h", "functions": [ { "blocks": 2, "blocks_executed": 0, "demangled_name": "foo", "end_column": 1, "end_line": 4, "execution_count": 0, "name": "foo", "start_column": 5, "start_line": 1 } ], "lines": [ { "branches": [], "count": 0, "function_name": "foo", "line_number": 1, "unexecuted_block": true }, { "branches": [], "count": 0, "function_name": "foo", "line_number": 3, "unexecuted_block": true } ] } ], "format_version": "1", "gcc_version": "9.0.1 20190405 (experimental)" } Which should help you with uniq mapping now. Patch candidate: diff --git a/gcc/gcov.c b/gcc/gcov.c index 1d576552a45..1fc37a07c34 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -1421,6 +1421,7 @@ generate_results (const char *file_name) if (bbg_cwd != NULL) root->set ("current_working_directory", new json::string (bbg_cwd)); + root->set ("data_file", new json::string (file_name)); json::array *json_files = new json::array (); root->set ("files", json_files);