gimli
Change LogReleased 2024/05/26.
Added context to some read::Error
variants. #703
Changed type of read::UnitIndexSection::section
to IndexSectionId
. #716
Fixed write::Operation::ImplicitPointer::size
. #712
Changed read::RngListIter
and read::LocListIter
to skip ranges where the end is before the beginning, instead of returning an error. #715
Fixed clippy warnings. #713
read::UnitRef
. #711Released 2024/04/11.
Reader
type parameter to ReaderOffset
for read::UnwindContext
and related types. Replaced Expression
with UnwindExpression
in unwind information types. #703Changed write::Sections::for_each
and for_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
and read::DwarfPackageSections
. #698
Implemented BitOr
for DwEhPe
. #709
Added read::Relocate
, read::RelocateReader
, and write::RelocateWriter
. #709
Released 2023/11/24.
Changed read::AbbreviationsCache
to require manual population using Dwarf::populate_abbreviations_cache
. #679
Changed the default read::UnwindContextStorage
to use Box
instead of Vec
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 for read::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]
. Use EndianSlice::slice
instead. #669
Deleted impl Index<usize> for EndianSlice
and impl Index<RangeFrom<usize>> for EndianSlice
. #669
Replaced impl From<Pointer> for u64
with Pointer::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 to read::RegisterRule
, read::CallFrameInstruction
, and write::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
, and read::EhFrame::set_vendor
. #673
Added more ARM and AArch64 register definitions, and DW_CFA_AARCH64_negate_ra_state
support. #673
Released 2023/06/14.
Added FallibleIterator
implementation for read::OperationIter
. #649
Added DW_AT_GNU_deleted
constant. #658
Released 2023/02/15.
read::LineRows
. #642Released 2023/01/23.
Added SectionId::xcoff_name
and read::Section::xcoff_section_name
. #635
Added read::Dwarf::make_dwo
and read::Unit::dwo_name
. #637
read::DwarfPackage::sections
to handle supplementary files. #638Released 2022/11/23.
read::Dwarf::abbreviations_cache
to cache abbreviations at offset 0. Changed read::Dwarf::abbreviations
to return Result<Arc<Abbreviations>>
, and changed read::Unit::abbreviations
to Arc<Abbreviations>
. #628Added LoongArch register definitions. #624
Added support for tombstones in read::LocListIter
and read::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
read::EhHdrTable::iter
. #619Released 2021/11/02.
ArrayVec<Vec<T>>::into_vec
, which may be used by read::Evaluation::result
. This regression was introduced in 0.26.0. #601Released 2021/10/24.
Removed read::UninitializedUnwindContext
. Use Box<UnwindContext>
instead. #593
Renamed read::Error::CfiStackFull
to StackFull
. #595
Added UnwindContextStorage
type parameter to read::UnwindContext
, read::UnwindTable
, read::UnwindTableRow
, and read::RegisterRuleMap
. #595
Added EvaluationStorage
type parameter to read::Evaluation
. #595
Added read::SectionId::DebugCuIndex
and read::SectionId::DebugTuIndex
. #588
Fixed DW_EH_PE_pcrel
handling in default write::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
, and read::DebugTuIndex
. #588
Added read-core
feature to allow building without liballoc
. #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 a RawRangeListsOffset
to allow handling of GNU split DWARF extensions. Use read::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
, and raw_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
with read::DebugAranges::headers
. #539
Added read::Operation::Wasm*
. #546
read::LineRow::line
now returns Option<NonZeroU64>
. The read::ColumnType::Column
variant now contains a NonZeroU64
. #551
Replaced read::Dwarf::debug_str_sup
with read::Dwarf::sup
. Deleted sup
parameter of read::Dwarf::load
. Added read::Dwarf::load_sup
. #554
Support DW_FORM_addrx*
for DW_AT_low_pc
/DW_AT_high_pc
in read::Dwarf
. #541
Performance improvement in EndianReader
. #549
Released 2020/10/27.
Added more variants to read::UnitType
. Added read::AttributeValue::DwoId
#521
Replaced CompilationUnitHeader
and TypeUnitHeader
with UnitHeader
. Replaced CompilationUnitHeadersIter
with DebugInfoUnitHeadersIter
. Replaced TypeUnitHeadersIter
with DebugTypesUnitHeadersIter
. #523
Added read::Dwarf::attr_address
. #524
Added read support for DW_AT_GNU_addr_base
and DW_AT_GNU_ranges_base
. #525
dwarfdump: Display index values for attributes. #526
Added name_to_register
. #532
Released 2020/07/03.
UnitHeader::size_of_header
for DWARF 5 units. #518Added fuzz targets in CI. #512
Added read support for DW_OP_GNU_addr_index
and DW_OP_GNU_const_index
. #516
Added .dwo
support to dwarfdump. #516
Added SectionId::dwo_name
and Section::dwo_section_name
. #517
Fixed panic when reading DW_FORM_indirect
combined with DW_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
when DW_AT_name
or DW_AT_comp_dir
is missing. #515
Released 2020/05/12.
Minimum Rust version increased to 1.38.0.
Replaced read::Operation::Literal
with Operation::UnsignedConstant
and Operation::SignedConstant
. Changed read::Operation::Bra
and read::Operation::Skip
to contain the target offset instead of the bytecode. #479
Changed write::Expression
to support references. Existing users can convert to use Expression::raw
. #479
Replaced write::AttributeValue::AnyUnitEntryRef
with DebugInfoRef
. Renamed write::AttributeValue::ThisUnitEntryRef
to UnitRef
. #479
Added more optional features: endian-reader
and fallible-iterator
. #495 #498
read::Expression::operations
#479Fixed 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
and DebugFrame
to write::Sections
. #492
Improved performance of write::LineProgram::generate_row
. #476
Removed use of the byteorder
, arrayvec
and smallvec
crates. #494 #496 #497
Released 2020/01/11.
Changed type of DwTag
, DwAt
, and DwForm
constants. #451
Added read/write::AttributeValue::DebugMacroRef
, and returned where required in read::Attribute::value
. Added SectionId::DebugMacro
. #454
Deleted alloc
feature, and fixed no-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
Released 2019/07/08.
.debug_loc
and .debug_loclists
: added read::RawLocListEntry::AddressOrOffsetPair
enum variant, added write::Sections::debug_loc/debug_loclists
public members, and replaced write::AttributeValue::LocationListsRef
with LocationListRef
. #425Added read::Attribute::exprloc_value
and read::AttributeValue::exprloc_value
. #422
Added support for writing .debug_loc
and .debug_loclists
sections. #425
Added -G
flag to dwarfdump
example to display global offsets. #427
Added examples/simple.rs
. #429
write::LineProgram::from
no longer requires DW_AT_name
or DW_AT_comp_dir
attributes to be present in the unit DIE. #430Released 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 default Offset
has changed from usize
to R::Offset
. #392
Added an Offset
type parameter to the read::Unit
type to allow variance. #393
Changed the UninitializedUnwindContext::initialize
method to borrow self
, and return &mut UnwindContext
. Deleted the InitializedUnwindContext
type. #395
Deleted the UnwindSection
type parameters from the CommonInformationEntry
, FrameDescriptionEntry
, UninitializedUnwindContext
, UnwindContext
, and UnwindTable
types. #399
Changed the signature of the get_cie
callback parameter for various functions. The signature now matches the UnwindSection::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 the EhHdrTable::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 of u8
/u64
. #328
Replaced BaseAddresses::set_cfi
with set_eh_frame_hdr
and set_eh_frame
. Replaced BaseAddresses::set_data
with set_got
. You should now use the same BaseAddresses
value for parsing both .eh_frame
and .eh_frame_hdr
. #351
Renamed many types and functions related to .debug_line
. Renamed LineNumberProgram
to LineProgram
. Renamed IncompleteLineNumberProgram
to IncompleteLineProgram
. Renamed CompleteLineNumberProgram
to CompleteLineProgram
. Renamed LineNumberProgramHeader
to LineProgramHeader
. Renamed LineNumberRow
to LineRow
. Renamed StateMachine
to LineRows
. Renamed Opcode
to LineInstruction
. Renamed OpcodesIter
to LineInstructions
. Renamed LineNumberSequence
to LineSequence
. #359
Added Offset
type parameter to AttributeValue
, LineProgram
, IncompleteLineProgram
, CompleteLineProgram
, LineRows
, LineInstruction
, and FileEntry
. #324
Changed FileEntry::path_name
, FileEntry::directory
, and LineProgramHeader::directory
to return an AttributeValue
instead of a Reader
. #366
Renamed FileEntry::last_modification
to FileEntry::timestamp
and renamed FileEntry::length
to FileEntry::size
. #366
Added an Encoding
type. Changed many functions that previously accepted Format
, version or address size parameters to accept an Encoding
parameter instead. Notable changes are LocationLists::locations
, RangeLists::ranges
, and Expression::evaluation
. #364
Changed return type of LocationLists::new
and RangeLists::new
. #370
Added parameters to LocationsLists::locations
and RangeLists::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
with EvaluationResult::RequiresRelocatedAddress
. The handling of TextBase
was incorrect. #335
Added EvaluationResult::IndexedAddress
for operations that require an address from .debug_addr
. #358
Added Reader::read_slice
. Added a default implementation of Reader::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
and write
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 parsing DW_FORM_strx*
attributes. #358
Added support for reading DWARF 5 .debug_addr
sections, including parsing DW_FORM_addrx*
attributes and evaluating DW_OP_addrx
and DW_OP_constx
operations. #358
Added support for reading DWARF 5 indexed addresses and offsets in .debug_loclists
and .debug_rnglists
, including parsing DW_FORM_rnglistx
and DW_FORM_loclistx
attributes. #358
Added high level Dwarf
and Unit
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
and DebugFrame::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 its Reader
type parameter. #324
Fixed handling of empty units in dwarfdump. #330
Fixed UnitHeader::length_including_self
for Dwarf64
. #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 the alloc
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
and DW_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 custom Reader
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 to EndianSlice
, use that name instead. #295DW_CFA_restore_state
opcode properly maintains the current location. Previously it would incorrectly restore the old location when popping from evaluation stack. #274Released 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 example dwarfdump
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
and UninitializedUnwindContext::initialize
. #241
CfaRule
and RegisterRule
now expose their DW_OP
expressions as Expression
. 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 an Expression
instead of a Reader
now. This is a minor breaking change. #256
Released 2017/08/08.
All pub
types now derive(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
gimli
no longer requires the object file‘s section be fully loaded into memory. This enables using gimli
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 the gimli::Reader
trait. This manifests as small (but many) breaking changes to much of the public API. #182