summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-util/lcov/a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/dev-util/lcov/a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch b/dev-util/lcov/a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch
new file mode 100644
index 0000000..b410c15
--- /dev/null
+++ b/dev-util/lcov/a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch
@@ -0,0 +1,91 @@
+From a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3 Mon Sep 17 00:00:00 2001
+From: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
+Date: Wed, 7 Mar 2018 14:18:55 +0100
+Subject: [PATCH] geninfo: Add gcc 8 support
+
+Fix errors and incorrect data when trying to collect coverage data
+for programs compiled with gcc 8.
+
+Covers the following gcov-related changes in gcc:
+
+.gcov-file format:
+ - Line coverage data can appear multiple times for the same line
+ - Line coverage count can be suffixed by '*' to indicated unexecuted
+ basic blocks in that line
+
+.gcno-file format:
+ - new header field 'support unexecuted blocks flag'
+ - new function record fields 'column number', 'ending line number',
+ and 'compiler-generated entity flag'
+
+Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
+---
+ bin/geninfo | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/bin/geninfo b/bin/geninfo
+index 8562560..ef6a818 100755
+--- a/bin/geninfo
++++ b/bin/geninfo
+@@ -68,6 +68,7 @@ our $lcov_url = "http://ltp.sourceforge.net/coverage/lcov.php";
+ our $gcov_tool = "gcov";
+ our $tool_name = basename($0);
+
++our $GCOV_VERSION_8_0_0 = 0x80000;
+ our $GCOV_VERSION_4_7_0 = 0x40700;
+ our $GCOV_VERSION_3_4_0 = 0x30400;
+ our $GCOV_VERSION_3_3_0 = 0x30300;
+@@ -1934,6 +1935,9 @@ sub read_gcov_file($)
+ {
+ my ($count, $line, $code) = ($1, $2, $3);
+
++ # Skip instance-specific counts
++ next if ($line == $last_line);
++
+ $last_line = $line;
+ $last_block = $UNNAMED_BLOCK;
+ # Check for exclusion markers
+@@ -1963,6 +1967,9 @@ sub read_gcov_file($)
+ }
+ }
+
++ # Strip unexecuted basic block marker
++ $count =~ s/\*$//;
++
+ # <exec count>:<line number>:<source code>
+ if ($line eq "0")
+ {
+@@ -3537,6 +3544,10 @@ sub read_gcno_function_record(*$$$$$)
+ graph_expect("function name");
+ $function = read_gcno_string($handle, $big_endian);
+ return undef if (!defined($function));
++ if ($version >= $GCOV_VERSION_8_0_0) {
++ graph_skip($handle, 4, "compiler-generated entity flag")
++ or return undef;
++ }
+ # Read filename
+ graph_expect("filename");
+ $filename = read_gcno_string($handle, $big_endian);
+@@ -3544,6 +3555,11 @@ sub read_gcno_function_record(*$$$$$)
+ # Read first line number
+ $lineno = read_gcno_value($handle, $big_endian, "initial line number");
+ return undef if (!defined($lineno));
++ # Skip column and ending line number
++ if ($version >= $GCOV_VERSION_8_0_0) {
++ graph_skip($handle, 4, "column number") or return undef;
++ graph_skip($handle, 4, "ending line number") or return undef;
++ }
+ # Add to list
+ push(@{$bb->{$function}->{$filename}}, $lineno);
+ graph_add_order($fileorder, $function, $filename);
+@@ -3631,6 +3647,10 @@ sub read_gcno($)
+ debug(sprintf("found version 0x%08x\n", $version));
+ # Skip stamp
+ graph_skip(*HANDLE, 4, "file timestamp") or goto incomplete;
++ if ($version >= $GCOV_VERSION_8_0_0) {
++ graph_skip(*HANDLE, 4, "support unexecuted blocks flag")
++ or goto incomplete;
++ }
+ while (!eof(HANDLE)) {
+ my $next_pos;
+ my $curr_pos;