1 # needs-profiler-support
3 # Rust coverage maps support LLVM Coverage Mapping Format versions 5 and 6,
4 # corresponding with LLVM versions 12 and 13, respectively.
5 # When upgrading LLVM versions, consider whether to enforce a minimum LLVM
6 # version during testing, with an additional directive at the top of this file
7 # that sets, for example: `min-llvm-version: 12.0`
9 include ../coverage/coverage_tools.mk
11 BASEDIR=../coverage-llvmir
13 ifeq ($(UNAME),Darwin)
14 INSTR_PROF_DATA_SUFFIX=,regular,live_support
15 DATA_SECTION_PREFIX=__DATA,
16 LLVM_COV_SECTION_PREFIX=__LLVM_COV,
19 INSTR_PROF_DATA_SUFFIX=
21 LLVM_COV_SECTION_PREFIX=
22 COMDAT_IF_SUPPORTED=, comdat
25 DEFINE_INTERNAL=define internal
28 LLVM_FILECHECK_OPTIONS=\
29 -check-prefixes=CHECK,WINDOWS \
30 -DDEFINE_INTERNAL='$(DEFINE_INTERNAL)' \
31 -DCOMDAT_IF_SUPPORTED='$(COMDAT_IF_SUPPORTED)' \
32 -DINSTR_PROF_DATA='.lprfd$$M' \
33 -DINSTR_PROF_NAME='.lprfn$$M' \
34 -DINSTR_PROF_CNTS='.lprfc$$M' \
35 -DINSTR_PROF_VALS='.lprfv$$M' \
36 -DINSTR_PROF_VNODES='.lprfnd$$M' \
37 -DINSTR_PROF_COVMAP='.lcovmap$$M' \
38 -DINSTR_PROF_COVFUN='.lcovfun$$M' \
39 -DINSTR_PROF_ORDERFILE='.lorderfile$$M'
41 LLVM_FILECHECK_OPTIONS=\
42 -check-prefixes=CHECK \
43 -DDEFINE_INTERNAL='$(DEFINE_INTERNAL)' \
44 -DCOMDAT_IF_SUPPORTED='$(COMDAT_IF_SUPPORTED)' \
45 -DINSTR_PROF_DATA='$(DATA_SECTION_PREFIX)__llvm_prf_data$(INSTR_PROF_DATA_SUFFIX)' \
46 -DINSTR_PROF_NAME='$(DATA_SECTION_PREFIX)__llvm_prf_names' \
47 -DINSTR_PROF_CNTS='$(DATA_SECTION_PREFIX)__llvm_prf_cnts' \
48 -DINSTR_PROF_VALS='$(DATA_SECTION_PREFIX)__llvm_prf_vals' \
49 -DINSTR_PROF_VNODES='$(DATA_SECTION_PREFIX)__llvm_prf_vnds' \
50 -DINSTR_PROF_COVMAP='$(LLVM_COV_SECTION_PREFIX)__llvm_covmap' \
51 -DINSTR_PROF_COVFUN='$(LLVM_COV_SECTION_PREFIX)__llvm_covfun' \
52 -DINSTR_PROF_ORDERFILE='$(DATA_SECTION_PREFIX)__llvm_orderfile'
58 # Compile the test program with non-experimental coverage instrumentation, and generate LLVM IR
59 $(RUSTC) $(BASEDIR)/testprog.rs \
60 -Cinstrument-coverage \
63 cat "$(TMPDIR)"/testprog.ll | \
64 "$(LLVM_FILECHECK)" $(BASEDIR)/filecheck.testprog.txt $(LLVM_FILECHECK_OPTIONS)