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