Hi. This is follow up which I've just noticed. Main problem we have is that an instrumented compiler w/ -fprofile-generate (built in $OBJDIR/gcc subfolder) will generate all *.gcda files in a same dir as *.o files. That's problematic because we then have *.gcda files spread in 'profile' subfolder (because profile' compiler builds libgcc) and 'train' subfolder. Eventually in 'feedback' stage we don't load any *.gcda files :/
Well I really hope we need to set -fprofile-generate=$folder to a $folder. There comes second problem: all *.gcda files are created as $folder/$aux_base_name.gcda which makes it useless as we multiple same file names: $ find . -name expr.c ./libcpp/expr.c ./gcc/expr.c Thus I suggest patch #0001 that appends full path of current work dir. Patch #0002 sets a folder for PGO bootstrap. So far so good with a small exception: conftest.gcda files that trigger -Wcoverage-mismatch. Can we remove these before a stage? Do we do a similar thing somewhere? Thoughts? Thanks, Martin
>From f00c6bd99b98df7c650bb3fcbbb983671c99caef Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Mon, 28 Aug 2017 11:58:47 +0200 Subject: [PATCH 2/2] Hack Makefile.tpl --- Makefile.in | 5 +++-- Makefile.tpl | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile.in b/Makefile.in index 78db0982ba2..16b76906ad0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -529,13 +529,14 @@ STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \ --disable-build-format-warnings -STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +profile_folder=`${PWD_COMMAND}`/gcov-profiles/ +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate=$(profile_folder) STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) STAGEtrain_CFLAGS = $(STAGE3_CFLAGS) STAGEtrain_TFLAGS = $(STAGE3_TFLAGS) -STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use=$(profile_folder) -fdump-ipa-profile STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g diff --git a/Makefile.tpl b/Makefile.tpl index 5fcd7e358d9..129175a579c 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -452,13 +452,14 @@ STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" \ --disable-build-format-warnings -STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +profile_folder=`${PWD_COMMAND}`/gcov-profiles/ +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate=$(profile_folder) STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) STAGEtrain_CFLAGS = $(STAGE3_CFLAGS) STAGEtrain_TFLAGS = $(STAGE3_TFLAGS) -STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use +STAGEfeedback_CFLAGS = $(STAGE4_CFLAGS) -fprofile-use=$(profile_folder) -fdump-ipa-profile STAGEfeedback_TFLAGS = $(STAGE4_TFLAGS) STAGEautoprofile_CFLAGS = $(STAGE2_CFLAGS) -g -- 2.14.1
>From 654ca05a0e1e0261a4477283ca2dd8678f62f1e7 Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Wed, 16 Aug 2017 10:22:57 +0200 Subject: [PATCH 1/2] Append PWD to path when using -fprofile-generate=/some/path. --- gcc/coverage.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gcc/coverage.c b/gcc/coverage.c index ed469107e3e..5780e19bbc8 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)) + { + if (profile_data_prefix) + { + const char *pwd = getpwd (); + unsigned l1 = strlen (profile_data_prefix); + unsigned l2 = strlen (pwd); + + char *b = XNEWVEC (char, l1 + l2 + 2); + memcpy (b, profile_data_prefix, l1); + b[l1] = '/'; + memcpy (b + l1 + 1, pwd, l2); + b[l1 + l2 + 1] = '\0'; + profile_data_prefix = b; + } + else + profile_data_prefix = getpwd (); + } if (profile_data_prefix) prefix_len = strlen (profile_data_prefix); -- 2.14.1