On Fri, May 24, 2013 at 7:42 PM, Xinliang David Li <davi...@google.com> wrote:
> On Fri, May 24, 2013 at 2:32 PM, Sharad Singhai <sing...@google.com> wrote:
>>        if (flag_gcov_file)
>>   {
>> -  char *gcov_file_name
>> -    = make_gcov_file_name (file_name, src->coverage.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_file_intermediate, src);
>
> Is there an indentation issue here?

Yes, fixed.

>
>
>
>> +          else
>> +            {
>> +              char *gcov_file_name
>> +                = make_gcov_file_name (file_name, src->coverage.name);
>>
>
>
> Try to avoid the following format only changes by reorganization --
> for instance refactor the following part into a helper function.

Fixed by adding helper function 'output_gcov_file'.

>
> Ok for google branch with those change.  Please submit the change to trunk 
> asap.

Proposed for trunk in
http://gcc.gnu.org/ml/gcc-patches/2013-05/msg01657.html. I will commit
this patch to google 4.8 branch after one more round of testing.

Thanks,
Sharad

>
> thanks,
>
> David
>
>> -  if (src->coverage.lines)
>> -    {
>> -      FILE *gcov_file = fopen (gcov_file_name, "w");
>> +              if (src->coverage.lines)
>> +                {
>> +                  FILE *gcov_file = fopen (gcov_file_name, "w");
>>
>> -      if (gcov_file)
>> - {
>> -  fnotice (stdout, "Creating '%s'\n", gcov_file_name);
>> -  output_lines (gcov_file, src);
>> -  if (ferror (gcov_file))
>> -    fnotice (stderr, "Error writing output file '%s'\n",
>> -     gcov_file_name);
>> -  fclose (gcov_file);
>> - }
>> -      else
>> - fnotice (stderr, "Could not open output file '%s'\n",
>> - gcov_file_name);
>> -    }
>> -  else
>> -    {
>> -      unlink (gcov_file_name);
>> -      fnotice (stdout, "Removing '%s'\n", gcov_file_name);
>> -    }
>> -  free (gcov_file_name);
>> - }
>> -      fnotice (stdout, "\n");
>> +                  if (gcov_file)
>> +                    {
>> +                      fnotice (stdout, "Creating '%s'\n", gcov_file_name);
>> +                      output_lines (gcov_file, src);
>> +                      if (ferror (gcov_file))
>> +                        fnotice (stderr, "Error writing output file '%s'\n",
>> +                                 gcov_file_name);
>> +                      fclose (gcov_file);
>> +                    }
>> +                  else
>> +                    fnotice (stderr, "Could not open output file '%s'\n",
>> +                             gcov_file_name);
>> +                }
>> +              else
>> +                {
>> +                  unlink (gcov_file_name);
>> +                  fnotice (stdout, "Removing '%s'\n", gcov_file_name);
>> +                }
>> +              free (gcov_file_name);
>> +            }
>> +          fnotice (stdout, "\n");
>> +        }
>>      }
>>
>> +  if (flag_gcov_file && flag_intermediate_format)
>> +    {
>> +      /* Now we've finished writing the intermediate file.  */
>> +      fclose (gcov_file_intermediate);
>> +      XDELETEVEC (gcov_file_intermediate_name);
>> +    }
>> +
>>    if (!file_name)
>>      executed_summary (total_lines, total_executed);
>>  }
>> @@ -766,6 +914,9 @@ release_function (function_t *fn)
>>      }
>>    free (fn->blocks);
>>    free (fn->counts);
>> +  if (flag_demangled_names && fn->demangled_name != fn->name)
>> +    free (fn->demangled_name);
>> +  free (fn->name);
>>  }
>>
>>  /* Release all memory used.  */
>> @@ -1051,6 +1202,12 @@ read_graph_file (void)
>>
>>    fn = XCNEW (function_t);
>>    fn->name = function_name;
>> +          if (flag_demangled_names)
>> +            {
>> +              fn->demangled_name = cplus_demangle (fn->name, DMGL_PARAMS);
>> +              if (!fn->demangled_name)
>> +                fn->demangled_name = fn->name;
>> +            }
>>    fn->ident = ident;
>>    fn->lineno_checksum = lineno_checksum;
>>    fn->cfg_checksum = cfg_checksum;
>> @@ -2280,7 +2437,8 @@ output_lines (FILE *gcov_file, const source_t *src
>>      if (arc->fake)
>>        return_count -= arc->count;
>>
>> -  fprintf (gcov_file, "function %s", fn->name);
>> +  fprintf (gcov_file, "function %s", flag_demangled_names ?
>> +                   fn->demangled_name : fn->name);
>>    fprintf (gcov_file, " called %s",
>>     format_gcov (called_count, 0, -1));
>>    fprintf (gcov_file, " returned %s",
>> Index: doc/gcov.texi
>> ===================================================================
>> --- doc/gcov.texi (revision 199269)
>> +++ doc/gcov.texi (working copy)
>> @@ -131,6 +131,8 @@ gcov [@option{-v}|@option{--version}] [@option{-h}
>>       [@option{-o}|@option{--object-directory} @var{directory|file}]
>>       [@option{-s}|@option{--source-prefix} @var{directory}]
>>       [@option{-d}|@option{--display-progress}]
>> +     [@option{-i}|@option{--intermediate-format}]
>> +     [@option{-m}|@option{--demangled-names}]
>>       @var{files}
>>  @c man end
>>  @c man begin SEEALSO
>> @@ -232,6 +234,50 @@ Unconditional branches are normally not interestin
>>  @itemx --display-progress
>>  Display the progress on the standard output.
>>
>> +@item -i
>> +@itemx --intermediate-format
>> +Output gcov file in an easy-to-parse intermediate text format that can
>> +be used by @command{lcov} or other tools. The output is a single
>> +@file{.gcov} file per @file{.gcda} file. No source code is required.
>> +
>> +The format of the intermediate @file{.gcov} file is plain text with
>> +one entry per line
>> +
>> +@smallexample
>> +file:@var{source_file_name}
>> +function:@var{line_number},@var{execution_count},@var{function_name}
>> +lcount:@var{line number},@var{execution_count}
>> +branch:@var{line_number},@var{branch_coverage_type}
>> +
>> +Where the @var{branch_coverage_type} is
>> +   notexec (Branch not executed)
>> +   taken (Branch executed and taken)
>> +   nottaken (Branch executed, but not taken)
>> +
>> +There can be multiple @var{file} entries in an intermediate gcov
>> +file. All entries following a @var{file} pertain to that source file
>> +until the next @var{file} entry.
>> +@end smallexample
>> +
>> +Here is a sample when @option{-i} is used in conjuction with
>> @option{-b} option:
>> +
>> +@smallexample
>> +file:array.cc
>> +function:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
>> +function:22,1,main
>> +lcount:11,1
>> +lcount:12,1
>> +lcount:14,1
>> +branch:14,taken
>> +lcount:26,1
>> +branch:28,nottaken
>> +@end smallexample
>> +
>> +@item -m
>> +@itemx --demangled-names
>> +Display demangled function names in output. The default is to show
>> +mangled function names.
>> +
>>  @end table
>>
>>  @command{gcov} should be run with the current directory the same as that

Reply via email to