diff options
author | Martin Liska <mliska@suse.cz> | 2018-06-29 16:03:36 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-06-29 14:03:36 +0000 |
commit | 1f2bb38a85710f650d1ea87f0765cb50e19c3212 (patch) | |
tree | a4cb15221ae4ad1a6c3e227f6bbb07e6328aa6fc /gcc/coverage.c | |
parent | 52057dc4ac5295caebf83147f688d769c93cbc8d (diff) | |
download | gcc-1f2bb38a85710f650d1ea87f0765cb50e19c3212.zip gcc-1f2bb38a85710f650d1ea87f0765cb50e19c3212.tar.gz gcc-1f2bb38a85710f650d1ea87f0765cb50e19c3212.tar.bz2 |
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.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c index 350cc45..9c9d3db 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); |