From ec3703b8737b7867db9e1c87d314eb6a28cf1da1 Mon Sep 17 00:00:00 2001
From: Dan Goodliffe <dan@randomdan.homeip.net>
Date: Thu, 30 Aug 2018 09:35:12 +0100
Subject: lcov gcc 8.2 patch

---
 .../a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch | 91 ++++++++++++++++++++++
 1 file changed, 91 insertions(+)
 create mode 100644 dev-util/lcov/a5dd9529f9232b8d901a4d6eb9ae54cae179e5b3.patch

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;
-- 
cgit v1.2.3