[patch][gcov] Clarify the internals a bit

Steven Bosscher stevenb.gcc@gmail.com
Sun Jul 22 14:34:00 GMT 2012


Hello,

While reading up on how gcov/profiling works, I noticed that there are
a lot of places where the notes file is still referred to as the
"basic block graph" file. Also, the gcov manual has not been updated
for -fprofile-dir. The attached patch addresses these issues, so that
the next gcov newbie hopefully has an easier time understanding how
everything fits together.

Bootstrapped&tested on x86_64-unknown-linux-gnu. OK?

Ciao!
Steven
-------------- next part --------------
gcc/
	* coverage.c: Refer to "notes file" instead of "graph file"
	in all comments.  Explain history of bbg prefix.
	* gcov-io.h: Likewise.
	* gcov.c: Likewise.
	(find_source): Likewise in fnotice.
	(read_graph_file): Likewise.
	(read_count_file): Likewise.
	* doc/gcov.texi: Document -fprofile-dir flag.  Add "notes file"
	and "data file" explicitly in the explanation of the files.

libgcc/
	* libgcov.c (__gcov_ior_profiler): Benign comment fix.

Index: gcc/coverage.c
===================================================================
--- gcc/coverage.c	(revision 189747)
+++ gcc/coverage.c	(working copy)
@@ -97,14 +97,16 @@ static GTY(()) tree gcov_info_var;
 static GTY(()) tree gcov_fn_info_type;
 static GTY(()) tree gcov_fn_info_ptr_type;
 
-/* Name of the output file for coverage output file.  If this is NULL
-   we're not writing to the notes file.  */
+/* Name of the notes (gcno) output file.  The "bbg" prefix is for
+   historical reasons, when the notes file contained only the
+   basic block graph notes.
+   If this is NULL we're not writing to the notes file.  */
 static char *bbg_file_name;
 
-/* File stamp for graph file.  */
+/* File stamp for notes file.  */
 static unsigned bbg_file_stamp;
 
-/* Name of the count data file.  */
+/* Name of the count data (gcda) file.  */
 static char *da_file_name;
 
 /* Hash table of count data.  */
@@ -566,7 +568,7 @@ coverage_compute_cfg_checksum (void)
   return chksum;
 }
 

-/* Begin output to the graph file for the current function.
+/* Begin output to the notes file for the current function.
    Writes the function header. Returns nonzero if data should be output.  */
 
 int
@@ -1079,7 +1081,7 @@ coverage_obj_finish (VEC(constructor_elt
 }
 
 /* Perform file-level initialization. Read in data file, generate name
-   of graph file.  */
+   of notes file.  */
 
 void
 coverage_init (const char *filename)
@@ -1131,7 +1133,7 @@ coverage_init (const char *filename)
     }
 }
 
-/* Performs file-level cleanup.  Close graph file, generate coverage
+/* Performs file-level cleanup.  Close notes file, generate coverage
    variables and constructor.  */
 
 void
Index: gcc/gcov-io.h
===================================================================
--- gcc/gcov-io.h	(revision 189747)
+++ gcc/gcov-io.h	(working copy)
@@ -99,7 +99,7 @@ see the files COPYING3 and COPYING.RUNTI
    tags, values [41..9f] for the notes file and [a1..ff] for the data
    file.
 
-   The basic block graph file contains the following records
+   The notes file contains the following records
    	note: unit function-graph*
 	unit: header int32:checksum string:source
 	function-graph: announce_function basic_blocks {arcs | lines}*
Index: gcc/gcov.c
===================================================================
--- gcc/gcov.c	(revision 189747)
+++ gcc/gcov.c	(working copy)
@@ -283,14 +283,16 @@ static unsigned total_executed;
 
 static time_t bbg_file_time;
 
-/* Name and file pointer of the input file for the basic block graph.  */
+/* Name of the notes (gcno) output file.  The "bbg" prefix is for
+   historical reasons, when the notes file contained only the
+   basic block graph notes.  */
 
 static char *bbg_file_name;
 
 /* Stamp of the bbg file */
 static unsigned bbg_stamp;
 
-/* Name and file pointer of the input file for the arc count data.  */
+/* Name and file pointer of the input file for the count data (gcda).  */
 
 static char *da_file_name;
 
@@ -973,7 +975,7 @@ find_source (const char *file_name)
     {
       static int info_emitted;
 
-      fnotice (stderr, "%s:source file is newer than graph file '%s'\n",
+      fnotice (stderr, "%s:source file is newer than notes file '%s'\n",
 	       file_name, bbg_file_name);
       if (!info_emitted)
 	{
@@ -987,7 +989,7 @@ find_source (const char *file_name)
   return idx;
 }
 
-/* Read the graph file.  Return list of functions read -- in reverse order.  */
+/* Read the notes file.  Return list of functions read -- in reverse order.  */
 
 static function_t *
 read_graph_file (void)
@@ -1003,13 +1005,13 @@ read_graph_file (void)
 
   if (!gcov_open (bbg_file_name, 1))
     {
-      fnotice (stderr, "%s:cannot open graph file\n", bbg_file_name);
+      fnotice (stderr, "%s:cannot open notes file\n", bbg_file_name);
       return fns;
     }
   bbg_file_time = gcov_time ();
   if (!gcov_magic (gcov_read_unsigned (), GCOV_NOTE_MAGIC))
     {
-      fnotice (stderr, "%s:not a gcov graph file\n", bbg_file_name);
+      fnotice (stderr, "%s:not a gcov notes file\n", bbg_file_name);
       gcov_close ();
       return fns;
     }
@@ -1245,7 +1247,7 @@ read_count_file (function_t *fns)
   tag = gcov_read_unsigned ();
   if (tag != bbg_stamp)
     {
-      fnotice (stderr, "%s:stamp mismatch with graph file\n", da_file_name);
+      fnotice (stderr, "%s:stamp mismatch with notes file\n", da_file_name);
       goto cleanup;
     }
 
Index: gcc/doc/gcov.texi
===================================================================
--- gcc/doc/gcov.texi	(revision 189747)
+++ gcc/doc/gcov.texi	(working copy)
@@ -551,20 +551,23 @@ collected at that point to be dumped to
 
 @command{gcov} uses two files for profiling.  The names of these files
 are derived from the original @emph{object} file by substituting the
-file suffix with either @file{.gcno}, or @file{.gcda}.  All of these files
-are placed in the same directory as the object file, and contain data
-stored in a platform-independent format.
+file suffix with either @file{.gcno}, or @file{.gcda}.  The files
+contain coverage and profile data stored in a platform-independent format.
+The @file{.gcno} files are placed in the same directory as the object
+file.  By default, the @file{.gcda} files are also stored in the same
+directory as the object file, but the GCC @option{-profile-dir} option
+may be used to store the @file{.gcda} files in a separate directory.
 
-The @file{.gcno} file is generated when the source file is compiled with
-the GCC @option{-ftest-coverage} option.  It contains information to
+The @file{.gcno} notes file is generated when the source file is compiled
+with the GCC @option{-ftest-coverage} option.  It contains information to
 reconstruct the basic block graphs and assign source line numbers to
 blocks.
 
-The @file{.gcda} file is generated when a program containing object files
-built with the GCC @option{-fprofile-arcs} option is executed.  A
-separate @file{.gcda} file is created for each object file compiled with
-this option.  It contains arc transition counts, and some summary
-information.
+The @file{.gcda} count data file is generated when a program containing
+object files built with the GCC @option{-fprofile-arcs} option is executed.
+A separate @file{.gcda} file is created for each object file compiled with
+this option.  It contains arc transition counts, value profile counts, and
+some summary information.
 
 The full details of the file format is specified in @file{gcov-io.h},
 and functions provided in that header file should be used to access the
Index: libgcc/libgcov.c
===================================================================
--- libgcc/libgcov.c	(revision 189747)
+++ libgcc/libgcov.c	(working copy)
@@ -1040,8 +1040,7 @@ __gcov_average_profiler (gcov_type *coun
 #endif
 
 #ifdef L_gcov_ior_profiler
-/* Increase corresponding COUNTER by VALUE.  FIXME: Perhaps we want
-   to saturate up.  */
+/* Bitwise-OR VALUE into COUNTER.  */
 
 void
 __gcov_ior_profiler (gcov_type *counters, gcov_type value)


More information about the Gcc-patches mailing list