- 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_files
equal tofalse
- Adjusted
inspect::Inspector::for_each
to accept callback returningstd::ops::ControlFlow
to facilitate early termination - Improved
kallsyms
parsing 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_QUERY
ioctl during address normalization- Added
enable_procmap_query
tonormalize::Normalizer
- Added
is_procmap_query_supported
function tohelper
module
- 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_files
is in use - Fixed potentially invalid reading of debug link checksum when
.gnu_debuglink
section is unaligned - Renamed
enable_maps_caching
method ofnormalize::Normalizer
toenable_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_dirs
for configuring directories searched for targets
- Added
- Introduced
normalize::NormalizeOpts
type for configurable address normalization- Removed
normalize::Normalizer::normalize_user_addrs_sorted
in 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_maps
andcache_build_ids
properties tonormalize::Normalizer
type- Adjusted normalization logic to return references to cached build
IDs if
cache_build_ids
istrue
- 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_each
signature to no longer carry explicit state around - Introduced
normalize::Reason
enum to provide best guess at why normalization was not successful as part of thenormalize::UserMeta::Unknown
variant - Added
From<Box<dyn std::error::Error>>
conversion toError
- Added
Display
impl toErrorKind
- Added
read_elf_build_id_from_mmap
function tohelper
module - 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
Clone
impl ofsymbolize::Builder
type
- Added support for Breakpad format behind
breakpad
feature (disabled by default) - Added support for usage of perf map files as part of process symbolization
- Added
perf_map
attribute tosymbolize::Process
type
- Added
- Added
map_files
attribute tosymbolize::Process
type - Added support for symbolizing addresses mapping to ELF variables and
for looking them up using
inspect
APIs - Added support for GNU indirect functions to ELF logic
- Overhauled
SymType
enum- Made it non-exhaustive
- Moved it out of
inspect
module - Renamed
Unknown
variant toUndefined
- Made auto reloading of symbolization sources on change configurable
- Fixed DWARF symbolization in the presence of cross compilation unit references
- Introduced
symbolize::Reason
enum to provide best guess at why symbolization was not successful as part of thesymbolize::Symbolized::Unknown
variant - Introduced
apk
andgsym
compile-time features (disabled by default) - Improved handling of dynamic ELF symbols for symbolization and inspection
- Fixed Gsym symbolization issue for "large" addresses
- Reordered
pid
argument to normalization functions before addresses - Reordered
src
argument to inspection functions before names
- Added caching logic for Gsym resolvers to
symbolize::Symbolizer
- Adjusted various symbolization related types to contain
Cow
objects 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_syms
to be a symbolization source property instead of asymbolize::Symbolizer
attribute - Renamed
inspect::Elf::debug_info
todebug_syms
- Handled potential numeric overflow in Gsym inlined function parser more gracefully
- Moved C API definitions into
blazesym-c
crate - Fixed build for some Android flavors
- Fixed build failure when
dwarf
feature is not enabled - Changed
Addr
to map to 64 bit integer - Reworked normalization APIs to produce file offsets instead of virtual offsets
- Introduced
symbolize::Input
enum 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::Apk
variant - 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::SymInfo
type 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_offset
member optional - Added ability to contain backtraces in
Error
objects - 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::symbolize
method from nestedVec
to a single levelVec
of newly introducedsymbolize::Symbolized
enum - Further changes to
symbolize::Sym
:- Added
size
member andto_path
helper method - Factored out
CodeInfo
type capturing all source code location information - Included optional inlined function information via
inlined
attribute
- Added
- Added support for reporting inlined functions for DWARF and Gsym formats
- Introduced
symbolize::Symbolizer::symbolize_single
for more convenient symbolization of a single address - Introduced
normalize::Builder
type for customization of anormalize::Normalizer
instance and made reading of build IDs configurable - Adjusted ELF symbolization code to honor symbol sizes
- Renamed
symbolize::Builder::enable_src_location
toenable_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
demangle
feature (at compile time) and corresponding flag insymbolize::Builder
(at runtime) - Renamed
symbolize::SymbolizedResult
toSym
and reworked it- Made it non-exhaustive
- Renamed
symbol
member toname
- Added
offset
member - Changed
line
member to be of typeu32
andcolumn
tou16
- Made all source code location information optional
- Split
path
member intodir
andfile
- 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
blazecli
command line interface for the library - Introduced
helper
module exposingread_elf_build_id
function
- Introduced custom
Error
type instead of relying solely onstd::io::Error
- Switched to using
gimli
for DWARF support- Added support for DWARF versions v2, v3, and v5 for symbol lookup and source code information retrieval
- Introduced
dwarf
feature to make dependency optional
- Switched from
log
to usingtracing
as 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::Gsym
variant to support symbolizing Gsym from user provided "raw" data - Renamed
normalize::UserAddrMeta::Binary
variant toElf
- Renamed
blaze_user_addr_meta_unknown::__unused
member to_unused
- Added
extern "C"
guards inblazesym.h
header for easy of use from C++ code - Added unused member variable to
blaze_user_addr_meta_unknown
type for compliance with C standard, stating undefined behavior for empty structs - Changed
blaze_inspect_elf_src::path
type to*const _
- Fixed incorrect
NULL
checks when working withblaze_symbolize_src_kernel
objects - Switched away from using Git LFS for large benchmark files towards
on-demand downloading from a different repository, controlled by
generate-bench-files
feature
- Removed no longer necessary
base_address
member from various types - Renamed
SymInfo::address
member 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