- Added support for relocatable ELF and DWARF
- Added support for kernel module symbolization with DWARF data
- Bumped minimum supported Rust version to
1.88
- Added support for
/usr/lib/debug/.build-iddebug link target directory - Added support for compressed
.gnu_debugdataELF sections (MiniDebugInfo)
- Improved data caching for debug link targets and DWP files
- Improved kernel symbolization performance when no KASLR offset is provided by the user
- Fixed backtrace reporting on contextualized errors
- Added bindings for Go language
- Adjusted
symbolize::Symbolizer::symbolizebehavior to stop being short-circuiting- Added
Reason::IgnoredErrorvariant
- Added
- Fixed reporting of code info directory for DWARF symbolization if not explicitly overwritten by source file
- Adjusted
symbolize::{Resolved,}Sym::code_infoto be heap allocated - Made
symbolize::ResolvedSymnon-exhaustive - Report special module string when symbolizing vDSO and BPF symbols
- Added support for discovering and using DWARF packages (
*.dwp) - Added
Symbolizer::register_elf_resolvermethod - Adjusted ELF logic to include
STT_NOTYPEsymbols in symbolization
- Added support for symbolizing addresses in a vDSO
- Added
vdsoattribute tosymbolize::Processtype
- Added
- Added support for normalizing addresses in a vDSO
- Added
normalize::UserMeta::Symvariant
- Added
- Adjusted debug link resolution to handle self-referential debug links more gracefully
- Report "symbolic" path in
symbolize::Sym::modulewhen using process symbolization on APKs withmap_filesset totrue - Improved handling of symbolic links to prevent duplicate work for same symbol source reached through different links
- Fixed reading of compressed ELF section data with unaligned compression headers
- Adjusted symbol names reported for BPF programs to contain
bpf_prog_prefix and program tag - Made
inspect::SymInfotype non-exhaustive - Merged
normalize::Reasonandsymbolize::Reason - Changed
CodeInfo::to_ownedtointo_owned - Bumped minimum supported Rust version to
1.75
- Added support for 32 bit ELF binaries
- Added
symbolize::Symbolizer::cachemethod for caching process VMA as well as ELF metadata - Added
normalize::NormalizeOpts::apk_to_elfattribute for normalizing addresses mapping to APKs to the contained ELF file - Added
symbolize::Sym::moduleattribute - Renamed
symbolize::Source::kernel_imagetovmlinux - Renamed
inspect::SymInfo::obj_file_nametomodule - Adjusted kernel symbolization logic to give preference to
vmlinuxfile, if present - Changed
symbolize::Kernel::{kallsyms,kernel_image}to support disabling of the source - Adjusted
vmlinuxbased kernel address symbolization logic to take into account system KASLR state- Added
kaslr_offsetmember tosymbolize::Kernel
- Added
- Moved symbolization and inspection sources into
sourcesub-module - Moved
normalize::Apkbehind existingapkfeature - Changed
inspect::SymInfo::sizeto be anOption - Fixed unsoundness in internally used
InsertMaptype - Bumped minimum supported Rust version to
1.70
- Added support for symbolizing BPF kernel program addresses including
source code information
- Added
bpf(default disabled) feature
- Added
- Added Mac OS to list of supported operating systems for file based symbolization
- Added support for iteration over DWARF symbols to
inspect::Inspector - Adjusted normalization logic to use "symbolic path" for reading build
IDs when normalizing with
NormalizeOpts::map_filesequal tofalse - Adjusted
inspect::Inspector::for_eachto accept callback returningstd::ops::ControlFlowto facilitate early termination - Improved
kallsymsparsing performance to speed up overall kernel address symbolization - Fixed incorrect file offset to virtual offset translation, resulting in wrong symbolization in certain binaries
- Bumped minimum supported Rust version to
1.69
- Added support for using
PROCMAP_QUERYioctl during address normalization- Added
enable_procmap_querytonormalize::Normalizer - Added
is_procmap_query_supportedfunction tohelpermodule
- Added
- Adjusted normalization logic to not fail overall operation on build ID read failure
- Added support for file based symbolization on the Windows operating system
- Improved performance for parsing Breakpad files
- Made sure to not emit "self" component in normalized paths when
map_filesis in use - Fixed potentially invalid reading of debug link checksum when
.gnu_debuglinksection is unaligned - Renamed
enable_maps_cachingmethod ofnormalize::Normalizertoenable_vma_caching - Renamed
UserMeta::{apk,elf,unknown}methods by prefixing them withas_
- Added support for transparently following debug links in ELF binaries
- Added
symbolize::Builder::set_debug_dirsfor configuring directories searched for targets
- Added
- Introduced
normalize::NormalizeOptstype for configurable address normalization- Removed
normalize::Normalizer::normalize_user_addrs_sortedin favor ofnormalize::Normalizer::normalize_user_addrs_opts
- Removed
- Fixed handling of zero sized symbols in Gsym symbolization logic
- Fixed reading of ELF section contents of sections without actual data
- Added support for advanced symbolization workflows involving containers (process or APKs) via configurable dispatch functions
- Added
cache_mapsandcache_build_idsproperties tonormalize::Normalizertype- Adjusted normalization logic to return references to cached build
IDs if
cache_build_idsistrue
- Adjusted normalization logic to return references to cached build
IDs if
- Added support for compressed debug information
- Added
zlib(default enabled) andzstd(default disabled) features
- Added
- Adjusted
Inspector::for_eachsignature to no longer carry explicit state around - Introduced
normalize::Reasonenum to provide best guess at why normalization was not successful as part of thenormalize::UserMeta::Unknownvariant - Added
From<Box<dyn std::error::Error>>conversion toError - Added
Displayimpl toErrorKind - Added
read_elf_build_id_from_mmapfunction tohelpermodule - Reduced number of allocations performed on address normalization and process symbolization paths
- Improved symbolization performance on certain unoptimized DWARF data
- Fixed potential numeric overflow when parsing non-UTF-8 (invalid) Breakpad files
- Removed
Cloneimpl ofsymbolize::Buildertype
- Added support for Breakpad format behind
breakpadfeature (disabled by default) - Added support for usage of perf map files as part of process symbolization
- Added
perf_mapattribute tosymbolize::Processtype
- Added
- Added
map_filesattribute tosymbolize::Processtype - Added support for symbolizing addresses mapping to ELF variables and
for looking them up using
inspectAPIs - Added support for GNU indirect functions to ELF logic
- Overhauled
SymTypeenum- Made it non-exhaustive
- Moved it out of
inspectmodule - Renamed
Unknownvariant toUndefined
- Made auto reloading of symbolization sources on change configurable
- Fixed DWARF symbolization in the presence of cross compilation unit references
- Introduced
symbolize::Reasonenum to provide best guess at why symbolization was not successful as part of thesymbolize::Symbolized::Unknownvariant - Introduced
apkandgsymcompile-time features (disabled by default) - Improved handling of dynamic ELF symbols for symbolization and inspection
- Fixed Gsym symbolization issue for "large" addresses
- Reordered
pidargument to normalization functions before addresses - Reordered
srcargument to inspection functions before names
- Added caching logic for Gsym resolvers to
symbolize::Symbolizer - Adjusted various symbolization related types to contain
Cowobjects to facilitate hand out of memory mapped data without unnecessary allocations- Adjusted various symbolization code paths to stop heap-allocating
- Adjusted normalization logic to honor executable and readable proc maps entries
- Changed
debug_symsto be a symbolization source property instead of asymbolize::Symbolizerattribute - Renamed
inspect::Elf::debug_infotodebug_syms - Handled potential numeric overflow in Gsym inlined function parser more gracefully
- Moved C API definitions into
blazesym-ccrate - Fixed build for some Android flavors
- Fixed build failure when
dwarffeature is not enabled - Changed
Addrto map to 64 bit integer - Reworked normalization APIs to produce file offsets instead of virtual offsets
- Introduced
symbolize::Inputenum and made it part of symbolization APIs to distinguish between and support different input types- Added support for ELF symbolization using file offsets instead of addresses
- Added
symbolize::Source::Apkvariant - Made symbolization source caching unconditional and removed least-recently-used semantics in favor of full user control
- Added caching for APK related symbolization data structures
- Added caching logic to
inspect::Inspector - Adjusted
inspect::SymInfotype to optionally just reference cached data as opposed to having to heap-allocate copies of it - Added support for iterating over all symbols in a source to
inspect::Inspector - Made
inspect::SymInfo::file_offsetmember optional - Added ability to contain backtraces in
Errorobjects - Added support for symbolizing Gsym addresses to
blazecli - Fixed bogus inlined function reporting for Gsym
- Bumped minimum supported Rust version to
1.65
- "Flattened" return type of
symbolize::Symbolizer::symbolizemethod from nestedVecto a single levelVecof newly introducedsymbolize::Symbolizedenum - Further changes to
symbolize::Sym:- Added
sizemember andto_pathhelper method - Factored out
CodeInfotype capturing all source code location information - Included optional inlined function information via
inlinedattribute
- Added
- Added support for reporting inlined functions for DWARF and Gsym formats
- Introduced
symbolize::Symbolizer::symbolize_singlefor more convenient symbolization of a single address - Introduced
normalize::Buildertype for customization of anormalize::Normalizerinstance and made reading of build IDs configurable - Adjusted ELF symbolization code to honor symbol sizes
- Renamed
symbolize::Builder::enable_src_locationtoenable_code_info - Bumped minimum supported Rust version to
1.64
- Fixed potential panic when normalizing an APK ELF file using the C APIs
- Fixed potentially incorrect reporting of symbols from ELF source
- Added support for automatic demangling of symbols, controlled by
demanglefeature (at compile time) and corresponding flag insymbolize::Builder(at runtime) - Renamed
symbolize::SymbolizedResulttoSymand reworked it- Made it non-exhaustive
- Renamed
symbolmember toname - Added
offsetmember - Changed
linemember to be of typeu32andcolumntou16 - Made all source code location information optional
- Split
pathmember intodirandfile
- Added additional end-to-end benchmarks
- Added benchmark result summary to CI runs
- Fixed spurious maps file path creation for low addresses as part of normalization/symbolization
- Improved symbolization of addresses in ELF files with potentially bogus symbol sizes
- Introduced
blazeclicommand line interface for the library - Introduced
helpermodule exposingread_elf_build_idfunction
- Introduced custom
Errortype instead of relying solely onstd::io::Error - Switched to using
gimlifor DWARF support- Added support for DWARF versions v2, v3, and v5 for symbol lookup and source code information retrieval
- Introduced
dwarffeature to make dependency optional
- Switched from
logto usingtracingas the logging backend- Added spans to a couple of relevant call sites
- Added support for using DWARF information for symbol lookup (instead of just ELF symbols; so far DWARF was only used for mapping names to symbol information)
- Added support for normalizing and symbolizing addresses in an ELF file contained in an APK
- Adjusted
symbolize::Source::Gsymvariant to support symbolizing Gsym from user provided "raw" data - Renamed
normalize::UserAddrMeta::Binaryvariant toElf - Renamed
blaze_user_addr_meta_unknown::__unusedmember to_unused
- Added
extern "C"guards inblazesym.hheader for easy of use from C++ code - Added unused member variable to
blaze_user_addr_meta_unknowntype for compliance with C standard, stating undefined behavior for empty structs - Changed
blaze_inspect_elf_src::pathtype to*const _ - Fixed incorrect
NULLchecks when working withblaze_symbolize_src_kernelobjects - Switched away from using Git LFS for large benchmark files towards
on-demand downloading from a different repository, controlled by
generate-bench-filesfeature
- Removed no longer necessary
base_addressmember from various types - Renamed
SymInfo::addressmember toaddr - Fixed incorrect allocation size calculation in C API
- Fixed file offset lookup potentially reporting subtly wrong offsets on certain ELF file segment constellations
- Initial documented release