From feb4589d19187bc4b46160d0571eea2cb9a263af Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Fri, 18 May 2018 15:06:31 +0200 Subject: [PATCH] gcov: add new option -t that prints output to stdout (PR gcov-profile/84846). 2018-05-18 Martin Liska PR gcov-profile/84846 * gcov.c (print_usage): Add new -t option. (process_args): Handle the option. (generate_results): Use stdout as output when requested by the option. 2018-05-18 Martin Liska PR gcov-profile/84846 * doc/gcov.texi: Document -t option of gcov tool. From-SVN: r260361 --- gcc/ChangeLog | 13 +++++++++++++ gcc/doc/gcov.texi | 5 +++++ gcc/gcov.c | 36 +++++++++++++++++++++++++++++------- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dc0932fb827..da16d874974 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2018-05-18 Martin Liska + + PR gcov-profile/84846 + * doc/gcov.texi: Document -t option of gcov tool. + +2018-05-18 Martin Liska + + PR gcov-profile/84846 + * gcov.c (print_usage): Add new -t option. + (process_args): Handle the option. + (generate_results): Use stdout as output when requested by + the option. + 2018-05-18 Martin Liska PR gcov-profile/84846 diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index 54625ce67cb..4bd976db0b5 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -134,6 +134,7 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}] [@option{-p}|@option{--preserve-paths}] [@option{-r}|@option{--relative-only}] [@option{-s}|@option{--source-prefix} @var{directory}] + [@option{-t}|@option{--stdout}] [@option{-u}|@option{--unconditional-branches}] [@option{-x}|@option{--hash-filenames}] @var{files} @@ -319,6 +320,10 @@ directory, and the pathname to the source directory is not wanted when determining the output file names. Note that this prefix detection is applied before determining whether the source file is absolute. +@item -t +@itemx --stdout +Output to standard output instead of output files. + @item -u @itemx --unconditional-branches When branch probabilities are given, include those of unconditional branches. diff --git a/gcc/gcov.c b/gcc/gcov.c index 8ed6e0d4d3f..887972a1fcd 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -462,6 +462,10 @@ static int flag_unconditional = 0; static int flag_gcov_file = 1; +/* Output to stdout instead to a gcov file. */ + +static int flag_use_stdout = 0; + /* Output progress indication if this is true. This is off by default and can be turned on by the -d option. */ @@ -831,6 +835,7 @@ print_usage (int error_p) fnotice (file, " -p, --preserve-paths Preserve all pathname components\n"); fnotice (file, " -r, --relative-only Only show data for relative sources\n"); fnotice (file, " -s, --source-prefix DIR Source prefix to elide\n"); + fnotice (file, " -t, --stdout Output to stdout instead of a file\n"); fnotice (file, " -u, --unconditional-branches Show unconditional branch counts too\n"); fnotice (file, " -v, --version Print version number, then exit\n"); fnotice (file, " -w, --verbose Print verbose informations\n"); @@ -874,6 +879,7 @@ static const struct option options[] = { "object-directory", required_argument, NULL, 'o' }, { "object-file", required_argument, NULL, 'o' }, { "source-prefix", required_argument, NULL, 's' }, + { "stdout", no_argument, NULL, 't' }, { "unconditional-branches", no_argument, NULL, 'u' }, { "display-progress", no_argument, NULL, 'd' }, { "hash-filenames", no_argument, NULL, 'x' }, @@ -888,7 +894,7 @@ process_args (int argc, char **argv) { int opt; - const char *opts = "abcdfhijklmno:prs:uvwx"; + const char *opts = "abcdfhijklmno:prs:tuvwx"; while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1) { switch (opt) @@ -952,6 +958,9 @@ process_args (int argc, char **argv) case 'w': flag_verbose = 1; break; + case 't': + flag_use_stdout = 1; + break; case 'v': print_version (); /* print_version will exit. */ @@ -1293,7 +1302,7 @@ generate_results (const char *file_name) file_name = canonicalize_name (file_name); } - if (flag_gcov_file && flag_intermediate_format) + if (flag_gcov_file && flag_intermediate_format && !flag_use_stdout) { /* Open the intermediate file. */ gcov_intermediate_filename = get_gcov_intermediate_filename (file_name); @@ -1325,7 +1334,9 @@ generate_results (const char *file_name) } accumulate_line_counts (src); - function_summary (&src->coverage, "File"); + + if (!flag_use_stdout) + function_summary (&src->coverage, "File"); total_lines += src->coverage.lines; total_executed += src->coverage.lines_executed; if (flag_gcov_file) @@ -1333,14 +1344,25 @@ generate_results (const char *file_name) if (flag_intermediate_format) /* Output the intermediate format without requiring source files. This outputs a section to a *single* file. */ - output_intermediate_file (gcov_intermediate_file, src); + output_intermediate_file ((flag_use_stdout + ? stdout : gcov_intermediate_file), src); else - output_gcov_file (file_name, src); - fnotice (stdout, "\n"); + { + if (flag_use_stdout) + { + if (src->coverage.lines) + output_lines (stdout, src); + } + else + { + output_gcov_file (file_name, src); + fnotice (stdout, "\n"); + } + } } } - if (flag_gcov_file && flag_intermediate_format) + if (flag_gcov_file && flag_intermediate_format && !flag_use_stdout) { /* Now we've finished writing the intermediate file. */ fclose (gcov_intermediate_file); -- 2.30.2