From: Bernd Edlinger <bernd.edlinger@hotmail.de>
To: Joseph Myers <joseph@codesourcery.com>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
Nathan Sidwell <nathan@acm.org>, Jan Hubicka <hubicka@ucw.cz>
Subject: [PING] [PATCH] Force use of absolute path names for gcov
Date: Fri, 28 Apr 2017 18:14:00 -0000 [thread overview]
Message-ID: <AM4PR0701MB2162303F105E7C43E57D18F3E4130@AM4PR0701MB2162.eurprd07.prod.outlook.com> (raw)
In-Reply-To: <AM4PR0701MB21621E56A6E3F34CBC15AA1FE41A0@AM4PR0701MB2162.eurprd07.prod.outlook.com>
[-- Attachment #1: Type: text/plain, Size: 1386 bytes --]
Ping...
I attached a rebased patch file, with the doc changes and
merge conflicts with trunk of today fixed, but otherwise
identical.
Thanks
Bernd.
On 04/21/17 22:26, Bernd Edlinger wrote:
>
>
> On 04/21/17 21:50, Joseph Myers wrote:
>> On Fri, 21 Apr 2017, Bernd Edlinger wrote:
>>
>>> So I would like to add a -fprofile-abs-path option that
>>> forces absolute path names in gcno files, which allows gcov
>>> to get the true canonicalized source name.
>>
>> I don't see any actual documentation of this option in the patch (you add
>> it to the summary list of options, and mention it in text under the
>> documentation of --coverage, but don't have any actual @item
>> -fprofile-abs-path / @opindex fprofile-abs-path paragraph with text
>> describing what the option does).
>>
>
> Ah yes, thanks.
>
> So I'll add one more sentence to invoke.texi:
>
> @@ -10696,6 +10713,12 @@
> generate test coverage data. Coverage data matches the source files
> more closely if you do not optimize.
>
> +@item -fprofile-abs-path
> +@opindex fprofile-abs-path
> +Automatically convert relative source file names to absolute path names
> +in the @file{.gcno} files. This allows @command{gcov} to find the correct
> +sources in projects with multiple directories.
> +
> @item -fprofile-dir=@var{path}
> @opindex fprofile-dir
>
>
>
>
> Bernd.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: changelog-gcov-abs-path.diff --]
[-- Type: text/x-patch; name="changelog-gcov-abs-path.diff", Size: 498 bytes --]
gcc:
2017-04-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
* doc/invoke.texi: Document the -fprofile-abs-path option.
* common.opt (fprofile-abs-path): New option.
* gcov-io.h (gcov_write_filename): Declare.
* gcov-io.c (gcov_write_filename): New function.
* coverage.c (coverage_begin_function): Use gcov_write_filename.
* profile.c (output_location): Likewise.
gcc/testsuite:
2017-04-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gcc.misc-tests/gcov-1a.c: New test.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: patch-gcov-abs-path.diff --]
[-- Type: text/x-patch; name="patch-gcov-abs-path.diff", Size: 5383 bytes --]
Index: gcc/common.opt
===================================================================
--- gcc/common.opt (revision 246571)
+++ gcc/common.opt (working copy)
@@ -1965,6 +1965,10 @@ fprofile
Common Report Var(profile_flag)
Enable basic program profiling code.
+fprofile-abs-path
+Common Report Var(profile_abs_path_flag)
+Generate absolute source path names for gcov.
+
fprofile-arcs
Common Report Var(profile_arc_flag)
Insert arc-based program profiling code.
Index: gcc/coverage.c
===================================================================
--- gcc/coverage.c (revision 246571)
+++ gcc/coverage.c (working copy)
@@ -663,7 +663,7 @@ coverage_begin_function (unsigned lineno_checksum,
gcov_write_unsigned (cfg_checksum);
gcov_write_string (IDENTIFIER_POINTER
(DECL_ASSEMBLER_NAME (current_function_decl)));
- gcov_write_string (xloc.file);
+ gcov_write_filename (xloc.file);
gcov_write_unsigned (xloc.line);
gcov_write_length (offset);
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi (revision 246571)
+++ gcc/doc/invoke.texi (working copy)
@@ -441,6 +441,7 @@ Objective-C and Objective-C++ Dialects}.
@item Program Instrumentation Options
@xref{Instrumentation Options,,Program Instrumentation Options}.
@gccoptlist{-p -pg -fprofile-arcs --coverage -ftest-coverage @gol
+-fprofile-abs-path @gol
-fprofile-dir=@var{path} -fprofile-generate -fprofile-generate=@var{path} @gol
-fsanitize=@var{style} -fsanitize-recover -fsanitize-recover=@var{style} @gol
-fasan-shadow-offset=@var{number} -fsanitize-sections=@var{s1},@var{s2},... @gol
@@ -10639,6 +10640,12 @@ additional @option{-ftest-coverage} option. You d
every source file in a program.
@item
+Compile the source files additionally with @option{-fprofile-abs-path}
+to create absolute path names in the @file{.gcno} files. This allows
+@command{gcov} to find the correct sources in projects with multiple
+directories.
+
+@item
Link your object files with @option{-lgcov} or @option{-fprofile-arcs}
(the latter implies the former).
@@ -10696,6 +10713,12 @@
generate test coverage data. Coverage data matches the source files
more closely if you do not optimize.
+@item -fprofile-abs-path
+@opindex fprofile-abs-path
+Automatically convert relative source file names to absolute path names
+in the @file{.gcno} files. This allows @command{gcov} to find the correct
+sources in projects with multiple directories.
+
@item -fprofile-dir=@var{path}
@opindex fprofile-dir
Index: gcc/gcov-io.c
===================================================================
--- gcc/gcov-io.c (revision 246571)
+++ gcc/gcov-io.c (working copy)
@@ -353,6 +353,37 @@ gcov_write_string (const char *string)
#endif
#if !IN_LIBGCOV
+/* Write FILENAME to coverage file. Sets error flag on file
+ error, overflow flag on overflow */
+
+GCOV_LINKAGE void
+gcov_write_filename (const char *filename)
+{
+ char buf[1024];
+ size_t len;
+
+ if (profile_abs_path_flag && filename && filename[0]
+ && !(IS_DIR_SEPARATOR (filename[0])
+#if HAVE_DOS_BASED_FILE_SYSTEM
+ || filename[1] == ':'
+#endif
+ )
+ && (len = strlen (filename)) < sizeof (buf) - 1)
+ {
+ if (getcwd (buf, sizeof (buf) - len - 1) != NULL)
+ {
+ if (buf[0] && !IS_DIR_SEPARATOR (buf[strlen (buf) - 1]))
+ strcat (buf, "/");
+ strcat (buf, filename);
+ filename = buf;
+ }
+ }
+
+ return gcov_write_string (filename);
+}
+#endif
+
+#if !IN_LIBGCOV
/* Write a tag TAG and reserve space for the record length. Return a
value to be used for gcov_write_length. */
Index: gcc/gcov-io.h
===================================================================
--- gcc/gcov-io.h (revision 246571)
+++ gcc/gcov-io.h (working copy)
@@ -388,6 +388,7 @@ GCOV_LINKAGE void gcov_write_unsigned (gcov_unsign
/* Available only in compiler */
GCOV_LINKAGE unsigned gcov_histo_index (gcov_type value);
GCOV_LINKAGE void gcov_write_string (const char *);
+GCOV_LINKAGE void gcov_write_filename (const char *);
GCOV_LINKAGE gcov_position_t gcov_write_tag (gcov_unsigned_t);
GCOV_LINKAGE void gcov_write_length (gcov_position_t /*position*/);
#endif
Index: gcc/profile.c
===================================================================
--- gcc/profile.c (revision 246571)
+++ gcc/profile.c (working copy)
@@ -956,7 +956,7 @@ output_location (char const *file_name, int line,
{
prev_file_name = file_name;
gcov_write_unsigned (0);
- gcov_write_string (prev_file_name);
+ gcov_write_filename (prev_file_name);
}
if (line_differs)
{
Index: gcc/testsuite/gcc.misc-tests/gcov-1a.c
===================================================================
--- gcc/testsuite/gcc.misc-tests/gcov-1a.c (revision 0)
+++ gcc/testsuite/gcc.misc-tests/gcov-1a.c (working copy)
@@ -0,0 +1,20 @@
+/* Test Gcov basics. */
+
+/* { dg-options "-fprofile-arcs -ftest-coverage -fprofile-abs-path" } */
+/* { dg-do run { target native } } */
+
+void noop ()
+{
+}
+
+int main ()
+{
+ int i;
+
+ for (i = 0; i < 10; i++) /* count(11) */
+ noop (); /* count(10) */
+
+ return 0; /* count(1) */
+}
+
+/* { dg-final { run-gcov gcov-1a.c } } */
next prev parent reply other threads:[~2017-04-28 17:42 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-21 18:51 Bernd Edlinger
2017-04-21 20:27 ` Joseph Myers
2017-04-21 20:57 ` Bernd Edlinger
2017-04-28 18:14 ` Bernd Edlinger [this message]
2017-05-12 16:48 ` [PING**2] " Bernd Edlinger
2017-06-01 15:59 ` [PING**3] " Bernd Edlinger
2017-06-01 17:52 ` Nathan Sidwell
2017-06-01 19:24 ` Bernd Edlinger
2017-06-02 11:35 ` Nathan Sidwell
2017-06-02 14:43 ` Bernd Edlinger
2017-06-05 11:11 ` Nathan Sidwell
2017-06-05 16:31 ` Bernd Edlinger
2017-06-05 19:00 ` Nathan Sidwell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=AM4PR0701MB2162303F105E7C43E57D18F3E4130@AM4PR0701MB2162.eurprd07.prod.outlook.com \
--to=bernd.edlinger@hotmail.de \
--cc=gcc-patches@gcc.gnu.org \
--cc=hubicka@ucw.cz \
--cc=joseph@codesourcery.com \
--cc=nathan@acm.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).