Skip to content

Commit 392caa5

Browse files
committedSep 28, 2016
[sancov] introducing symbolized coverage files (.symcov)
Summary: Answering any meaningful questions about .sancov files requires accessing symbol information from the corresponding binary. This change introduces a separate intermediate data structure and format: symbolized coverage. It contains all symbol information that is required to answer common queries: - merging - coverd/uncovered files and functions - line status. Also removing the html report functionality from sancov: generated HTML files are too huge, and a different approach is required. Maintaining this half-working approach in the C++ is painful. Differential Revision: https://reviews.llvm.org/D24947 llvm-svn: 282639
1 parent f8d10ce commit 392caa5

File tree

7 files changed

+773
-746
lines changed

7 files changed

+773
-746
lines changed
 

‎llvm/include/llvm/DebugInfo/DIContext.h

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ struct DILineInfo {
4242
bool operator!=(const DILineInfo &RHS) const {
4343
return !(*this == RHS);
4444
}
45+
bool operator<(const DILineInfo &RHS) const {
46+
return std::tie(FileName, FunctionName, Line, Column) <
47+
std::tie(RHS.FileName, RHS.FunctionName, RHS.Line, RHS.Column);
48+
}
4549
};
4650

4751
typedef SmallVector<std::pair<uint64_t, DILineInfo>, 16> DILineInfoTable;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"covered-points" : ["4e132b", "4e1472", "4e1520", "4e1553", "4e1586"],
3+
"binary-hash" : "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5",
4+
"point-symbol-info" : {
5+
"test/tools/sancov/Inputs/foo.cpp" : {
6+
"foo()" : {
7+
"4e178c" : "5:0"
8+
}
9+
},
10+
"test/tools/sancov/Inputs/test.cpp" : {
11+
"bar(std::string)" : {
12+
"4e132b" : "12:0"
13+
},
14+
"main" : {
15+
"4e1472" : "14:0",
16+
"4e14c2" : "16:9",
17+
"4e1520" : "17:5",
18+
"4e1553" : "17:5",
19+
"4e1586" : "17:5",
20+
"4e1635" : "19:1",
21+
"4e1690" : "17:5"
22+
}
23+
}
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"covered-points" : ["4e132b", "4e1472", "4e14c2", "4e1520", "4e1553", "4e1586", "4e178c"],
3+
"binary-hash" : "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5",
4+
"point-symbol-info" : {
5+
"test/tools/sancov/Inputs/foo.cpp" : {
6+
"foo()" : {
7+
"4e178c" : "5:0"
8+
}
9+
},
10+
"test/tools/sancov/Inputs/test.cpp" : {
11+
"bar(std::string)" : {
12+
"4e132b" : "12:0"
13+
},
14+
"main" : {
15+
"4e1472" : "14:0",
16+
"4e14c2" : "16:9",
17+
"4e1520" : "17:5",
18+
"4e1553" : "17:5",
19+
"4e1586" : "17:5",
20+
"4e1635" : "19:1",
21+
"4e1690" : "17:5"
22+
}
23+
}
24+
}
25+
}

‎llvm/test/tools/sancov/html-report.test

-6
This file was deleted.

‎llvm/test/tools/sancov/merge.test

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
REQUIRES: x86_64-linux
2+
RUN: sancov -merge %p/Inputs/test-linux_x86_64.0.symcov| FileCheck --check-prefix=MERGE1 %s
3+
RUN: sancov -merge %p/Inputs/test-linux_x86_64.0.symcov %p/Inputs/test-linux_x86_64.1.symcov| FileCheck --check-prefix=MERGE2 %s
4+
5+
MERGE1: {
6+
MERGE1-NEXT: "covered-points" : ["4e132b", "4e1472", "4e1520", "4e1553", "4e1586"],
7+
MERGE1-NEXT: "binary-hash" : "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5",
8+
MERGE1-NEXT: "point-symbol-info" : {
9+
MERGE1-NEXT: "test/tools/sancov/Inputs/foo.cpp" : {
10+
MERGE1-NEXT: "foo()" : {
11+
MERGE1-NEXT: "4e178c" : "5:0"
12+
MERGE1-NEXT: }
13+
MERGE1-NEXT: },
14+
MERGE1-NEXT: "test/tools/sancov/Inputs/test.cpp" : {
15+
MERGE1-NEXT: "bar(std::string)" : {
16+
MERGE1-NEXT: "4e132b" : "12:0"
17+
MERGE1-NEXT: },
18+
MERGE1-NEXT: "main" : {
19+
MERGE1-NEXT: "4e1472" : "14:0",
20+
MERGE1-NEXT: "4e14c2" : "16:9",
21+
MERGE1-NEXT: "4e1520" : "17:5",
22+
MERGE1-NEXT: "4e1553" : "17:5",
23+
MERGE1-NEXT: "4e1586" : "17:5",
24+
MERGE1-NEXT: "4e1635" : "19:1",
25+
MERGE1-NEXT: "4e1690" : "17:5"
26+
MERGE1-NEXT: }
27+
MERGE1-NEXT: }
28+
MERGE1-NEXT: }
29+
MERGE1-NEXT: }
30+
31+
MERGE2: {
32+
MERGE2-NEXT: "covered-points" : ["BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e132b", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1472", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e14c2", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1520", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1553", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1586", "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e178c"],
33+
MERGE2-NEXT: "point-symbol-info" : {
34+
MERGE2-NEXT: "test/tools/sancov/Inputs/foo.cpp" : {
35+
MERGE2-NEXT: "foo()" : {
36+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e178c" : "5:0",
37+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e178c" : "5:0"
38+
MERGE2-NEXT: }
39+
MERGE2-NEXT: },
40+
MERGE2-NEXT: "test/tools/sancov/Inputs/test.cpp" : {
41+
MERGE2-NEXT: "bar(std::string)" : {
42+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e132b" : "12:0",
43+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e132b" : "12:0"
44+
MERGE2-NEXT: },
45+
MERGE2-NEXT: "main" : {
46+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1472" : "14:0",
47+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e14c2" : "16:9",
48+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1520" : "17:5",
49+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1553" : "17:5",
50+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1586" : "17:5",
51+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1635" : "19:1",
52+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1690" : "17:5",
53+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1472" : "14:0",
54+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e14c2" : "16:9",
55+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1520" : "17:5",
56+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1553" : "17:5",
57+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1586" : "17:5",
58+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1635" : "19:1",
59+
MERGE2-NEXT: "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5:4e1690" : "17:5"
60+
MERGE2-NEXT: }
61+
MERGE2-NEXT: }
62+
MERGE2-NEXT: }
63+
MERGE2-NEXT: }
64+

‎llvm/test/tools/sancov/symbolize.test

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
REQUIRES: x86_64-linux
2+
RUN: sancov -symbolize -strip_path_prefix="llvm/" %p/Inputs/test-linux_x86_64 %p/Inputs/test-linux_x86_64.0.sancov | FileCheck %s
3+
4+
CHECK: {
5+
CHECK-NEXT: "covered-points" : ["4e132b", "4e1472", "4e1520", "4e1553", "4e1586"],
6+
CHECK-NEXT: "binary-hash" : "BB3CDD5045AED83906F6ADCC1C4DAF7E2596A6B5",
7+
CHECK-NEXT: "point-symbol-info" : {
8+
CHECK-NEXT: "test/tools/sancov/Inputs/foo.cpp" : {
9+
CHECK-NEXT: "foo()" : {
10+
CHECK-NEXT: "4e178c" : "5:0"
11+
CHECK-NEXT: }
12+
CHECK-NEXT: },
13+
CHECK-NEXT: "test/tools/sancov/Inputs/test.cpp" : {
14+
CHECK-NEXT: "bar(std::string)" : {
15+
CHECK-NEXT: "4e132b" : "12:0"
16+
CHECK-NEXT: },
17+
CHECK-NEXT: "main" : {
18+
CHECK-NEXT: "4e1472" : "14:0",
19+
CHECK-NEXT: "4e14c2" : "16:9",
20+
CHECK-NEXT: "4e1520" : "17:5",
21+
CHECK-NEXT: "4e1553" : "17:5",
22+
CHECK-NEXT: "4e1586" : "17:5",
23+
CHECK-NEXT: "4e1635" : "19:1",
24+
CHECK-NEXT: "4e1690" : "17:5"
25+
CHECK-NEXT: }
26+
CHECK-NEXT: }
27+
CHECK-NEXT: }
28+
CHECK-NEXT:}
29+

0 commit comments

Comments
 (0)