xref: /freebsd/contrib/file/magic/Magdir/coverage (revision 282e23f07bf49b4e37aabdcc1c513a788db36d10)
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