Released YYYY/MM/DD.
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