SANCOV(1)

๐Ÿ“ฆ
version 14.0.6 ยท 5 versions
, in ubuntu questing

๐Ÿ’… 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 .sancov files
  • and their symbolized .symcov version โœจ

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 .sancov files
  • <other actions> โ€” wants .sancov files & the corresponding binary files, or .symcov files

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 โ€” Allow G_INSERT to 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 โ€” Disables inttoptr/ptrtoint roundtrip 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 emscripten EMSCRIPTEN_CATCHING_ALLOWED options)
  • --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-style setjmp/longjmp handling
  • --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 with filetype=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 in intptr/ptrint folding
  • --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 with filetype=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 โ€” should mir-strip-debug only 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 -passes compatible 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 contain ret ๐Ÿ›‘
  • --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 โ€” WebAssembly setjmp/longjmp handling ๐Ÿฆ‹
  • --x86-align-branch=<string> โ€” specify types of branches to align (a plus separated list of types):
    • jcc โ€” indicates conditional jumps
    • fused โ€” indicates fused conditional jumps
    • jmp โ€” indicates direct unconditional jumps
    • call โ€” indicates direct and indirect calls
    • ret โ€” indicates rets
    • indirect โ€” 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 value 0 does 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-hidden for more ๐Ÿ‘€)
  • --help-list โ€” display a list of available options (use --help-list-hidden for more ๐Ÿ‘€)
  • --version โ€” display the version of this program ๐Ÿท๏ธ

๐Ÿฆ‹ Polly Options ๐Ÿฆ‹

configure the polly loop optimizer ๐Ÿ’œ

  • --polly โ€” enable the polly optimizer (works with -O1, -O2 or -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 -1 schedules 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 statements
    • bb โ€” one statement per basic block
    • scalar-indep โ€” scalar independence heuristic
    • store โ€” store-level granularity
  • --polly-target=<value> โ€” the hardware to target
    • cpu โ€” generate CPU code
  • --polly-tiling โ€” enable loop tiling ๐ŸŽ€
  • --polly-vectorizer=<value> โ€” select the vectorization strategy
    • none โ€” No Vectorization
    • polly โ€” Polly internal vectorizer
    • stripmine โ€” 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