SANCOV(1)
๐ SANCOV(1) โ User Commands ๐
okay bestie, gather round, because we're reading the manual page for sancov 14, and it's a lot but I got you ๐ซถ
โจ NAME โจ
sancov โ manual page for sancov 14. That's it, that's the name, no notes. ๐
๐ธ DESCRIPTION ๐ธ
OVERVIEW: Sanitizer Coverage Processing Tool (sancov) ๐
so like, this tool is the main character of coverage info, and it can extract all kinds of coverage-related gossip from:
- coverage-instrumented binary files
- raw
.sancovfiles - and their symbolized
.symcovversion โจ
Depending on which action you pick, the tool expects different input files, so pay attention bestie:
-print-coverage-pcsโ wants coverage-instrumented binary files-print-coverageโ wants.sancovfiles<other actions>โ wants.sancovfiles & the corresponding binary files, or.symcovfiles
USAGE:
sancov [options] <action> <binary files...> <.sancov files...> <.symcov files...>
๐ OPTIONS ๐
๐ Color Options ๐
--colorโ Use colors in output (default=autodetect). yes queen, make it pretty ๐ธ
๐ General options ๐
--aarch64-neon-syntax=<value>โ Choose style of NEON code to emit from AArch64 backend:=genericโ Emit generic NEON assembly=appleโ Emit Apple-style NEON assembly
--aarch64-use-aaโ Enable the use of AA during codegen.--abort-on-max-devirt-iterations-reachedโ Abort when the max iterations for devirtualization CGSCC repeat pass is reached--allow-ginsert-as-artifactโ AllowG_INSERTto be considered an artifact. Hack around AMDGPU test infinite loops. ๐--amdgpu-bypass-slow-divโ Skip 64-bit divide for dynamic 32-bit values--amdgpu-disable-loop-alignmentโ Do not align and prefetch loops--amdgpu-disable-power-schedโ Disable scheduling to minimize mAI power bursts--amdgpu-dpp-combineโ Enable DPP combiner--amdgpu-dump-hsa-metadataโ Dump AMDGPU HSA Metadata--amdgpu-enable-flat-scratchโ Use flat scratch instructions--amdgpu-enable-merge-m0โ Merge and hoist M0 initializations--amdgpu-promote-alloca-to-vector-limit=<uint>โ Maximum byte size to consider promote alloca to vector--amdgpu-sdwa-peepholeโ Enable SDWA peepholer--amdgpu-use-aa-in-codegenโ Enable the use of AA during codegen.--amdgpu-verify-hsa-metadataโ Verify AMDGPU HSA Metadata--amdgpu-vgpr-index-modeโ Use GPR indexing mode instead of movrel for vector indexing--arm-add-build-attributesโ (no description in the original, it's giving mystery ๐ต๏ธโ๏ธ)--arm-implicit-it=<value>โ Allow conditional instructions outdside of an IT block (yes, "outdside", I said what I said, that's verbatim) ๐=alwaysโ Accept in both ISAs, emit implicit ITs in Thumb=neverโ Warn in ARM, reject in Thumb=armโ Accept in ARM, reject in Thumb=thumbโ Warn in ARM, emit implicit ITs in Thumb
--asm-show-instโ Emit internal instruction representation to assembly file--atomic-counter-update-promotedโ Do counter update using atomic fetch add for promoted counters only--atomic-first-counterโ Use atomic fetch add for first counter in a function (usually the entry counter)--blacklist=<string>โ Blacklist file (sanitizer blacklist format).--bounds-checking-single-trapโ Use one trap block per function--cfg-hide-cold-paths=<number>โ Hide blocks with relative frequency below the given value--cfg-hide-deoptimize-pathsโ (no description given, iconic silence ๐ค)--cfg-hide-unreachable-pathsโ (also no description, matching energy ๐ )--cost-kind=<value>โ Target cost kind=throughputโ Reciprocal throughput=latencyโ Instruction latency=code-sizeโ Code size=size-latencyโ Code size and latency
๐ Action (required) ๐
bestie, this one is required. not optional. not a suggestion. you need an action. periodt. ๐ฅ
--printโ Print coverage addresses--print-coverage-pcsโ Print coverage instrumentation points addresses.--covered-functionsโ Print all covered funcions. (again, verbatim spelling, don't come for me ๐ญ)--not-covered-functionsโ Print all not covered funcions.--print-coverage-statsโ Print coverage statistics.--html-reportโ REMOVED. Use-symbolize&coverage-report-server.py. ๐ชฆ rip bestie, she's gone--symbolizeโ Produces a symbolized JSON report from binary report.--mergeโ Merges reports.--debug-info-correlateโ Use debug info to correlate profiles.--debugify-level=<value>โ Kind of debug info to add=locationsโ Locations only=location+variablesโ Locations and Variables
--debugify-quietโ Suppress verbose debugify output--demangleโ Print demangled function name.--disable-i2p-p2i-optโ Disablesinttoptr/ptrtointroundtrip optimization--disable-promote-alloca-to-ldsโ Disable promote alloca to LDS--disable-promote-alloca-to-vectorโ Disable promote alloca to vector--do-counter-promotionโ Do counter register promotion--dot-cfg-mssa=<file name for generated dot file>โ file name for generated dot file--dwarf-version=<int>โ Dwarf version--dwarf64โ Generate debugging info in the 64-bit DWARF format--emscripten-cxx-exceptions-allowed=<string>โ The list of function names in which Emscripten-style exception handling is enabled (see emscriptenEMSCRIPTEN_CATCHING_ALLOWEDoptions)--enable-cse-in-irtranslatorโ Should enable CSE in irtranslator--enable-cse-in-legalizerโ Should enable CSE in Legalizer--enable-emscripten-cxx-exceptionsโ WebAssembly Emscripten-style exception handling--enable-emscripten-sjljโ WebAssembly Emscripten-stylesetjmp/longjmphandling--enable-gvn-hoistโ Enable the GVN hoisting pass (default = off)--enable-gvn-memdepโ (no description, just vibes ๐)--enable-gvn-sinkโ Enable the GVN sinking pass (default = off)--enable-load-in-loop-preโ (no description, mysterious era โจ)--enable-load-preโ (no description either)--enable-loop-simplifycfg-term-foldingโ (nope, no description here either ๐)--enable-name-compressionโ Enable name/filename string compression--enable-split-backedge-in-load-preโ (still no description, it's giving enigmatic)--experimental-debug-variable-locationsโ Use experimental new value-tracking variable locations--fatal-warningsโ Treat warnings as errors--fs-profile-debug-bw-threshold=<uint>โ Only show debug message if the source branch weight is greater than this value.--fs-profile-debug-prob-diff-threshold=<uint>โ Only show debug message if the branch probility is greater than this value (in percentage). (yes, "probility" โ original text, keeping it fr fr)--generate-merged-base-profilesโ When generating nested context-sensitive profiles, always generate extra base profile for function with all its context profiles merged into it.--gpsize=<uint>โ Global Pointer Addressing Size. The default size is 8.--hash-based-counter-splitโ Rename counter variable of a comdat function based on cfg hash--hot-cold-splitโ Enable hot-cold splitting pass--import-all-indexโ Import all external functions in index.--incremental-linker-compatibleโ When used withfiletype=obj, emit an object file which can be used with an incremental linker--instcombine-code-sinkingโ Enable code sinking--instcombine-guard-widening-window=<uint>โ How wide an instruction window to bypass looking for another guard--instcombine-max-iterations=<uint>โ Limit the maximum number of instruction combining iterations--instcombine-max-num-phis=<uint>โ Maximum number phis to handle inintptr/ptrintfolding--instcombine-maxarray-size=<uint>โ Maximum array size considered when doing a combine--instcombine-negator-enabledโ Should we attempt to sink negations?--instcombine-negator-max-depth=<uint>โ What is the maximal lookup depth when trying to check for viability of negation sinking.--instrprof-atomic-counter-update-allโ Make all profile counter updates atomic (for testing only) โ ๏ธ (testing only, bestie, don't be chaotic)--internalize-public-api-file=<filename>โ A file containing list of symbol names to preserve--internalize-public-api-list=<list>โ A list of symbol names to preserve--iterative-counter-promotionโ Allow counter promotion across the whole loop nest.--lto-embed-bitcode=<value>โ Embed LLVM bitcode in object files produced by LTO=noneโ Do not embed=optimizedโ Embed after all optimization passes=post-merge-pre-optโ Embed post merge, but before optimizations
--lto-pass-remarks-filter=<regex>โ Only record optimization remarks from passes whose names match the given regular expression--lto-pass-remarks-format=<format>โ The format used for serializing remarks (default: YAML)--lto-pass-remarks-output=<filename>โ Output filename for pass remarks--matrix-default-layout=<value>โ Sets the default matrix layout
and that's part 1, bestie โ more is coming, do NOT go anywhere ๐ฆ
=column-majorโ use column-major layout ๐=row-majorโ use row-major layout ๐--max-counter-promotions=<int>โ the max number of counter promotions we're allowed to do, no more, we're capping it ๐--max-counter-promotions-per-loop=<uint>โ max number of counter promotions per loop, so we don't crank the register pressure up way too much ๐ฎโ๐จ--mc-relax-allโ when you use it withfiletype=obj, it relaxes all the fixups in the emitted object file โจ--mcabacโ tbd ๐ (that's it. that's the description. the manpage said tbd and I respect the honesty)--merror-missing-parenthesisโ throw an error for a missing parenthesis around predicate registers ๐--merror-noncontigious-registerโ throw an error for register names that aren't contigious ๐จ--mhvxโ enable Hexagon Vector eXtensions ๐ฆ--mhvx=<value>โ enable Hexagon Vector eXtensions, but pick your vibe:=v60โ build for HVX v60=v62โ build for HVX v62=v65โ build for HVX v65=v66โ build for HVX v66=v67โ build for HVX v67=v68โ build for HVX v68=v69โ build for HVX v69
--mips-compact-branches=<value>โ MIPS specific: compact branch policy. pick your girl:=neverโ do not use compact branches if possible=optimalโ use compact branches where appropriate (default โญ)=alwaysโ always use compact branches if possible
--mips16-constant-islandsโ enable mips16 constant islands ๐๏ธ--mips16-hard-floatโ enable mips16 hard float ๐ธ--mir-strip-debugify-onlyโ shouldmir-strip-debugonly strip debug info from debugified modules by default? that's the question it's asking ๐--mno-compoundโ disable looking for compound instructions for Hexagon ๐ซ--mno-fixupโ disable fixing up resolved relocations for Hexagon ๐ซ--mno-ldc1-sdc1โ expand double precision loads and stores into their single precision counterparts ๐--mno-pairingโ disable looking for duplex instructions for Hexagon ๐ซ--mwarn-missing-parenthesisโ warn for a missing parenthesis around predicate registers โ ๏ธ--mwarn-noncontigious-registerโ warn for register names that arent contigious โ ๏ธ--mwarn-sign-mismatchโ warn when a signed and unsigned value don't match up โ ๏ธ--no-deprecated-warnโ suppress all the deprecated warnings ๐คซ--no-discriminatorsโ disable generation of discriminator information ๐ซ--no-type-checkโ suppress type errors (Wasm) ๐คซ--no-warnโ suppress all the warnings, we're in our no-warnings era ๐คซ--nvptx-sched4regโ NVPTX specific: schedule for register pressue ๐ฏ--opaque-pointersโ use opaque pointers ๐ฆ--poison-checking-function-localโ check that returns are non-poison (for testing) ๐งช--print-pipeline-passesโ print a-passescompatible string that describes the pipeline. and bestie, they said it themselves: (best-effort only) ๐ญ--r600-ir-structurizeโ use the StructurizeCFG IR pass โจ--rdf-dumpโ the manpage gives us literally nothing here ๐--rdf-limit=<uint>โ also nothing. empty. a ghost. ๐ป--runtime-counter-relocationโ enable relocating counters at runtime ๐--safepoint-ir-verifier-print-onlyโ once again, no description in the source. we move. ๐--sample-profile-check-record-coverage=<N>โ emit a warning if less than N% of the records in the input profile got matched to the IR โ ๏ธ--sample-profile-check-sample-coverage=<N>โ emit a warning if less than N% of the samples in the input profile got matched to the IR โ ๏ธ--sample-profile-max-propagate-iterations=<uint>โ maximum number of iterations to go through when propagating sample block/edge weights through the CFG ๐--skip-dead-filesโ do not list dead source files in reports ๐ชฆ--skip-ret-exit-blockโ suppress counter promotion if exit blocks containret๐--speculative-counter-promotion-max-exiting=<uint>โ the max number of exiting blocks of a loop to allow speculative counter promotion ๐--speculative-counter-promotion-to-loopโ when this option is false, if the target block is in a loop, the promotion gets disallowed unless the promoted counter update can be further/iteratively promoted into an acyclic region ๐--strip_path_prefix=<string>โ strip this prefix from file paths in reports โ๏ธ--summary-file=<string>โ the summary file to use for function importing ๐--tail-predication=<value>โ MVE tail-predication pass options, choose wisely:=disabledโ don't tail-predicate loops=enabled-no-reductionsโ enable tail-predication, but not for reduction loops=enabledโ enable tail-predication, including reduction loops=force-enabled-no-reductionsโ enable tail-predication, but not for reduction loops, and force this which might be unsafe ๐=force-enabledโ enable tail-predication, including reduction loops, and force this which might be unsafe ๐
--thinlto-assume-mergedโ assume the input has already undergone ThinLTO function importing and the other pre-optimization pipeline changes ๐ซถ--threads=<int>โ no description. just vibes. ๐คท--verify-region-infoโ verify region info. and heads up: it's time consuming โณ--vp-counters-per-site=<number>โ the average number of profile counters allocated per value profiling site ๐ข--vp-static-allocโ do static counter allocation for the value profiler ๐--wasm-enable-ehโ WebAssembly exception handling ๐ฆ--wasm-enable-sjljโ WebAssemblysetjmp/longjmphandling ๐ฆ--x86-align-branch=<string>โ specify types of branches to align (a plus separated list of types):jccโ indicates conditional jumpsfusedโ indicates fused conditional jumpsjmpโ indicates direct unconditional jumpscallโ indicates direct and indirect callsretโ indicates retsindirectโ indicates indirect unconditional jumps
--x86-align-branch-boundary=<uint>โ control how the assembler should align branches with NOP. if the boundary's size is not 0, it should be a power of 2 and no less than 32. branches will be aligned to prevent from being across or against the boundary of specified size. the default value0does not align branches ๐ฏ--x86-branches-within-32B-boundariesโ align selected instructions to mitigate the negative performance impact of Intel's micro code update for errata skx102 ๐ง
โ ๏ธ this one may break assumptions about labels corresponding to particular instructions, and should be used with caution. no cap. ๐
--x86-pad-max-prefix-size=<uint>โ maximum number of prefixes to use for padding ๐
โจ Generic Options โจ
the "just tell me stuff" options, iconic behavior ๐ซถ
--helpโ display available options (use--help-hiddenfor more ๐)--help-listโ display a list of available options (use--help-list-hiddenfor more ๐)--versionโ display the version of this program ๐ท๏ธ
๐ฆ Polly Options ๐ฆ
configure the polly loop optimizer ๐
--pollyโ enable the polly optimizer (works with-O1,-O2or-O3) โจ--polly-2nd-level-tilingโ enable a 2nd level loop of loop tiling ๐งฑ--polly-ast-print-accessesโ print memory access functions ๐จ๏ธ--polly-context=<isl parameter set>โ provide additional constraints on the context parameters ๐--polly-dce-precise-steps=<int>โ the number of precise steps between two approximating iterations. (a value of-1schedules another approximation stage before the actual dead code elimination. ๐ชฆ--polly-delicm-max-ops=<int>โ maximum number of isl operations to invest for lifetime analysis;0= no limit ๐ข--polly-detect-full-functionsโ allow the detection of full functions ๐--polly-dump-afterโ dump the module after Polly transformations into a file suffixed with"-after"๐ค--polly-dump-after-file=<string>โ dump the module after Polly transformations to the given file ๐--polly-dump-beforeโ dump the module before Polly transformations into a file suffixed with"-before"๐ฅ--polly-dump-before-file=<string>โ dump the module before Polly transformations to the given file ๐--polly-enable-simplifyโ simplify SCoP after optimizations ๐งผ--polly-ignore-func=<string>โ ignore functions that match a regex. multiple regexes can be comma separated. scop detection will ignore all functions that match ANY of the regexes provided ๐ซ--polly-isl-arg=<argument>โ option passed to ISL ๐--polly-on-isl-error-abortโ abort if an isl error is encountered ๐ฅ--polly-only-func=<string>โ only run on functions that match a regex. multiple regexes can be comma separated. scop detection will run on all functions that match ANY of the regexes provided ๐ฏ--polly-only-region=<identifier>โ only run on certain regions (the provided identifier must appear in the name of the region's entry block ๐--polly-only-scop-detectionโ only run scop detection, but no other optimizations ๐--polly-optimized-scopsโ Polly: dump out the polyhedral description of Scops that got optimized with the isl scheduling optimizer, plus the whole set of post-scheduling transformations that ends up applied on the schedule tree ๐--polly-parallelโ generate thread parallel code (isl codegen only, bestie)--polly-parallel-forceโ force that thread parallel code to be generated, ignoring any cost model like it simply doesn't exist ๐ค--polly-pattern-matching-based-optsโ perform optimizations based on pattern matching--polly-postoptsโ apply post-rescheduling optimizations such as tiling. heads up tho, this one requires-polly-reschedule๐ซถ--polly-pragma-based-optsโ apply user-directed transformation from metadata--polly-pragma-ignore-depcheckโ skip the dependency check for pragma-based transformations ๐--polly-process-unprofitableโ process scops that are unlikely to benefit from Polly optimizations.--polly-register-tilingโ enable register tiling--polly-reportโ print information about the activities of Polly--polly-rescheduleโ optimize SCoPs using ISL โจ--polly-showโ highlight the code regions that will be optimized in a (CFG BBs and LLVM-IR instructions)--polly-show-onlyโ highlight the code regions that will be optimized in a (CFG only BBs)--polly-stmt-granularity=<value>โ which algorithm to use for splitting basic blocks into multiple statementsbbโ one statement per basic blockscalar-indepโ scalar independence heuristicstoreโ store-level granularity
--polly-target=<value>โ the hardware to targetcpuโ generate CPU code
--polly-tilingโ enable loop tiling ๐--polly-vectorizer=<value>โ select the vectorization strategynoneโ No Vectorizationpollyโ Polly internal vectorizerstripmineโ Strip-mine outer loops for the loop-vectorizer to trigger
and that's the whole list bestie, we ate and left absolutely zero crumbs ๐ this page is sancov 14, dated May 2025, and it lives in the SANCOV(1) section of the manual ๐ฆ slay, go forth and read your docs ๐
๐ฆ where this page comes from
- ubuntu questing: clang-tools-14 1:14.0.6-20ubuntu3
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms