diff options
author | Justin Bogner <mail@justinbogner.com> | 2016-02-08 22:49:40 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2016-02-08 22:49:40 +0000 |
commit | 34a34aa89ea19bcdb193cc0ab4a859c878ebb57b (patch) | |
tree | 058e2f9291c47cdbb9847e4d2409ec3bb8cd601a /llvm/test | |
parent | 55adc9ddcc5be3c009b8a9167bbf13109e2a9674 (diff) | |
download | bcm5719-llvm-34a34aa89ea19bcdb193cc0ab4a859c878ebb57b.tar.gz bcm5719-llvm-34a34aa89ea19bcdb193cc0ab4a859c878ebb57b.zip |
llvm-cov: Fix reading gcov data that does not have function names
In order for recent gcov versions to read the coverage data, you have
to use UseCfgChecksum=true and FunctionNamesInData=false options for
coverage profiling pass. This is because gcov is expecting the
function section in .gcda to be exactly 3 words in size, containing
ident and two checksums.
While llvm-cov is compatible with UseCfgChecksum=true, it always
expects a function name in .gcda function sections (it's not
compatible with FunctionNamesInData=false). Thus it's currently
impossible to generate one set of coverage files that works with both
gcov and llvm-cov.
This change fixes the reading of coverage information to only read the
function name if it's present.
Patch by Arseny Kapoulkine. Thanks!
llvm-svn: 260162
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcda | bin | 0 -> 116 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcno | bin | 0 -> 228 bytes | |||
-rw-r--r-- | llvm/test/tools/llvm-cov/gcov47_compatibility.cpp | 30 |
3 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcda b/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcda Binary files differnew file mode 100644 index 00000000000..825156ba63a --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcda diff --git a/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcno b/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcno Binary files differnew file mode 100644 index 00000000000..90e3bd277a9 --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/gcov47_compatibility.gcno diff --git a/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp b/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp new file mode 100644 index 00000000000..02f8d787fc3 --- /dev/null +++ b/llvm/test/tools/llvm-cov/gcov47_compatibility.cpp @@ -0,0 +1,30 @@ +// Make sure that llvm-cov can read coverage data written in gcov47+ compatible +// format. + +// Compile with these arguments and run the result to generate .gc* files: +// -coverage -Xclang -coverage-no-function-names-in-data +// -Xclang -coverage-cfg-checksum -Xclang -coverage-version='407*' + +// We need shell for cd +// REQUIRES: shell + +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: cd %t +// RUN: cp %s %p/Inputs/gcov47_compatibility.gc* . + +// RUN: llvm-cov gcov gcov47_compatibility.cpp | FileCheck %s --check-prefix=STDOUT +// STDOUT: File 'gcov47_compatibility.cpp' +// STDOUT: Lines executed:100.00% of 1 +// STDOUT: gcov47_compatibility.cpp:creating 'gcov47_compatibility.cpp.gcov' + +// RUN: FileCheck %s --check-prefix=GCOV < %t/gcov47_compatibility.cpp.gcov +// GCOV: -: 0:Runs:1 +// GCOV: -: 0:Programs:1 + +int main(int argc, const char *argv[]) { // GCOV: -: [[@LINE]]:int main( + return 0; // GCOV: 1: [[@LINE]]: return +} // GCOV: -: [[@LINE]]:} + +// llvm-cov doesn't work on big endian yet +// XFAIL: powerpc64-, s390x, mips-, mips64-, sparc |