aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcov.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-03-11 12:48:49 +0100
committerMartin Liska <marxin@gcc.gnu.org>2019-03-11 11:48:49 +0000
commit52eba77915ed77da53928905a731840249cf45d5 (patch)
tree6e8653e59a9f286bdbd1b37d03682be267c93864 /gcc/gcov.c
parentcb90c0014070f4ace5bb88258b31c1d654162306 (diff)
downloadgcc-52eba77915ed77da53928905a731840249cf45d5.zip
gcc-52eba77915ed77da53928905a731840249cf45d5.tar.gz
gcc-52eba77915ed77da53928905a731840249cf45d5.tar.bz2
Improve JSON format: add function names for lines.
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
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r--gcc/gcov.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/gcov.c b/gcc/gcov.c
index 9e27a82..37e787a 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -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));
}
}