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