1*282e23f0SXin LI 2*282e23f0SXin LI#------------------------------------------------------------------------------ 3*282e23f0SXin LI# $File: coverage,v 1.1 2016/06/05 00:26:32 christos Exp $ 4*282e23f0SXin LI# xoverage: file(1) magic for test coverage data 5*282e23f0SXin LI 6*282e23f0SXin LI# File formats used to store test coverage data 7*282e23f0SXin LI# 2016-05-21, Georg Sauthoff <mail@georg.so> 8*282e23f0SXin LI 9*282e23f0SXin LI 10*282e23f0SXin LI# - GCC gcno - written by GCC at compile time when compiling with 11*282e23f0SXin LI# gcc -ftest-coverage 12*282e23f0SXin LI# - GCC gcda - written by a program that was compiled with 13*282e23f0SXin LI# gcc -fprofile-arcs 14*282e23f0SXin LI# - LLVM raw profiles - generated by a program compiled with 15*282e23f0SXin LI# clang -fprofile-instr-generate -fcoverage-mapping ... 16*282e23f0SXin LI# - LLVM indexed profiles - generated by 17*282e23f0SXin LI# llvm-profdata 18*282e23f0SXin LI# - GCOV reports, i.e. the annotated source code 19*282e23f0SXin LI# - LCOV trace files, i.e. aggregated GCC profiles 20*282e23f0SXin LI# 21*282e23f0SXin LI# GCC coverage tracefiles 22*282e23f0SXin LI# .gcno file are created during compile time, 23*282e23f0SXin LI# while data collected during runtime is stored in .gcda files 24*282e23f0SXin LI# cf. gcov-io.h 25*282e23f0SXin LI# https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Gcov-Data-Files.html 26*282e23f0SXin LI# Examples: 27*282e23f0SXin LI# Fedora 23/x86-64/gcc-5.3.1: 6f 6e 63 67 52 33 30 35 28*282e23f0SXin LI# Debian 8 PPC64/gcc-4.9.2 : 67 63 6e 6f 34 30 39 2a 29*282e23f0SXin LI0 lelong 0x67636e6f GCC gcno coverage (-ftest-coverage), 30*282e23f0SXin LI>&3 byte x version %c. 31*282e23f0SXin LI>&1 byte x \b%c 32*282e23f0SXin LI 33*282e23f0SXin LI# big endian 34*282e23f0SXin LI0 belong 0x67636e6f GCC gcno coverage (-ftest-coverage), 35*282e23f0SXin LI>&0 byte x version %c. 36*282e23f0SXin LI>&2 byte x \b%c (big-endian) 37*282e23f0SXin LI 38*282e23f0SXin LI# Examples: 39*282e23f0SXin LI# Fedora 23/x86-64/gcc-5.3.1: 61 64 63 67 52 33 30 35 40*282e23f0SXin LI# Debian 8 PPC64/gcc-4.9.2 : 67 63 64 61 34 30 39 2a 41*282e23f0SXin LI0 lelong 0x67636461 GCC gcda coverage (-fprofile-arcs), 42*282e23f0SXin LI>&3 byte x version %c. 43*282e23f0SXin LI>&1 byte x \b%c 44*282e23f0SXin LI 45*282e23f0SXin LI# big endian 46*282e23f0SXin LI0 belong 0x67636461 GCC gcda coverage (-fprofile-arcs), 47*282e23f0SXin LI>&0 byte x version %c. 48*282e23f0SXin LI>&2 byte x \b%c (big-endian) 49*282e23f0SXin LI 50*282e23f0SXin LI 51*282e23f0SXin LI# LCOV tracefiles 52*282e23f0SXin LI# cf. http://ltp.sourceforge.net/coverage/lcov/geninfo.1.php 53*282e23f0SXin LI0 string TN: 54*282e23f0SXin LI>&0 search/64 \nSF:/ LCOV coverage tracefile 55*282e23f0SXin LI 56*282e23f0SXin LI 57*282e23f0SXin LI# Coverage reports generated by gcov 58*282e23f0SXin LI# i.e. source code annoted with coverage information 59*282e23f0SXin LI0 string \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Source: 60*282e23f0SXin LI>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Graph: 61*282e23f0SXin LI>>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Data: GCOV coverage report 62*282e23f0SXin LI 63*282e23f0SXin LI 64*282e23f0SXin LI# LLVM coverage files 65*282e23f0SXin LI 66*282e23f0SXin LI# raw data after running a program compiled with: 67*282e23f0SXin LI# `clang -fprofile-instr-generate -fcoverage-mapping ...` 68*282e23f0SXin LI# default name: default.profraw 69*282e23f0SXin LI# magic is: \xFF lprofr \x81 70*282e23f0SXin LI# cf. http://llvm.org/docs/doxygen/html/InstrProfData_8inc_source.html 71*282e23f0SXin LI0 lequad 0xff6c70726f667281 LLVM raw profile data, 72*282e23f0SXin LI>&0 byte x version %d 73*282e23f0SXin LI 74*282e23f0SXin LI# big endian 75*282e23f0SXin LI0 bequad 0xff6c70726f667281 LLVM raw profile data, 76*282e23f0SXin LI>&7 byte x version %d (big-endian) 77*282e23f0SXin LI 78*282e23f0SXin LI 79*282e23f0SXin LI# LLVM indexed instruction profile (as generated by llvm-profdata) 80*282e23f0SXin LI# magic is: reverse(\xFF lprofi \x81) 81*282e23f0SXin LI# cf. http://llvm.org/docs/CoverageMappingFormat.html 82*282e23f0SXin LI# http://llvm.org/docs/doxygen/html/namespacellvm_1_1IndexedInstrProf.html 83*282e23f0SXin LI# http://llvm.org/docs/CommandGuide/llvm-cov.html 84*282e23f0SXin LI# http://llvm.org/docs/CommandGuide/llvm-profdata.html 85*282e23f0SXin LI0 lequad 0x8169666f72706cff LLVM indexed profile data, 86*282e23f0SXin LI>&0 byte x version %d 87*282e23f0SXin LI 88*282e23f0SXin LI# big endian 89*282e23f0SXin LI0 bequad 0x8169666f72706cff LLVM indexed profile data, 90*282e23f0SXin LI>&7 byte x version %d (big-endian) 91*282e23f0SXin LI 92