On 6/20/19 3:29 PM, david.tay...@dell.com wrote: >> From: Martin Liška <mli...@suse.cz> >> Sent: Thursday, June 20, 2019 9:07 AM >> >> On 6/20/19 3:00 PM, david.tay...@dell.com wrote: >>> >>>> From: Martin Liška <mli...@suse.cz> >>>> Sent: Thursday, June 20, 2019 5:12 AM >>>> >>>> On 6/19/19 7:11 PM, david.tay...@dell.com wrote: >>>>> Thanks for the patch. Standalone it is not sufficient. Combined >>>>> with the other two changes that have been discussed -- >>>> >>>> Why is that not sufficient? If you build from top-level and you have >>>> .o files that overwrite each other, then you can set >>>> -fprofile-note-dir=/tmp/my- unique-folder >>>> >>>> And you'll not overwrite .gcno files. >>>> >>>> Martin >>> >>> Right now GCC names the GCNO files '-.gcno'. >>> >>> With your patch they get put into a specified directory. But, unless >>> I am prepared to create over 16,000 directories each to hold just one >>> file (I'm not), it is not sufficient. >>> >>> What I want to do -- unless it is going to create problems -- is to >>> place the notes files alongside the object files. The files foo.o and >>> foo.gcno would be in the same directory. > >> I would recommend that. You can achieve that with -fprofile-note-dir=. > > But unless some other change is also made, the '-o -' part of our > compilation line results in all the notes files having names of > '-.gcno'. While I have considered replacing the '-o -' with '-pipe' > when doing instrumentation, I am loathe to make the dot c to > dot o rule any more complicated -- it is already 30+ lines long. > > Your patch makes things much better. And for many it would be sufficient. > For us, sadly, it is not enough. >
I see. What about the following patch: $ ./gcc/xgcc -Bgcc /tmp/main.c --coverage -fprofile-note=/tmp/main.gcno $ ls -l /tmp/main.gcno -rw-r--r-- 1 marxin users 428 Jun 20 15:48 /tmp/main.gcno Martin
>From 30eb7f04c2ee84b5199ea908c8b72cec2163825f Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Thu, 20 Jun 2019 15:47:18 +0200 Subject: [PATCH] Add -fprofile-note option. --- gcc/common.opt | 4 ++++ gcc/coverage.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/common.opt b/gcc/common.opt index a1544d06824..c1b90562b9b 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2096,6 +2096,10 @@ Common Joined RejectNegative Var(profile_data_prefix) Set the top-level directory for storing the profile data. The default is 'pwd'. +fprofile-note= +Common Joined RejectNegative Var(profile_note_location) +Select the name for storing the profile note file. + fprofile-correction Common Report Var(flag_profile_correction) Enable correction of flow inconsistent profile data input. diff --git a/gcc/coverage.c b/gcc/coverage.c index 1ffefd5f482..960ff7ee86a 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -1255,9 +1255,14 @@ coverage_init (const char *filename) /* Name of bbg file. */ if (flag_test_coverage && !flag_compare_debug) { - bbg_file_name = XNEWVEC (char, len + strlen (GCOV_NOTE_SUFFIX) + 1); - memcpy (bbg_file_name, filename, len); - strcpy (bbg_file_name + len, GCOV_NOTE_SUFFIX); + if (profile_note_location) + bbg_file_name = xstrdup (profile_note_location); + else + { + bbg_file_name = XNEWVEC (char, len + strlen (GCOV_NOTE_SUFFIX) + 1); + memcpy (bbg_file_name, filename, len); + strcpy (bbg_file_name + len, GCOV_NOTE_SUFFIX); + } if (!gcov_open (bbg_file_name, -1)) { -- 2.21.0