All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Load object files lazily to minimise memory usage
- Parsing of hash tables with the bitmap data field
- Fix expression evaluation for split regions.
- Basic MC/DC parsing in object files
- llvm 21 into tests
- Removed build script so there's no longer cfgs for the LLVM version compiled against
- Non-version number flags in version field weren't masked out when using version for indexed profile parsing of causing parse errors.
- Saturating operations on expression adding/subtracting to avoid panics
- More performance improvements this time changing search order to prefer deeper expression nodes first
- Read object file sections without loading whole file into memory.
- Increased usage of memoization of hashes -> profiles to speedup report generation more
- LLVM 20 into the test matrix
- Big performance improvements! Removed some dumb code, made some normal code a bit better
InstrumentationProfile::is_emptynow takes into account the symbol table- Bump MSRV to 1.80.0
- Remove invalid assertion from
HashTable
- LLVM 19 support (ignores function entry coverage and some failing proftext files)
- Added the ability to filter out certain sections from the generated coverage reports
- Now use some hashmap based caching to speedup record lookup during profile merge.
- Now allow binaries to fail parsing for the mapping information (depdendent on function argument)
- LLVM 17 and 18 support (test fails still:
check_mapping_consistencybut tarpaulin tests all pass so nearly all working)
- Removed another two redundant hash computations
- Cache name hash calculation to avoid recomputing (perf)
- llvm-16 test files to ensure support doesn't break
- Fixed parsing of branch region counters
- Debug logging via tracing
- Build on 32 bit architectures
InstrumenationProfile::is_emptyto detect when there are no records- Fuzzing module for profile files
- Added anyhow and use in place of
Result<T, Box<dyn Error>> - Make error type for profiles
VerboseError
- Handle merging of completely disjoint records - now profiles generated from multiple applications are accurately merged
- Handle invalid Hash enum variant in
IndexedProfile
- Made instrumentation profile parsing failure message more serious
- Made hit adding in report use
saturating_addto prevent overflow
- Make counter value signed when tracking expressions to prevent underflow
- Multiply max counters by counter size when comparing to counter delta
- Fixed handling of profile instrumentation not tied to a counter with source location
- Incorrect matching on hashes for instrumentation profile merging
- Detection of memory profiling
- Counter offsetting in raw profiles now implemented
- Counter size for byte coverage now correct
- Text profile now handles carriage returns
- Parsing of indexed, text and raw profiles (llvm version 11, 12, 13, 14)
- Parsing of instrumented binary and generating line coverage reports