Improve JSON format: add function names for lines.
authorMartin Liska <mliska@suse.cz>
Mon, 11 Mar 2019 11:48:49 +0000 (12:48 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 11 Mar 2019 11:48:49 +0000 (11:48 +0000)
2019-03-11  Martin Liska  <mliska@suse.cz>

* gcov.c (output_intermediate_json_line): Print function
name of each line.
(output_json_intermediate_file): Add new argument.
* doc/gcov.texi: Document the change.

From-SVN: r269581

gcc/ChangeLog
gcc/doc/gcov.texi
gcc/gcov.c

index 989f883053dcf579f0a1917c79ccca8501226577..d4bfbece8338ceb6611494ee961de5730099ebba 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-11  Martin Liska  <mliska@suse.cz>
+
+       * gcov.c (output_intermediate_json_line): Print function
+       name of each line.
+       (output_json_intermediate_file): Add new argument.
+       * doc/gcov.texi: Document the change.
+
 2019-03-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR rtl-optimization/89588
index eaac2f6940969f6bcc845d911814c284c73dc12f..0960e4acb26d052dea5d1a73ee87dcdc796ed222 100644 (file)
@@ -276,6 +276,7 @@ Each @var{line} has the following form:
   "count": @var{count},
   "line_number": @var{line_number},
   "unexecuted_block": @var{unexecuted_block}
+  "function_name": @var{function_name},
 @}
 @end smallexample
 
@@ -294,6 +295,10 @@ Fields of the @var{line} element have following semantics:
 (not all statements on the line are executed)
 @end itemize
 
+@item
+@var{function_name}: a name of a function this @var{line} belongs to
+(for a line with an inlined statements can be not set)
+
 Each @var{branch} has the following form:
 
 @smallexample
index 9e27a826ea4f490552cba3f3bddbf9f6f6157a02..37e787a18232d0813225cb1248a16562e45f4b21 100644 (file)
@@ -1041,17 +1041,21 @@ process_args (int argc, char **argv)
   return optind;
 }
 
-/* Output intermediate LINE sitting on LINE_NUM to JSON OBJECT.  */
+/* Output intermediate LINE sitting on LINE_NUM to JSON OBJECT.
+   Add FUNCTION_NAME to the LINE.  */
 
 static void
 output_intermediate_json_line (json::array *object,
-                              line_info *line, unsigned line_num)
+                              line_info *line, unsigned line_num,
+                              const char *function_name)
 {
   if (!line->exists)
     return;
 
   json::object *lineo = new json::object ();
   lineo->set ("line_number", new json::number (line_num));
+  if (function_name != NULL)
+    lineo->set ("function_name", new json::string (function_name));
   lineo->set ("count", new json::number (line->count));
   lineo->set ("unexecuted_block",
              new json::literal (line->has_unexecuted_block));
@@ -1141,6 +1145,8 @@ output_json_intermediate_file (json::array *json_files, source_info *src)
   json::array *lineso = new json::array ();
   root->set ("lines", lineso);
 
+  function_info *last_non_group_fn = NULL;
+
   for (unsigned line_num = 1; line_num <= src->lines.size (); line_num++)
     {
       vector<function_info *> *fns = src->get_functions_at_location (line_num);
@@ -1150,17 +1156,23 @@ output_json_intermediate_file (json::array *json_files, source_info *src)
        for (vector<function_info *>::iterator it2 = fns->begin ();
             it2 != fns->end (); it2++)
          {
+           if (!(*it2)->is_group)
+             last_non_group_fn = *it2;
+
            vector<line_info> &lines = (*it2)->lines;
            for (unsigned i = 0; i < lines.size (); i++)
              {
                line_info *line = &lines[i];
-               output_intermediate_json_line (lineso, line, line_num + i);
+               output_intermediate_json_line (lineso, line, line_num + i,
+                                              (*it2)->m_name);
              }
          }
 
       /* Follow with lines associated with the source file.  */
       if (line_num < src->lines.size ())
-       output_intermediate_json_line (lineso, &src->lines[line_num], line_num);
+       output_intermediate_json_line (lineso, &src->lines[line_num], line_num,
+                                      (last_non_group_fn != NULL
+                                       ? last_non_group_fn->m_name : NULL));
     }
 }