Skip to content

Latest commit

 

History

History
367 lines (260 loc) · 13.9 KB

CHANGELOG.md

File metadata and controls

367 lines (260 loc) · 13.9 KB

gimli Change Log


Unreleased

Released YYYY/MM/DD.

The focus of this release has been on improving DWARF 5 support, and adding support for writing DWARF.

Breaking changes

  • 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

  • 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

  • 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


0.16.1

Released 2018/08/28.

Added

  • Added EhFrameHdr::lookup_and_parse. #316
  • Added support for DW_CFA_GNU_args_size. #319

Fixed

  • Implement Send/Sync for SubRange. #305
  • Fixed alloc support on nightly. #306 #310

0.16.0

Released 2018/06/01.

Added

  • 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

Changed

Deprecated

  • EndianBuf has been renamed to EndianSlice, use that name instead. #295

Fixed

  • 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

0.15.0

Released 2017/12/01.

Added

  • 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

Changed

  • 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


0.14.0

Released 2017/08/08.

Added

  • 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

Changed

  • The biggest change of this release is that 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

Fixed

  • The DW_END_* constants for defining endianity of a compilation unit were previously incorrect. #193

  • The DW_OP_addr opcode is relative to the base address of the .text section of the binary, but we were incorrectly treating it as an absolute value. #210