aboutsummaryrefslogtreecommitdiff
path: root/gcc/coverage.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-06-29 16:03:36 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-06-29 14:03:36 +0000
commit1f2bb38a85710f650d1ea87f0765cb50e19c3212 (patch)
treea4cb15221ae4ad1a6c3e227f6bbb07e6328aa6fc /gcc/coverage.c
parent52057dc4ac5295caebf83147f688d769c93cbc8d (diff)
When using -fprofile-generate=/some/path mangle absolute path of file (PR lto/85759).
2018-06-29 Martin Liska <mliska@suse.cz> PR lto/85759 * coverage.c (coverage_init): Mangle full path name. * doc/invoke.texi: Document the change. * gcov-io.c (mangle_path): New. * gcov-io.h (mangle_path): Likewise. * gcov.c (mangle_name): Use mangle_path for path mangling. From-SVN: r262251
Diffstat (limited to 'gcc/coverage.c')
-rw-r--r--gcc/coverage.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c
index 350cc4559c5..9c9d3dbd39e 100644
--- a/gcc/coverage.c
+++ b/gcc/coverage.c
@@ -1220,8 +1220,24 @@ coverage_init (const char *filename)
g->get_passes ()->get_pass_profile ()->static_pass_number;
g->get_dumps ()->dump_start (profile_pass_num, NULL);
- if (!profile_data_prefix && !IS_ABSOLUTE_PATH (filename))
- profile_data_prefix = getpwd ();
+ if (!IS_ABSOLUTE_PATH (filename))
+ {
+ /* When a profile_data_prefix is provided, then mangle full path
+ of filename in order to prevent file path clashing. */
+ if (profile_data_prefix)
+ {
+#if HAVE_DOS_BASED_FILE_SYSTEM
+ const char separator = "\\";
+#else
+ const char *separator = "/";
+#endif
+ filename = concat (getpwd (), separator, filename, NULL);
+ filename = mangle_path (filename);
+ len = strlen (filename);
+ }
+ else
+ profile_data_prefix = getpwd ();
+ }
if (profile_data_prefix)
prefix_len = strlen (profile_data_prefix);