# `gimli` Change Log

--------------------------------------------------------------------------------

## 0.28.1

Released 2023/11/24.

### Changed

* Changed `read::AbbreviationsCache` to require manual population using
  `Dwarf::populate_abbreviations_cache`.
  [#679](https://github.com/gimli-rs/gimli/pull/679)

* Changed the default `read::UnwindContextStorage` to use `Box` instead of `Vec`
  so that its memory usage is limited.
  [#687](https://github.com/gimli-rs/gimli/pull/687)

* Changed `read::UnwindTable::new` to always reset the context, because
  previous errors may have left the context in an invalid state.
  [#684](https://github.com/gimli-rs/gimli/pull/684)

* Changed the `Debug` implementation for `read::EndianSlice` to limit the number
  of bytes it displays.
  [#686](https://github.com/gimli-rs/gimli/pull/686)

### Added

* Added more AArch64 register definitions.
  [#680](https://github.com/gimli-rs/gimli/pull/680)

* Added `read::Unit::new_with_abbreviations`.
  [#677](https://github.com/gimli-rs/gimli/pull/677)

* Added `read::Evaluation::value_result`.
  [#676](https://github.com/gimli-rs/gimli/pull/676)

--------------------------------------------------------------------------------

## 0.28.0

Released 2023/08/12.

### Breaking changes

* Deleted `impl From<EndianSlice> for &[u8]`. Use `EndianSlice::slice` instead.
  [#669](https://github.com/gimli-rs/gimli/pull/669)

* Deleted `impl Index<usize> for EndianSlice` and
  `impl Index<RangeFrom<usize>> for EndianSlice`.
  [#669](https://github.com/gimli-rs/gimli/pull/669)

* Replaced `impl From<Pointer> for u64` with `Pointer::pointer`.
  [#670](https://github.com/gimli-rs/gimli/pull/670)

* Updated `fallible-iterator` to 0.3.0.
  [#672](https://github.com/gimli-rs/gimli/pull/672)

* Changed some optional dependencies to use the `dep:` feature syntax.
  [#672](https://github.com/gimli-rs/gimli/pull/672)

* Added `non_exhaustive` attribute to `read::RegisterRule`,
  `read::CallFrameInstruction`, and `write::CallFrameInstruction`.
  [#673](https://github.com/gimli-rs/gimli/pull/673)

### Changed

* 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

* Added `Vendor`, `read::DebugFrame::set_vendor`, and `read::EhFrame::set_vendor`.
  [#673](https://github.com/gimli-rs/gimli/pull/673)

* Added more ARM and AArch64 register definitions, and
  `DW_CFA_AARCH64_negate_ra_state` support.
  [#673](https://github.com/gimli-rs/gimli/pull/673)

--------------------------------------------------------------------------------

## 0.27.3

Released 2023/06/14.

### Changed

* Excluded test fixtures from published package.
  [#661](https://github.com/gimli-rs/gimli/pull/661)

### Added

* Added `FallibleIterator` implementation for `read::OperationIter`.
  [#649](https://github.com/gimli-rs/gimli/pull/649)

* Added `DW_AT_GNU_deleted` constant.
  [#658](https://github.com/gimli-rs/gimli/pull/658)

--------------------------------------------------------------------------------

## 0.27.2

Released 2023/02/15.

### Added

* Added support for tombstones in `read::LineRows`.
  [#642](https://github.com/gimli-rs/gimli/pull/642)

--------------------------------------------------------------------------------

## 0.27.1

Released 2023/01/23.

### Added

* Added `SectionId::xcoff_name` and `read::Section::xcoff_section_name`.
  [#635](https://github.com/gimli-rs/gimli/pull/635)

* Added `read::Dwarf::make_dwo` and `read::Unit::dwo_name`.
  [#637](https://github.com/gimli-rs/gimli/pull/637)

### Changed

* Changed `read::DwarfPackage::sections` to handle supplementary files.
  [#638](https://github.com/gimli-rs/gimli/pull/638)

--------------------------------------------------------------------------------

## 0.27.0

Released 2022/11/23.

### Breaking changes

* Added `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>`.
  [#628](https://github.com/gimli-rs/gimli/pull/628)

### Added

* Added LoongArch register definitions.
  [#624](https://github.com/gimli-rs/gimli/pull/624)

* Added support for tombstones in `read::LocListIter` and `read::RngListIter`.
  [#631](https://github.com/gimli-rs/gimli/pull/631)

--------------------------------------------------------------------------------

## 0.26.2

Released 2022/07/16.

### Changed

* Fixed CFI personality encoding when writing.
  [#609](https://github.com/gimli-rs/gimli/pull/609)

* Fixed use of raw pointer for mutation, detected by Miri.
  [#614](https://github.com/gimli-rs/gimli/pull/614)

* Fixed `DW_OP_GNU_implicit_pointer` handling for DWARF version 2.
  [#618](https://github.com/gimli-rs/gimli/pull/618)

### Added

* Added `read::EhHdrTable::iter`.
  [#619](https://github.com/gimli-rs/gimli/pull/619)

--------------------------------------------------------------------------------

## 0.26.1

Released 2021/11/02.

### Changed

* Fixed segmentation fault in `ArrayVec<Vec<T>>::into_vec`, which may be used by
  `read::Evaluation::result`. This regression was introduced in 0.26.0.
  [#601](https://github.com/gimli-rs/gimli/pull/601)

--------------------------------------------------------------------------------

## 0.26.0

Released 2021/10/24.

### Breaking changes

* Removed `read::UninitializedUnwindContext`. Use `Box<UnwindContext>` instead.
  [#593](https://github.com/gimli-rs/gimli/pull/593)

* Renamed `read::Error::CfiStackFull` to `StackFull`.
  [#595](https://github.com/gimli-rs/gimli/pull/595)

* Added `UnwindContextStorage` type parameter to `read::UnwindContext`, `read::UnwindTable`,
  `read::UnwindTableRow`, and `read::RegisterRuleMap`.
  [#595](https://github.com/gimli-rs/gimli/pull/595)

* Added `EvaluationStorage` type parameter to `read::Evaluation`.
  [#595](https://github.com/gimli-rs/gimli/pull/595)

* Added `read::SectionId::DebugCuIndex` and `read::SectionId::DebugTuIndex`.
  [#588](https://github.com/gimli-rs/gimli/pull/588)

### Changed

* Fixed `DW_EH_PE_pcrel` handling in default `write::Writer::write_eh_pointer` implementation.
  [#576](https://github.com/gimli-rs/gimli/pull/576)

* Fixed `read::AttributeSpecification::size` for some forms.
  [#597](https://github.com/gimli-rs/gimli/pull/597)

* Display more unit details in dwarfdump.
  [#584](https://github.com/gimli-rs/gimli/pull/584)

### Added

* Added `write::DebuggingInformationEntry::delete_child`.
  [#570](https://github.com/gimli-rs/gimli/pull/570)

* Added ARM and AArch64 register definitions.
  [#574](https://github.com/gimli-rs/gimli/pull/574)
  [#577](https://github.com/gimli-rs/gimli/pull/577)

* Added RISC-V register definitions.
  [#579](https://github.com/gimli-rs/gimli/pull/579)

* Added `read::DwarfPackage`, `read::DebugCuIndex`, and `read::DebugTuIndex`.
  [#588](https://github.com/gimli-rs/gimli/pull/588)

* Added `read-core` feature to allow building without `liballoc`.
  [#596](https://github.com/gimli-rs/gimli/pull/596)

* Added `read::EntriesRaw::skip_attributes`.
  [#597](https://github.com/gimli-rs/gimli/pull/597)

--------------------------------------------------------------------------------

## 0.25.0

Released 2021/07/26.

### Breaking changes

* `read::FrameDescriptionEntry::unwind_info_for_address` now returns a reference
  instead of cloning.
  [#557](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/568)
  [#569](https://github.com/gimli-rs/gimli/pull/569)

* Added `read::Unit::dwo_id`.
  [#569](https://github.com/gimli-rs/gimli/pull/569)

### Changed

* `.debug_aranges` parsing now accepts version 3.
  [#560](https://github.com/gimli-rs/gimli/pull/560)

* `read::Dwarf::attr_ranges_offset` and its callers now handle GNU split DWARF extensions.
  [#568](https://github.com/gimli-rs/gimli/pull/568)
  [#569](https://github.com/gimli-rs/gimli/pull/569)

### Added

* Added `read::DebugLineStr::new`.
  [#556](https://github.com/gimli-rs/gimli/pull/556)

* Added `read::UnwindTable::into_current_row`.
  [#557](https://github.com/gimli-rs/gimli/pull/557)

* Added more `DW_LANG` constants.
  [#565](https://github.com/gimli-rs/gimli/pull/565)

* dwarfdump: added DWO parent support.
  [#568](https://github.com/gimli-rs/gimli/pull/568)

* Added `read::Dwarf` methods: `ranges_offset_from_raw`, `raw_ranges`, and `raw_locations`.
  [#568](https://github.com/gimli-rs/gimli/pull/568)
  [#569](https://github.com/gimli-rs/gimli/pull/569)

--------------------------------------------------------------------------------

## 0.24.0

Released 2021/05/01.

### Breaking changes

* Minimum Rust version increased to 1.42.0.

* Added `read::Dwarf::debug_aranges`.
  [#539](https://github.com/gimli-rs/gimli/pull/539)

* Replaced `read::DebugAranges::items` with `read::DebugAranges::headers`.
  [#539](https://github.com/gimli-rs/gimli/pull/539)

* Added `read::Operation::Wasm*`.
  [#546](https://github.com/gimli-rs/gimli/pull/546)

* `read::LineRow::line` now returns `Option<NonZeroU64>`.
  The `read::ColumnType::Column` variant now contains a `NonZeroU64`.
  [#551](https://github.com/gimli-rs/gimli/pull/551)

* Replaced `read::Dwarf::debug_str_sup` with `read::Dwarf::sup`.
  Deleted `sup` parameter of `read::Dwarf::load`.
  Added `read::Dwarf::load_sup`.
  [#554](https://github.com/gimli-rs/gimli/pull/554)

### Added

* dwarfdump: Supplementary object file support.
  [#552](https://github.com/gimli-rs/gimli/pull/552)

### Changed

* Support `DW_FORM_addrx*` for `DW_AT_low_pc`/`DW_AT_high_pc` in `read::Dwarf`.
  [#541](https://github.com/gimli-rs/gimli/pull/541)

* Performance improvement in `EndianReader`.
  [#549](https://github.com/gimli-rs/gimli/pull/549)

--------------------------------------------------------------------------------

## 0.23.0

Released 2020/10/27.

### Breaking changes

* Added more variants to `read::UnitType`.
  Added `read::AttributeValue::DwoId`
  [#521](https://github.com/gimli-rs/gimli/pull/521)

* Replaced `CompilationUnitHeader` and `TypeUnitHeader` with `UnitHeader`.
  Replaced `CompilationUnitHeadersIter` with `DebugInfoUnitHeadersIter`.
  Replaced `TypeUnitHeadersIter` with `DebugTypesUnitHeadersIter`.
  [#523](https://github.com/gimli-rs/gimli/pull/523)


### Added

* Added read support for split DWARF.
  [#527](https://github.com/gimli-rs/gimli/pull/527)
  [#529](https://github.com/gimli-rs/gimli/pull/529)

* Added `read::Dwarf::attr_address`.
  [#524](https://github.com/gimli-rs/gimli/pull/524)

* Added read support for `DW_AT_GNU_addr_base` and `DW_AT_GNU_ranges_base`.
  [#525](https://github.com/gimli-rs/gimli/pull/525)

* dwarfdump: Display index values for attributes.
  [#526](https://github.com/gimli-rs/gimli/pull/526)

* Added `name_to_register`.
  [#532](https://github.com/gimli-rs/gimli/pull/532)

--------------------------------------------------------------------------------

## 0.22.0

Released 2020/07/03.

### Breaking changes

* Fixed `UnitHeader::size_of_header` for DWARF 5 units.
  [#518](https://github.com/gimli-rs/gimli/pull/518)

### Added

* Added fuzz targets in CI.
  [#512](https://github.com/gimli-rs/gimli/pull/512)

* Added read support for `DW_OP_GNU_addr_index` and `DW_OP_GNU_const_index`.
  [#516](https://github.com/gimli-rs/gimli/pull/516)

* Added `.dwo` support to dwarfdump.
  [#516](https://github.com/gimli-rs/gimli/pull/516)

* Added `SectionId::dwo_name` and `Section::dwo_section_name`.
  [#517](https://github.com/gimli-rs/gimli/pull/517)

### Fixed

* Fixed panic when reading `DW_FORM_indirect` combined with `DW_FORM_implicit_const`.
  [#502](https://github.com/gimli-rs/gimli/pull/502)

* Fixed panic for `read::Abbreviations::get(0)`.
  [#505](https://github.com/gimli-rs/gimli/pull/505)

* Fixed arithmetic overflow when reading `.debug_line`.
  [#508](https://github.com/gimli-rs/gimli/pull/508)

* Fixed arithmetic overflow when reading CFI.
  [#509](https://github.com/gimli-rs/gimli/pull/509)

* Fixed arithmetic overflow and division by zero when reading `.debug_aranges`.
  [#510](https://github.com/gimli-rs/gimli/pull/510)

* Don't return error from `read::Unit::new` when `DW_AT_name` or `DW_AT_comp_dir` is missing.
  [#515](https://github.com/gimli-rs/gimli/pull/515)

--------------------------------------------------------------------------------

## 0.21.0

Released 2020/05/12.

### Breaking changes

* 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](https://github.com/gimli-rs/gimli/pull/479)

* Changed `write::Expression` to support references. Existing users can convert to use `Expression::raw`.
  [#479](https://github.com/gimli-rs/gimli/pull/479)

* Replaced `write::AttributeValue::AnyUnitEntryRef` with `DebugInfoRef`.
  Renamed `write::AttributeValue::ThisUnitEntryRef` to `UnitRef`.
  [#479](https://github.com/gimli-rs/gimli/pull/479)

* Added more optional features: `endian-reader` and `fallible-iterator`.
  [#495](https://github.com/gimli-rs/gimli/pull/495)
  [#498](https://github.com/gimli-rs/gimli/pull/498)

### Added

* Added `read::Expression::operations`
  [#479](https://github.com/gimli-rs/gimli/pull/479)

### Fixed

* Fixed newlines in `dwarfdump` example.
  [#470](https://github.com/gimli-rs/gimli/pull/470)

* Ignore zero terminators when reading `.debug_frame` sections.
  [#486](https://github.com/gimli-rs/gimli/pull/486)

* Increase the number of CFI register rules supported by `read::UnwindContext`.
  [#487](https://github.com/gimli-rs/gimli/pull/487)

* Fixed version handling and return register encoding when reading `.eh_frame` sections.
  [#493](https://github.com/gimli-rs/gimli/pull/493)

### Changed

* Added `EhFrame` and `DebugFrame` to `write::Sections`.
  [#492](https://github.com/gimli-rs/gimli/pull/492)

* Improved performance of `write::LineProgram::generate_row`.
  [#476](https://github.com/gimli-rs/gimli/pull/476)

* Removed use of the `byteorder`, `arrayvec` and `smallvec` crates.
  [#494](https://github.com/gimli-rs/gimli/pull/494)
  [#496](https://github.com/gimli-rs/gimli/pull/496)
  [#497](https://github.com/gimli-rs/gimli/pull/497)

--------------------------------------------------------------------------------

## 0.20.0

Released 2020/01/11.

### Breaking changes

* Changed type of `DwTag`, `DwAt`, and `DwForm` constants.
  [#451](https://github.com/gimli-rs/gimli/pull/451)

* Added `read/write::AttributeValue::DebugMacroRef`, and returned where
  required in `read::Attribute::value`. Added `SectionId::DebugMacro`.
  [#454](https://github.com/gimli-rs/gimli/pull/454)

* Deleted `alloc` feature, and fixed `no-std` builds with stable rust.
  [#459](https://github.com/gimli-rs/gimli/pull/459)

* Deleted `read::Error::description`, and changed `<read::Error as Display>`
  to display what was previously the description.
  [#462](https://github.com/gimli-rs/gimli/pull/462)

### Added

* Added GNU view constants.
  [#434](https://github.com/gimli-rs/gimli/pull/434)

* Added `read::EntriesRaw` for low level DIE parsing.
  [#455](https://github.com/gimli-rs/gimli/pull/455)

* Added `examples/simple-line.rs`.
  [#460](https://github.com/gimli-rs/gimli/pull/460)

### Fixed

* Fixed handling of CFI augmentations without data.
  [#438](https://github.com/gimli-rs/gimli/pull/438)

* dwarfdump: fix panic for malformed expressions.
  [#447](https://github.com/gimli-rs/gimli/pull/447)

* dwarfdump: fix handling of Mach-O relocations.
  [#449](https://github.com/gimli-rs/gimli/pull/449)

### Changed

* Improved abbreviation parsing performance.
  [#451](https://github.com/gimli-rs/gimli/pull/451)

--------------------------------------------------------------------------------

## 0.19.0

Released 2019/07/08.

### Breaking changes

* Small API changes related to `.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`.
  [#425](https://github.com/gimli-rs/gimli/pull/425)

### Added

* Added `read::Attribute::exprloc_value` and `read::AttributeValue::exprloc_value`.
  [#422](https://github.com/gimli-rs/gimli/pull/422)

* Added support for writing `.debug_loc` and `.debug_loclists` sections.
  [#425](https://github.com/gimli-rs/gimli/pull/425)

* Added `-G` flag to `dwarfdump` example to display global offsets.
  [#427](https://github.com/gimli-rs/gimli/pull/427)

* Added `examples/simple.rs`.
  [#429](https://github.com/gimli-rs/gimli/pull/429)

### Fixed

* `write::LineProgram::from` no longer requires `DW_AT_name` or `DW_AT_comp_dir`
  attributes to be present in the unit DIE.
  [#430](https://github.com/gimli-rs/gimli/pull/430)

--------------------------------------------------------------------------------

## 0.18.0

Released 2019/04/25.

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

### Breaking changes

* For types which have an `Offset` type parameter, the default `Offset`
  has changed from `usize` to `R::Offset`.
  [#392](https://github.com/gimli-rs/gimli/pull/392)

* Added an `Offset` type parameter to the `read::Unit` type to allow variance.
  [#393](https://github.com/gimli-rs/gimli/pull/393)

* Changed the `UninitializedUnwindContext::initialize` method to borrow `self`,
  and return `&mut UnwindContext`. Deleted the `InitializedUnwindContext` type.
  [#395](https://github.com/gimli-rs/gimli/pull/395)

* Deleted the `UnwindSection` type parameters from the `CommonInformationEntry`,
  `FrameDescriptionEntry`, `UninitializedUnwindContext`,
  `UnwindContext`, and `UnwindTable` types.
  [#399](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/400)

* Reduced the number of lifetime parameters for the `UnwindTable` type.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Updated `fallible-iterator` to version 0.2.0.
  [#407](https://github.com/gimli-rs/gimli/pull/407)

* Added a parameter to the `Error::UnexpectedEof` enum variant.
  [#408](https://github.com/gimli-rs/gimli/pull/408)

### Added

* Update to 2018 edition.
  [#391](https://github.com/gimli-rs/gimli/pull/391)

* Added the `FrameDescriptionEntry::unwind_info_for_address` method.
  [#396](https://github.com/gimli-rs/gimli/pull/396)

* Added the `FrameDescriptionEntry::rows` method.
  [#396](https://github.com/gimli-rs/gimli/pull/396)

* Added the `EhHdrTable::unwind_info_for_address` method.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Added the `EhHdrTable::fde_for_address` method and deprecated the
  `EhHdrTable::lookup_and_parse` method.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Added the `EhHdrTable::pointer_to_offset` method.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Added the `UnwindSection::fde_for_address` method.
  [#396](https://github.com/gimli-rs/gimli/pull/396)

* Added the `UnwindSection::fde_from_offset` method.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Added the `UnwindSection::partial_fde_from_offset` method.
  [#400](https://github.com/gimli-rs/gimli/pull/400)

* Added the `Section::id` method.
  [#406](https://github.com/gimli-rs/gimli/pull/406)

* Added the `Dwarf::load` method, and corresponding methods for individual sections.
  [#406](https://github.com/gimli-rs/gimli/pull/406)

* Added the `Dwarf::borrow` method, and corresponding methods for individual sections.
  [#406](https://github.com/gimli-rs/gimli/pull/406)

* Added the `Dwarf::format_error` method.
  [#408](https://github.com/gimli-rs/gimli/pull/408)

* Added the `Dwarf::die_ranges` method.
  [#417](https://github.com/gimli-rs/gimli/pull/417)

* Added the `Dwarf::unit_ranges` method.
  [#417](https://github.com/gimli-rs/gimli/pull/417)

* Added support for writing `.debug_frame` and `.eh_frame` sections.
  [#412](https://github.com/gimli-rs/gimli/pull/412)
  [#419](https://github.com/gimli-rs/gimli/pull/419)

### Fixed

* The `code_alignment_factor` is now used when evaluating CFI instructions
  that advance the location.
  [#401](https://github.com/gimli-rs/gimli/pull/401)

* Fixed parsing of pointers encoded with `DW_EH_PE_funcrel`.
  [#402](https://github.com/gimli-rs/gimli/pull/402)

* Use the FDE address encoding from the augmentation when parsing `DW_CFA_set_loc`.
  [#403](https://github.com/gimli-rs/gimli/pull/403)

* Fixed setting of `.eh_frame` base addresses in dwarfdump.
  [#410](https://github.com/gimli-rs/gimli/pull/410)

## 0.17.0

Released 2019/02/21.

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](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/359)

* Added `Offset` type parameter to `AttributeValue`, `LineProgram`,
  `IncompleteLineProgram`, `CompleteLineProgram`, `LineRows`, `LineInstruction`,
  and `FileEntry`.
  [#324](https://github.com/gimli-rs/gimli/pull/324)

* Changed `FileEntry::path_name`, `FileEntry::directory`, and
  `LineProgramHeader::directory` to return an `AttributeValue` instead
  of a `Reader`.
  [#366](https://github.com/gimli-rs/gimli/pull/366)

* Renamed `FileEntry::last_modification` to `FileEntry::timestamp`
  and renamed `FileEntry::length` to `FileEntry::size`.
  [#366](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/364)

* Changed return type of `LocationLists::new` and `RangeLists::new`.
  [#370](https://github.com/gimli-rs/gimli/pull/370)

* Added parameters to `LocationsLists::locations` and `RangeLists::ranges`
  to support `.debug_addr`.
  [#358](https://github.com/gimli-rs/gimli/pull/358)

* Added more `AttributeValue` variants: `DebugAddrBase`, `DebugAddrIndex`,
  `DebugLocListsBase`, `DebugLocListsIndex`, `DebugRngListsBase`, `DebugRngListsIndex`,
  `DebugStrOffsetsBase`, `DebugStrOffsetsIndex`, `DebugLineStrRef`.
  [#358](https://github.com/gimli-rs/gimli/pull/358)

* Changed `AttributeValue::Data*` attributes to native endian integers instead
  of byte arrays.
  [#365](https://github.com/gimli-rs/gimli/pull/365)

* Replaced `EvaluationResult::TextBase` with
  `EvaluationResult::RequiresRelocatedAddress`. The handling of `TextBase`
  was incorrect.
  [#335](https://github.com/gimli-rs/gimli/pull/335)

* Added `EvaluationResult::IndexedAddress` for operations that require an
  address from `.debug_addr`.
  [#358](https://github.com/gimli-rs/gimli/pull/358)

* Added `Reader::read_slice`. Added a default implementation of
  `Reader::read_u8_array` which uses this.
  [#358](https://github.com/gimli-rs/gimli/pull/358)

### Added

* Added initial support for writing DWARF. This is targeted at supporting
  line number information only.
  [#340](https://github.com/gimli-rs/gimli/pull/340)
  [#344](https://github.com/gimli-rs/gimli/pull/344)
  [#346](https://github.com/gimli-rs/gimli/pull/346)
  [#361](https://github.com/gimli-rs/gimli/pull/361)
  [#362](https://github.com/gimli-rs/gimli/pull/362)
  [#365](https://github.com/gimli-rs/gimli/pull/365)
  [#368](https://github.com/gimli-rs/gimli/pull/368)
  [#382](https://github.com/gimli-rs/gimli/pull/382)

* Added `read` and `write` Cargo features. Both are enabled by default.
  [#343](https://github.com/gimli-rs/gimli/pull/343)

* Added support for reading DWARF 5 `.debug_line` and `.debug_line_str` sections.
  [#366](https://github.com/gimli-rs/gimli/pull/366)

* Added support for reading DWARF 5 `.debug_str_offsets` sections, including
  parsing `DW_FORM_strx*` attributes.
  [#358](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/352)
  [#380](https://github.com/gimli-rs/gimli/pull/380)
  [#381](https://github.com/gimli-rs/gimli/pull/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](https://github.com/gimli-rs/gimli/pull/325)

* Added architecture specific definitions for `Register` values and names.
  Changed dwarfdump to print them.
  [#328](https://github.com/gimli-rs/gimli/pull/328)

* Added support for reading relocatable DWARF sections.
  [#337](https://github.com/gimli-rs/gimli/pull/337)

* Added parsing of `DW_FORM_data16`.
  [#366](https://github.com/gimli-rs/gimli/pull/366)

### Fixed

* Fixed parsing DWARF 5 ranges with `start == end == 0`.
  [#323](https://github.com/gimli-rs/gimli/pull/323)

* Changed `LineRows` to be covariant in its `Reader` type parameter.
  [#324](https://github.com/gimli-rs/gimli/pull/324)

* Fixed handling of empty units in dwarfdump.
  [#330](https://github.com/gimli-rs/gimli/pull/330)

* Fixed `UnitHeader::length_including_self` for `Dwarf64`.
  [#342](https://github.com/gimli-rs/gimli/pull/342)

* Fixed parsing of `DW_CFA_set_loc`.
  [#355](https://github.com/gimli-rs/gimli/pull/355)

* Fixed handling of multiple headers in `.debug_loclists` and `.debug_rnglists`.
  [#370](https://github.com/gimli-rs/gimli/pull/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][]

[#305]: https://github.com/gimli-rs/gimli/pull/305
[#306]: https://github.com/gimli-rs/gimli/pull/306
[#310]: https://github.com/gimli-rs/gimli/pull/310
[#316]: https://github.com/gimli-rs/gimli/pull/316
[#319]: https://github.com/gimli-rs/gimli/pull/319

--------------------------------------------------------------------------------

## 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

* Various speed improvements for evaluating `.debug_line` line number
  programs. [#276][]

* The example `dwarfdump` clone is a [whole lot faster
  now][dwarfdump-faster]. [#282][] [#284][] [#285][]

### 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][]

[#271]: https://github.com/gimli-rs/gimli/issues/271
[#138]: https://github.com/gimli-rs/gimli/issues/138
[#274]: https://github.com/gimli-rs/gimli/issues/274
[#272]: https://github.com/gimli-rs/gimli/issues/272
[#276]: https://github.com/gimli-rs/gimli/issues/276
[#282]: https://github.com/gimli-rs/gimli/issues/282
[#285]: https://github.com/gimli-rs/gimli/issues/285
[#284]: https://github.com/gimli-rs/gimli/issues/284
[#288]: https://github.com/gimli-rs/gimli/issues/288
[#290]: https://github.com/gimli-rs/gimli/issues/290
[#293]: https://github.com/gimli-rs/gimli/issues/293
[#295]: https://github.com/gimli-rs/gimli/issues/295
[#298]: https://github.com/gimli-rs/gimli/issues/298
[#302]: https://github.com/gimli-rs/gimli/issues/302
[dwarfdump-faster]: https://robert.ocallahan.org/2018/03/speeding-up-dwarfdump-with-rust.html

--------------------------------------------------------------------------------

## 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][]


[#233]: https://github.com/gimli-rs/gimli/pull/233
[#234]: https://github.com/gimli-rs/gimli/pull/234
[#237]: https://github.com/gimli-rs/gimli/pull/237
[#241]: https://github.com/gimli-rs/gimli/pull/241
[#245]: https://github.com/gimli-rs/gimli/pull/245
[#250]: https://github.com/gimli-rs/gimli/pull/250
[#256]: https://github.com/gimli-rs/gimli/pull/256
[#257]: https://github.com/gimli-rs/gimli/pull/257

--------------------------------------------------------------------------------

## 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][]

[GitHub]: https://github.com/gimli-rs/gimli
[crates.io]: https://crates.io/crates/gimli
[contributing]: https://github.com/gimli-rs/gimli/blob/master/CONTRIBUTING.md
[easy]: https://github.com/gimli-rs/gimli/issues?q=is%3Aopen+is%3Aissue+label%3Aeasy
[#192]: https://github.com/gimli-rs/gimli/pull/192
[#193]: https://github.com/gimli-rs/gimli/pull/193
[#182]: https://github.com/gimli-rs/gimli/issues/182
[#208]: https://github.com/gimli-rs/gimli/pull/208
[#210]: https://github.com/gimli-rs/gimli/pull/210
[#216]: https://github.com/gimli-rs/gimli/pull/216
[#218]: https://github.com/gimli-rs/gimli/pull/218
[#219]: https://github.com/gimli-rs/gimli/pull/219
