Released 2024/10/04.
-
Changed
read::Evaluation::evaluate
to validateDW_OP_deref_size
. #739 -
Changed
write::LineProgram
to allow use of file index 0 for DWARF version 5. #740 -
Improved the workaround for reading zero length entries in
.debug_frame
. #741 -
Implemented
Default
forread::DwarfSections
andread::DwarfPackageSections
. #742 -
Changed
read::ArangeEntryIter
to handle tombstones in.debug_aranges
. #743 -
Improved handling handling of 0 for tombstones in
DW_LNE_set_address
and address pairs in ranges and locations. #750 -
Changed the
read::ArrayLike
trait implementation to use const generics. #752
- Added
MIPS::HI
andMIPS::LO
. #749
Released 2024/07/16.
-
Deleted support for segment selectors. #720
-
Added
read::FileEntry::source
and deletedCopy
implementation. #728 -
Changed
read::LineRow::execute
to return aResult
. #731 -
Deleted
Display
implementation forread::LineInstruction
. #734 -
Changed
read::Error
to be non-exhaustive.
-
Fixed
Hash
implementation forread::EndianReader
. #723 -
Changed
read::EhFrameHdr::parse
to validate the FDE count encoding. #725 -
Changed address overflow to be an error for
read::UnwindTableRow
,read::LineRow
, andread::ArangeEntry
. #730 #731 #732 -
Changed wrapping addition for 32-bit addresses to wrap at 32 bits instead of at 64 bits. #733
-
Added earlier validation of address sizes. #733
-
Added
read::IndexSectionId::section_id
. #719 -
Added
read::FrameDescriptionEntry::end_address
. #727 -
Added support for
DW_LNCT_LLVM_source
. #728
Released 2024/05/26.
-
Added context to some
read::Error
variants. #703 -
Changed type of
read::UnitIndexSection::section
toIndexSectionId
. #716
-
Fixed
write::Operation::ImplicitPointer::size
. #712 -
Changed
read::RngListIter
andread::LocListIter
to skip ranges where the end is before the beginning, instead of returning an error. #715 -
Fixed clippy warnings. #713
- Added
read::UnitRef
. #711
Released 2024/04/11.
- Changed
Reader
type parameter toReaderOffset
forread::UnwindContext
and related types. ReplacedExpression
withUnwindExpression
in unwind information types. #703
-
Changed
write::Sections::for_each
andfor_each_mut
to specify section lifetime. #699 -
Fixed writing unwind information with an LSDA encoding that is not
DW_EH_PE_absptr
. #704 -
Fixed parsing for an empty DWP index. #706
-
Improved error handling in
read::Unit::dwo_name
. #693
-
Added MIPS register definitions. #690
-
Added PowerPC register definitions. #691
-
Added
read::DwarfSections
andread::DwarfPackageSections
. #698 -
Implemented
BitOr
forDwEhPe
. #709 -
Added
read::Relocate
,read::RelocateReader
, andwrite::RelocateWriter
. #709
Released 2023/11/24.
-
Changed
read::AbbreviationsCache
to require manual population usingDwarf::populate_abbreviations_cache
. #679 -
Changed the default
read::UnwindContextStorage
to useBox
instead ofVec
so that its memory usage is limited. #687 -
Changed
read::UnwindTable::new
to always reset the context, because previous errors may have left the context in an invalid state. #684 -
Changed the
Debug
implementation forread::EndianSlice
to limit the number of bytes it displays. #686
-
Added more AArch64 register definitions. #680
-
Added
read::Unit::new_with_abbreviations
. #677 -
Added
read::Evaluation::value_result
. #676
Released 2023/08/12.
-
Deleted
impl From<EndianSlice> for &[u8]
. UseEndianSlice::slice
instead. #669 -
Deleted
impl Index<usize> for EndianSlice
andimpl Index<RangeFrom<usize>> for EndianSlice
. #669 -
Replaced
impl From<Pointer> for u64
withPointer::pointer
. #670 -
Updated
fallible-iterator
to 0.3.0. #672 -
Changed some optional dependencies to use the
dep:
feature syntax. #672 -
Added
non_exhaustive
attribute toread::RegisterRule
,read::CallFrameInstruction
, andwrite::CallFrameInstruction
. #673
-
The minimum supported rust version for the
read
feature and its dependencies increased to 1.60.0. -
The minimum supported rust version for other features increased to 1.65.0.
-
Added
Vendor
,read::DebugFrame::set_vendor
, andread::EhFrame::set_vendor
. #673 -
Added more ARM and AArch64 register definitions, and
DW_CFA_AARCH64_negate_ra_state
support. #673
Released 2023/06/14.
- Excluded test fixtures from published package. #661
-
Added
FallibleIterator
implementation forread::OperationIter
. #649 -
Added
DW_AT_GNU_deleted
constant. #658
Released 2023/02/15.
- Added support for tombstones in
read::LineRows
. #642
Released 2023/01/23.
-
Added
SectionId::xcoff_name
andread::Section::xcoff_section_name
. #635 -
Added
read::Dwarf::make_dwo
andread::Unit::dwo_name
. #637
- Changed
read::DwarfPackage::sections
to handle supplementary files. #638
Released 2022/11/23.
- Added
read::Dwarf::abbreviations_cache
to cache abbreviations at offset 0. Changedread::Dwarf::abbreviations
to returnResult<Arc<Abbreviations>>
, and changedread::Unit::abbreviations
toArc<Abbreviations>
. #628
-
Added LoongArch register definitions. #624
-
Added support for tombstones in
read::LocListIter
andread::RngListIter
. #631
Released 2022/07/16.
-
Fixed CFI personality encoding when writing. #609
-
Fixed use of raw pointer for mutation, detected by Miri. #614
-
Fixed
DW_OP_GNU_implicit_pointer
handling for DWARF version 2. #618
- Added
read::EhHdrTable::iter
. #619
Released 2021/11/02.
- Fixed segmentation fault in
ArrayVec<Vec<T>>::into_vec
, which may be used byread::Evaluation::result
. This regression was introduced in 0.26.0. #601
Released 2021/10/24.
-
Removed
read::UninitializedUnwindContext
. UseBox<UnwindContext>
instead. #593 -
Renamed
read::Error::CfiStackFull
toStackFull
. #595 -
Added
UnwindContextStorage
type parameter toread::UnwindContext
,read::UnwindTable
,read::UnwindTableRow
, andread::RegisterRuleMap
. #595 -
Added
EvaluationStorage
type parameter toread::Evaluation
. #595 -
Added
read::SectionId::DebugCuIndex
andread::SectionId::DebugTuIndex
. #588
-
Fixed
DW_EH_PE_pcrel
handling in defaultwrite::Writer::write_eh_pointer
implementation. #576 -
Fixed
read::AttributeSpecification::size
for some forms. #597 -
Display more unit details in dwarfdump. #584
-
Added
write::DebuggingInformationEntry::delete_child
. #570 -
Added RISC-V register definitions. #579
-
Added
read::DwarfPackage
,read::DebugCuIndex
, andread::DebugTuIndex
. #588 -
Added
read-core
feature to allow building withoutliballoc
. #596 -
Added
read::EntriesRaw::skip_attributes
. #597
Released 2021/07/26.
-
read::FrameDescriptionEntry::unwind_info_for_address
now returns a reference instead of cloning. #557 -
read::AttributeValue::RangeListsRef
now contains aRawRangeListsOffset
to allow handling of GNU split DWARF extensions. Useread::Dwarf::ranges_offset_from_raw
to handle it. #568 #569 -
Added
read::Unit::dwo_id
. #569
-
.debug_aranges
parsing now accepts version 3. #560 -
read::Dwarf::attr_ranges_offset
and its callers now handle GNU split DWARF extensions. #568 #569
-
Added
read::DebugLineStr::new
. #556 -
Added
read::UnwindTable::into_current_row
. #557 -
Added more
DW_LANG
constants. #565 -
dwarfdump: added DWO parent support. #568
-
Added
read::Dwarf
methods:ranges_offset_from_raw
,raw_ranges
, andraw_locations
. #568 #569
Released 2021/05/01.
-
Minimum Rust version increased to 1.42.0.
-
Added
read::Dwarf::debug_aranges
. #539 -
Replaced
read::DebugAranges::items
withread::DebugAranges::headers
. #539 -
Added
read::Operation::Wasm*
. #546 -
read::LineRow::line
now returnsOption<NonZeroU64>
. Theread::ColumnType::Column
variant now contains aNonZeroU64
. #551 -
Replaced
read::Dwarf::debug_str_sup
withread::Dwarf::sup
. Deletedsup
parameter ofread::Dwarf::load
. Addedread::Dwarf::load_sup
. #554
- dwarfdump: Supplementary object file support. #552
-
Support
DW_FORM_addrx*
forDW_AT_low_pc
/DW_AT_high_pc
inread::Dwarf
. #541 -
Performance improvement in
EndianReader
. #549
Released 2020/10/27.
-
Added more variants to
read::UnitType
. Addedread::AttributeValue::DwoId
#521 -
Replaced
CompilationUnitHeader
andTypeUnitHeader
withUnitHeader
. ReplacedCompilationUnitHeadersIter
withDebugInfoUnitHeadersIter
. ReplacedTypeUnitHeadersIter
withDebugTypesUnitHeadersIter
. #523
-
Added
read::Dwarf::attr_address
. #524 -
Added read support for
DW_AT_GNU_addr_base
andDW_AT_GNU_ranges_base
. #525 -
dwarfdump: Display index values for attributes. #526
-
Added
name_to_register
. #532
Released 2020/07/03.
- Fixed
UnitHeader::size_of_header
for DWARF 5 units. #518
-
Added fuzz targets in CI. #512
-
Added read support for
DW_OP_GNU_addr_index
andDW_OP_GNU_const_index
. #516 -
Added
.dwo
support to dwarfdump. #516 -
Added
SectionId::dwo_name
andSection::dwo_section_name
. #517
-
Fixed panic when reading
DW_FORM_indirect
combined withDW_FORM_implicit_const
. #502 -
Fixed panic for
read::Abbreviations::get(0)
. #505 -
Fixed arithmetic overflow when reading
.debug_line
. #508 -
Fixed arithmetic overflow when reading CFI. #509
-
Fixed arithmetic overflow and division by zero when reading
.debug_aranges
. #510 -
Don't return error from
read::Unit::new
whenDW_AT_name
orDW_AT_comp_dir
is missing. #515
Released 2020/05/12.
-
Minimum Rust version increased to 1.38.0.
-
Replaced
read::Operation::Literal
withOperation::UnsignedConstant
andOperation::SignedConstant
. Changedread::Operation::Bra
andread::Operation::Skip
to contain the target offset instead of the bytecode. #479 -
Changed
write::Expression
to support references. Existing users can convert to useExpression::raw
. #479 -
Replaced
write::AttributeValue::AnyUnitEntryRef
withDebugInfoRef
. Renamedwrite::AttributeValue::ThisUnitEntryRef
toUnitRef
. #479 -
Added more optional features:
endian-reader
andfallible-iterator
. #495 #498
- Added
read::Expression::operations
#479
-
Fixed newlines in
dwarfdump
example. #470 -
Ignore zero terminators when reading
.debug_frame
sections. #486 -
Increase the number of CFI register rules supported by
read::UnwindContext
. #487 -
Fixed version handling and return register encoding when reading
.eh_frame
sections. #493
-
Added
EhFrame
andDebugFrame
towrite::Sections
. #492 -
Improved performance of
write::LineProgram::generate_row
. #476 -
Removed use of the
byteorder
,arrayvec
andsmallvec
crates. #494 #496 #497
Released 2020/01/11.
-
Changed type of
DwTag
,DwAt
, andDwForm
constants. #451 -
Added
read/write::AttributeValue::DebugMacroRef
, and returned where required inread::Attribute::value
. AddedSectionId::DebugMacro
. #454 -
Deleted
alloc
feature, and fixedno-std
builds with stable rust. #459 -
Deleted
read::Error::description
, and changed<read::Error as Display>
to display what was previously the description. #462
-
Added GNU view constants. #434
-
Added
read::EntriesRaw
for low level DIE parsing. #455 -
Added
examples/simple-line.rs
. #460
-
Fixed handling of CFI augmentations without data. #438
-
dwarfdump: fix panic for malformed expressions. #447
-
dwarfdump: fix handling of Mach-O relocations. #449
- Improved abbreviation parsing performance. #451
Released 2019/07/08.
- Small API changes related to
.debug_loc
and.debug_loclists
: addedread::RawLocListEntry::AddressOrOffsetPair
enum variant, addedwrite::Sections::debug_loc/debug_loclists
public members, and replacedwrite::AttributeValue::LocationListsRef
withLocationListRef
. #425
-
Added
read::Attribute::exprloc_value
andread::AttributeValue::exprloc_value
. #422 -
Added support for writing
.debug_loc
and.debug_loclists
sections. #425 -
Added
-G
flag todwarfdump
example to display global offsets. #427 -
Added
examples/simple.rs
. #429
write::LineProgram::from
no longer requiresDW_AT_name
orDW_AT_comp_dir
attributes to be present in the unit DIE. #430
Released 2019/04/25.
The focus of this release has been on improving support for reading CFI, and adding support for writing CFI.
-
For types which have an
Offset
type parameter, the defaultOffset
has changed fromusize
toR::Offset
. #392 -
Added an
Offset
type parameter to theread::Unit
type to allow variance. #393 -
Changed the
UninitializedUnwindContext::initialize
method to borrowself
, and return&mut UnwindContext
. Deleted theInitializedUnwindContext
type. #395 -
Deleted the
UnwindSection
type parameters from theCommonInformationEntry
,FrameDescriptionEntry
,UninitializedUnwindContext
,UnwindContext
, andUnwindTable
types. #399 -
Changed the signature of the
get_cie
callback parameter for various functions. The signature now matches theUnwindSection::cie_from_offset
method, so that method can be used as the parameter. #400 -
Reduced the number of lifetime parameters for the
UnwindTable
type. #400 -
Updated
fallible-iterator
to version 0.2.0. #407 -
Added a parameter to the
Error::UnexpectedEof
enum variant. #408
-
Update to 2018 edition. #391
-
Added the
FrameDescriptionEntry::unwind_info_for_address
method. #396 -
Added the
FrameDescriptionEntry::rows
method. #396 -
Added the
EhHdrTable::unwind_info_for_address
method. #400 -
Added the
EhHdrTable::fde_for_address
method and deprecated theEhHdrTable::lookup_and_parse
method. #400 -
Added the
EhHdrTable::pointer_to_offset
method. #400 -
Added the
UnwindSection::fde_for_address
method. #396 -
Added the
UnwindSection::fde_from_offset
method. #400 -
Added the
UnwindSection::partial_fde_from_offset
method. #400 -
Added the
Section::id
method. #406 -
Added the
Dwarf::load
method, and corresponding methods for individual sections. #406 -
Added the
Dwarf::borrow
method, and corresponding methods for individual sections. #406 -
Added the
Dwarf::format_error
method. #408 -
Added the
Dwarf::die_ranges
method. #417 -
Added the
Dwarf::unit_ranges
method. #417 -
Added support for writing
.debug_frame
and.eh_frame
sections. #412 #419
-
The
code_alignment_factor
is now used when evaluating CFI instructions that advance the location. #401 -
Fixed parsing of pointers encoded with
DW_EH_PE_funcrel
. #402 -
Use the FDE address encoding from the augmentation when parsing
DW_CFA_set_loc
. #403 -
Fixed setting of
.eh_frame
base addresses in dwarfdump. #410
Released 2019/02/21.
The focus of this release has been on improving DWARF 5 support, and adding support for writing DWARF.
-
Changed register values to a
Register
type instead ofu8
/u64
. #328 -
Replaced
BaseAddresses::set_cfi
withset_eh_frame_hdr
andset_eh_frame
. ReplacedBaseAddresses::set_data
withset_got
. You should now use the sameBaseAddresses
value for parsing both.eh_frame
and.eh_frame_hdr
. #351 -
Renamed many types and functions related to
.debug_line
. RenamedLineNumberProgram
toLineProgram
. RenamedIncompleteLineNumberProgram
toIncompleteLineProgram
. RenamedCompleteLineNumberProgram
toCompleteLineProgram
. RenamedLineNumberProgramHeader
toLineProgramHeader
. RenamedLineNumberRow
toLineRow
. RenamedStateMachine
toLineRows
. RenamedOpcode
toLineInstruction
. RenamedOpcodesIter
toLineInstructions
. RenamedLineNumberSequence
toLineSequence
. #359 -
Added
Offset
type parameter toAttributeValue
,LineProgram
,IncompleteLineProgram
,CompleteLineProgram
,LineRows
,LineInstruction
, andFileEntry
. #324 -
Changed
FileEntry::path_name
,FileEntry::directory
, andLineProgramHeader::directory
to return anAttributeValue
instead of aReader
. #366 -
Renamed
FileEntry::last_modification
toFileEntry::timestamp
and renamedFileEntry::length
toFileEntry::size
. #366 -
Added an
Encoding
type. Changed many functions that previously acceptedFormat
, version or address size parameters to accept anEncoding
parameter instead. Notable changes areLocationLists::locations
,RangeLists::ranges
, andExpression::evaluation
. #364 -
Changed return type of
LocationLists::new
andRangeLists::new
. #370 -
Added parameters to
LocationsLists::locations
andRangeLists::ranges
to support.debug_addr
. #358 -
Added more
AttributeValue
variants:DebugAddrBase
,DebugAddrIndex
,DebugLocListsBase
,DebugLocListsIndex
,DebugRngListsBase
,DebugRngListsIndex
,DebugStrOffsetsBase
,DebugStrOffsetsIndex
,DebugLineStrRef
. #358 -
Changed
AttributeValue::Data*
attributes to native endian integers instead of byte arrays. #365 -
Replaced
EvaluationResult::TextBase
withEvaluationResult::RequiresRelocatedAddress
. The handling ofTextBase
was incorrect. #335 -
Added
EvaluationResult::IndexedAddress
for operations that require an address from.debug_addr
. #358 -
Added
Reader::read_slice
. Added a default implementation ofReader::read_u8_array
which uses this. #358
-
Added initial support for writing DWARF. This is targeted at supporting line number information only. #340 #344 #346 #361 #362 #365 #368 #382
-
Added
read
andwrite
Cargo features. Both are enabled by default. #343 -
Added support for reading DWARF 5
.debug_line
and.debug_line_str
sections. #366 -
Added support for reading DWARF 5
.debug_str_offsets
sections, including parsingDW_FORM_strx*
attributes. #358 -
Added support for reading DWARF 5
.debug_addr
sections, including parsingDW_FORM_addrx*
attributes and evaluatingDW_OP_addrx
andDW_OP_constx
operations. #358 -
Added support for reading DWARF 5 indexed addresses and offsets in
.debug_loclists
and.debug_rnglists
, including parsingDW_FORM_rnglistx
andDW_FORM_loclistx
attributes. #358 -
Added high level
Dwarf
andUnit
types. Existing code does not need to switch to using these types, but doing so will make DWARF 5 support simpler. #352 #380 #381 -
Added
EhFrame::set_address_size
andDebugFrame::set_address_size
methods to allow parsing non-native CFI sections. The default address size is still the native size. #325 -
Added architecture specific definitions for
Register
values and names. Changed dwarfdump to print them. #328 -
Added support for reading relocatable DWARF sections. #337
-
Added parsing of
DW_FORM_data16
. #366
-
Fixed parsing DWARF 5 ranges with
start == end == 0
. #323 -
Changed
LineRows
to be covariant in itsReader
type parameter. #324 -
Fixed handling of empty units in dwarfdump. #330
-
Fixed
UnitHeader::length_including_self
forDwarf64
. #342 -
Fixed parsing of
DW_CFA_set_loc
. #355 -
Fixed handling of multiple headers in
.debug_loclists
and.debug_rnglists
. #370
Released 2018/08/28.
Released 2018/06/01.
-
Added support for building in
#![no_std]
environments, when thealloc
crate is available. Disable the "std" feature and enable the "alloc" feature. #138 #271 -
Added support for DWARF 5
.debug_rnglists
and.debug_loclists
sections. #272 -
Added support for DWARF 5
DW_FORM_ref_sup
andDW_FORM_strp_sup
attribute forms. #288 -
Added support for DWARF 5 operations on typed values. #293
-
A
dwarf-validate
example program that checks the integrity of the given DWARF and its references between sections. #290 -
Added the
EndianReader<T>
type, an easy way to define a customReader
implementation with a reference to a generic buffer of bytes and an associated endianity. #298 #302
-
Various speed improvements for evaluating
.debug_line
line number programs. #276 -
The example
dwarfdump
clone is a whole lot faster now. #282 #284 #285
EndianBuf
has been renamed toEndianSlice
, use that name instead. #295
- Evaluating the
DW_CFA_restore_state
opcode properly maintains the current location. Previously it would incorrectly restore the old location when popping from evaluation stack. #274
Released 2017/12/01.
-
Added the
EndianBuf::to_string()
method. #233 -
Added more robust error handling in our example
dwarfdump
clone. #234 -
Added
FrameDescriptionEntry::initial_address
method. #237 -
Added
FrameDescriptionEntry::len
method. #237 -
Added the
FrameDescriptionEntry::entry_len
method. #241 -
Added the
CommonInformationEntry::offset
method. #241 -
Added the
CommonInformationEntry::entry_len
method. #241 -
Added the
CommonInformationEntry::version
method. #241 -
Added the
CommonInformationEntry::augmentation
method. #241 -
Added the
CommonInformationEntry::code_alignment_factor
method. #241 -
Added the
CommonInformationEntry::data_alignment_factor
method. #241 -
Added the
CommonInformationEntry::return_address_register
method. #241 -
Added support for printing
.eh_frame
sections to our exampledwarfdump
clone. #241 -
Added support for parsing the
.eh_frame_hdr
section. On Linux, the.eh_frame_hdr
section provides a pointer to the already-mapped-in-memory.eh_frame
data, so that it doesn't need to be duplicated, and a binary search table of its entries for faster unwinding information lookups. #250 -
Added support for parsing DWARF 5 compilation unit headers. #257
-
Added support for DWARF 5's
DW_FORM_implicit_const
. #257
-
Unwinding methods now give ownership of the unwinding context back to the caller if errors are encountered, not just on the success path. This allows recovering from errors in signal-safe code, where constructing a new unwinding context is not an option because it requires allocation. This is a breaking change affecting
UnwindSection::unwind_info_for_address
andUninitializedUnwindContext::initialize
. #241 -
CfaRule
andRegisterRule
now expose theirDW_OP
expressions asExpression
. This is a minor breaking change. #241 -
The
Error::UnknownVersion
variant now contains the unknown version number. This is a minor breaking change. #245 -
EvaluationResult::RequiresEntryValue
requires anExpression
instead of aReader
now. This is a minor breaking change. #256
Released 2017/08/08.
-
All
pub
types nowderive(Hash)
. #192 -
All the constants from DWARF 5 are now defined. #193
-
Added support for the
DW_OP_GNU_parameter_ref
GNU extension to parsing and evaluation DWARF opcodes. #208 -
Improved LEB128 parsing performance. #216
-
Improved
.debug_{aranges,pubnames,pubtypes}
parsing performance. #218 -
Added the ability to choose endianity dynamically at run time, rather than only statically at compile time. #219
- The biggest change of this release is that
gimli
no longer requires the object file's section be fully loaded into memory. This enables usinggimli
on 32 bit platforms where there often isn't enough contiguous virtual memory address space to load debugging information into. The default behavior is still geared for 64 bit platforms, where address space overfloweth, and you can still load the whole sections of the object file (or the entire object file) into memory. This is abstracted over with thegimli::Reader
trait. This manifests as small (but many) breaking changes to much of the public API. #182