1# `gimli` Change Log
2
3--------------------------------------------------------------------------------
4
5## 0.24.0
6
7Released 2021/05/01.
8
9### Breaking changes
10
11* Minimum Rust version increased to 1.42.0.
12
13* Added `read::Dwarf::debug_aranges`.
14  [#539](https://github.com/gimli-rs/gimli/pull/539)
15
16* Replaced `read::DebugAranges::items` with `read::DebugAranges::headers`.
17  [#539](https://github.com/gimli-rs/gimli/pull/539)
18
19* Added `read::Operation::Wasm*`.
20  [#546](https://github.com/gimli-rs/gimli/pull/546)
21
22* `read::LineRow::line` now returns `Option<NonZeroU64>`.
23  The `read::ColumnType::Column` variant now contains a `NonZeroU64`.
24  [#551](https://github.com/gimli-rs/gimli/pull/551)
25
26* Replaced `read::Dwarf::debug_str_sup` with `read::Dwarf::sup`.
27  Deleted `sup` parameter of `read::Dwarf::load`.
28  Added `read::Dwarf::load_sup`.
29  [#554](https://github.com/gimli-rs/gimli/pull/554)
30
31### Added
32
33* dwarfdump: Supplementary object file support.
34  [#552](https://github.com/gimli-rs/gimli/pull/552)
35
36### Changed
37
38* Support `DW_FORM_addrx*` for `DW_AT_low_pc`/`DW_AT_high_pc` in `read::Dwarf`.
39  [#541](https://github.com/gimli-rs/gimli/pull/541)
40
41* Performance improvement in `EndianReader`.
42  [#549](https://github.com/gimli-rs/gimli/pull/549)
43
44--------------------------------------------------------------------------------
45
46## 0.23.0
47
48Released 2020/10/27.
49
50### Breaking changes
51
52* Added more variants to `read::UnitType`.
53  Added `read::AttributeValue::DwoId`
54  [#521](https://github.com/gimli-rs/gimli/pull/521)
55
56* Replaced `CompilationUnitHeader` and `TypeUnitHeader` with `UnitHeader`.
57  Replaced `CompilationUnitHeadersIter` with `DebugInfoUnitHeadersIter`.
58  Replaced `TypeUnitHeadersIter` with `DebugTypesUnitHeadersIter`.
59  [#523](https://github.com/gimli-rs/gimli/pull/523)
60
61
62### Added
63
64* Added read support for split DWARF.
65  [#527](https://github.com/gimli-rs/gimli/pull/527)
66  [#529](https://github.com/gimli-rs/gimli/pull/529)
67
68* Added `read::Dwarf::attr_address`.
69  [#524](https://github.com/gimli-rs/gimli/pull/524)
70
71* Added read support for `DW_AT_GNU_addr_base` and `DW_AT_GNU_ranges_base`.
72  [#525](https://github.com/gimli-rs/gimli/pull/525)
73
74* dwarfdump: Display index values for attributes.
75  [#526](https://github.com/gimli-rs/gimli/pull/526)
76
77* Added `name_to_register`.
78  [#532](https://github.com/gimli-rs/gimli/pull/532)
79
80--------------------------------------------------------------------------------
81
82## 0.22.0
83
84Released 2020/07/03.
85
86### Breaking changes
87
88* Fixed `UnitHeader::size_of_header` for DWARF 5 units.
89  [#518](https://github.com/gimli-rs/gimli/pull/518)
90
91### Added
92
93* Added fuzz targets in CI.
94  [#512](https://github.com/gimli-rs/gimli/pull/512)
95
96* Added read support for `DW_OP_GNU_addr_index` and `DW_OP_GNU_const_index`.
97  [#516](https://github.com/gimli-rs/gimli/pull/516)
98
99* Added `.dwo` support to dwarfdump.
100  [#516](https://github.com/gimli-rs/gimli/pull/516)
101
102* Added `SectionId::dwo_name` and `Section::dwo_section_name`.
103  [#517](https://github.com/gimli-rs/gimli/pull/517)
104
105### Fixed
106
107* Fixed panic when reading `DW_FORM_indirect` combined with `DW_FORM_implicit_const`.
108  [#502](https://github.com/gimli-rs/gimli/pull/502)
109
110* Fixed panic for `read::Abbreviations::get(0)`.
111  [#505](https://github.com/gimli-rs/gimli/pull/505)
112
113* Fixed arithmetic overflow when reading `.debug_line`.
114  [#508](https://github.com/gimli-rs/gimli/pull/508)
115
116* Fixed arithmetic overflow when reading CFI.
117  [#509](https://github.com/gimli-rs/gimli/pull/509)
118
119* Fixed arithmetic overflow and division by zero when reading `.debug_aranges`.
120  [#510](https://github.com/gimli-rs/gimli/pull/510)
121
122* Don't return error from `read::Unit::new` when `DW_AT_name` or `DW_AT_comp_dir` is missing.
123  [#515](https://github.com/gimli-rs/gimli/pull/515)
124
125--------------------------------------------------------------------------------
126
127## 0.21.0
128
129Released 2020/05/12.
130
131### Breaking changes
132
133* Minimum Rust version increased to 1.38.0.
134
135* Replaced `read::Operation::Literal` with `Operation::UnsignedConstant` and `Operation::SignedConstant`.
136  Changed `read::Operation::Bra` and `read::Operation::Skip` to contain the target offset instead of the bytecode.
137  [#479](https://github.com/gimli-rs/gimli/pull/479)
138
139* Changed `write::Expression` to support references. Existing users can convert to use `Expression::raw`.
140  [#479](https://github.com/gimli-rs/gimli/pull/479)
141
142* Replaced `write::AttributeValue::AnyUnitEntryRef` with `DebugInfoRef`.
143  Renamed `write::AttributeValue::ThisUnitEntryRef` to `UnitRef`.
144  [#479](https://github.com/gimli-rs/gimli/pull/479)
145
146* Added more optional features: `endian-reader` and `fallible-iterator`.
147  [#495](https://github.com/gimli-rs/gimli/pull/495)
148  [#498](https://github.com/gimli-rs/gimli/pull/498)
149
150### Added
151
152* Added `read::Expression::operations`
153  [#479](https://github.com/gimli-rs/gimli/pull/479)
154
155### Fixed
156
157* Fixed newlines in `dwarfdump` example.
158  [#470](https://github.com/gimli-rs/gimli/pull/470)
159
160* Ignore zero terminators when reading `.debug_frame` sections.
161  [#486](https://github.com/gimli-rs/gimli/pull/486)
162
163* Increase the number of CFI register rules supported by `read::UnwindContext`.
164  [#487](https://github.com/gimli-rs/gimli/pull/487)
165
166* Fixed version handling and return register encoding when reading `.eh_frame` sections.
167  [#493](https://github.com/gimli-rs/gimli/pull/493)
168
169### Changed
170
171* Added `EhFrame` and `DebugFrame` to `write::Sections`.
172  [#492](https://github.com/gimli-rs/gimli/pull/492)
173
174* Improved performance of `write::LineProgram::generate_row`.
175  [#476](https://github.com/gimli-rs/gimli/pull/476)
176
177* Removed use of the `byteorder`, `arrayvec` and `smallvec` crates.
178  [#494](https://github.com/gimli-rs/gimli/pull/494)
179  [#496](https://github.com/gimli-rs/gimli/pull/496)
180  [#497](https://github.com/gimli-rs/gimli/pull/497)
181
182--------------------------------------------------------------------------------
183
184## 0.20.0
185
186Released 2020/01/11.
187
188### Breaking changes
189
190* Changed type of `DwTag`, `DwAt`, and `DwForm` constants.
191  [#451](https://github.com/gimli-rs/gimli/pull/451)
192
193* Added `read/write::AttributeValue::DebugMacroRef`, and returned where
194  required in `read::Attribute::value`. Added `SectionId::DebugMacro`.
195  [#454](https://github.com/gimli-rs/gimli/pull/454)
196
197* Deleted `alloc` feature, and fixed `no-std` builds with stable rust.
198  [#459](https://github.com/gimli-rs/gimli/pull/459)
199
200* Deleted `read::Error::description`, and changed `<read::Error as Display>`
201  to display what was previously the description.
202  [#462](https://github.com/gimli-rs/gimli/pull/462)
203
204### Added
205
206* Added GNU view constants.
207  [#434](https://github.com/gimli-rs/gimli/pull/434)
208
209* Added `read::EntriesRaw` for low level DIE parsing.
210  [#455](https://github.com/gimli-rs/gimli/pull/455)
211
212* Added `examples/simple-line.rs`.
213  [#460](https://github.com/gimli-rs/gimli/pull/460)
214
215### Fixed
216
217* Fixed handling of CFI augmentations without data.
218  [#438](https://github.com/gimli-rs/gimli/pull/438)
219
220* dwarfdump: fix panic for malformed expressions.
221  [#447](https://github.com/gimli-rs/gimli/pull/447)
222
223* dwarfdump: fix handling of Mach-O relocations.
224  [#449](https://github.com/gimli-rs/gimli/pull/449)
225
226### Changed
227
228* Improved abbreviation parsing performance.
229  [#451](https://github.com/gimli-rs/gimli/pull/451)
230
231--------------------------------------------------------------------------------
232
233## 0.19.0
234
235Released 2019/07/08.
236
237### Breaking changes
238
239* Small API changes related to `.debug_loc` and `.debug_loclists`:
240  added `read::RawLocListEntry::AddressOrOffsetPair` enum variant,
241  added `write::Sections::debug_loc/debug_loclists` public members,
242  and replaced `write::AttributeValue::LocationListsRef` with `LocationListRef`.
243  [#425](https://github.com/gimli-rs/gimli/pull/425)
244
245### Added
246
247* Added `read::Attribute::exprloc_value` and `read::AttributeValue::exprloc_value`.
248  [#422](https://github.com/gimli-rs/gimli/pull/422)
249
250* Added support for writing `.debug_loc` and `.debug_loclists` sections.
251  [#425](https://github.com/gimli-rs/gimli/pull/425)
252
253* Added `-G` flag to `dwarfdump` example to display global offsets.
254  [#427](https://github.com/gimli-rs/gimli/pull/427)
255
256* Added `examples/simple.rs`.
257  [#429](https://github.com/gimli-rs/gimli/pull/429)
258
259### Fixed
260
261* `write::LineProgram::from` no longer requires `DW_AT_name` or `DW_AT_comp_dir`
262  attributes to be present in the unit DIE.
263  [#430](https://github.com/gimli-rs/gimli/pull/430)
264
265--------------------------------------------------------------------------------
266
267## 0.18.0
268
269Released 2019/04/25.
270
271The focus of this release has been on improving support for reading CFI,
272and adding support for writing CFI.
273
274### Breaking changes
275
276* For types which have an `Offset` type parameter, the default `Offset`
277  has changed from `usize` to `R::Offset`.
278  [#392](https://github.com/gimli-rs/gimli/pull/392)
279
280* Added an `Offset` type parameter to the `read::Unit` type to allow variance.
281  [#393](https://github.com/gimli-rs/gimli/pull/393)
282
283* Changed the `UninitializedUnwindContext::initialize` method to borrow `self`,
284  and return `&mut UnwindContext`. Deleted the `InitializedUnwindContext` type.
285  [#395](https://github.com/gimli-rs/gimli/pull/395)
286
287* Deleted the `UnwindSection` type parameters from the `CommonInformationEntry`,
288  `FrameDescriptionEntry`, `UninitializedUnwindContext`,
289  `UnwindContext`, and `UnwindTable` types.
290  [#399](https://github.com/gimli-rs/gimli/pull/399)
291
292* Changed the signature of the `get_cie` callback parameter for various functions.
293  The signature now matches the `UnwindSection::cie_from_offset` method, so
294  that method can be used as the parameter.
295  [#400](https://github.com/gimli-rs/gimli/pull/400)
296
297* Reduced the number of lifetime parameters for the `UnwindTable` type.
298  [#400](https://github.com/gimli-rs/gimli/pull/400)
299
300* Updated `fallible-iterator` to version 0.2.0.
301  [#407](https://github.com/gimli-rs/gimli/pull/407)
302
303* Added a parameter to the `Error::UnexpectedEof` enum variant.
304  [#408](https://github.com/gimli-rs/gimli/pull/408)
305
306### Added
307
308* Update to 2018 edition.
309  [#391](https://github.com/gimli-rs/gimli/pull/391)
310
311* Added the `FrameDescriptionEntry::unwind_info_for_address` method.
312  [#396](https://github.com/gimli-rs/gimli/pull/396)
313
314* Added the `FrameDescriptionEntry::rows` method.
315  [#396](https://github.com/gimli-rs/gimli/pull/396)
316
317* Added the `EhHdrTable::unwind_info_for_address` method.
318  [#400](https://github.com/gimli-rs/gimli/pull/400)
319
320* Added the `EhHdrTable::fde_for_address` method and deprecated the
321  `EhHdrTable::lookup_and_parse` method.
322  [#400](https://github.com/gimli-rs/gimli/pull/400)
323
324* Added the `EhHdrTable::pointer_to_offset` method.
325  [#400](https://github.com/gimli-rs/gimli/pull/400)
326
327* Added the `UnwindSection::fde_for_address` method.
328  [#396](https://github.com/gimli-rs/gimli/pull/396)
329
330* Added the `UnwindSection::fde_from_offset` method.
331  [#400](https://github.com/gimli-rs/gimli/pull/400)
332
333* Added the `UnwindSection::partial_fde_from_offset` method.
334  [#400](https://github.com/gimli-rs/gimli/pull/400)
335
336* Added the `Section::id` method.
337  [#406](https://github.com/gimli-rs/gimli/pull/406)
338
339* Added the `Dwarf::load` method, and corresponding methods for individual sections.
340  [#406](https://github.com/gimli-rs/gimli/pull/406)
341
342* Added the `Dwarf::borrow` method, and corresponding methods for individual sections.
343  [#406](https://github.com/gimli-rs/gimli/pull/406)
344
345* Added the `Dwarf::format_error` method.
346  [#408](https://github.com/gimli-rs/gimli/pull/408)
347
348* Added the `Dwarf::die_ranges` method.
349  [#417](https://github.com/gimli-rs/gimli/pull/417)
350
351* Added the `Dwarf::unit_ranges` method.
352  [#417](https://github.com/gimli-rs/gimli/pull/417)
353
354* Added support for writing `.debug_frame` and `.eh_frame` sections.
355  [#412](https://github.com/gimli-rs/gimli/pull/412)
356  [#419](https://github.com/gimli-rs/gimli/pull/419)
357
358### Fixed
359
360* The `code_alignment_factor` is now used when evaluting CFI instructions
361  that advance the location.
362  [#401](https://github.com/gimli-rs/gimli/pull/401)
363
364* Fixed parsing of pointers encoded with `DW_EH_PE_funcrel`.
365  [#402](https://github.com/gimli-rs/gimli/pull/402)
366
367* Use the FDE address encoding from the augmentation when parsing `DW_CFA_set_loc`.
368  [#403](https://github.com/gimli-rs/gimli/pull/403)
369
370* Fixed setting of `.eh_frame` base addresses in dwarfdump.
371  [#410](https://github.com/gimli-rs/gimli/pull/410)
372
373## 0.17.0
374
375Released 2019/02/21.
376
377The focus of this release has been on improving DWARF 5 support, and
378adding support for writing DWARF.
379
380### Breaking changes
381
382* Changed register values to a `Register` type instead of `u8`/`u64`.
383  [#328](https://github.com/gimli-rs/gimli/pull/328)
384
385* Replaced `BaseAddresses::set_cfi` with `set_eh_frame_hdr` and `set_eh_frame`.
386  Replaced `BaseAddresses::set_data` with `set_got`.
387  You should now use the same `BaseAddresses` value for parsing both
388  `.eh_frame` and `.eh_frame_hdr`.
389  [#351](https://github.com/gimli-rs/gimli/pull/351)
390
391* Renamed many types and functions related to `.debug_line`.
392  Renamed `LineNumberProgram` to `LineProgram`.
393  Renamed `IncompleteLineNumberProgram` to `IncompleteLineProgram`.
394  Renamed `CompleteLineNumberProgram` to `CompleteLineProgram`.
395  Renamed `LineNumberProgramHeader` to `LineProgramHeader`.
396  Renamed `LineNumberRow` to `LineRow`.
397  Renamed `StateMachine` to `LineRows`.
398  Renamed `Opcode` to `LineInstruction`.
399  Renamed `OpcodesIter` to `LineInstructions`.
400  Renamed `LineNumberSequence` to `LineSequence`.
401  [#359](https://github.com/gimli-rs/gimli/pull/359)
402
403* Added `Offset` type parameter to `AttributeValue`, `LineProgram`,
404  `IncompleteLineProgram`, `CompleteLineProgram`, `LineRows`, `LineInstruction`,
405  and `FileEntry`.
406  [#324](https://github.com/gimli-rs/gimli/pull/324)
407
408* Changed `FileEntry::path_name`, `FileEntry::directory`, and
409  `LineProgramHeader::directory` to return an `AttributeValue` instead
410  of a `Reader`.
411  [#366](https://github.com/gimli-rs/gimli/pull/366)
412
413* Renamed `FileEntry::last_modification` to `FileEntry::timestamp`
414  and renamed `FileEntry::length` to `FileEntry::size`.
415  [#366](https://github.com/gimli-rs/gimli/pull/366)
416
417* Added an `Encoding` type. Changed many functions that previously accepted
418  `Format`, version or address size parameters to accept an `Encoding`
419  parameter instead.
420  Notable changes are `LocationLists::locations`, `RangeLists::ranges`,
421  and `Expression::evaluation`.
422  [#364](https://github.com/gimli-rs/gimli/pull/364)
423
424* Changed return type of `LocationLists::new` and `RangeLists::new`.
425  [#370](https://github.com/gimli-rs/gimli/pull/370)
426
427* Added parameters to `LocationsLists::locations` and `RangeLists::ranges`
428  to support `.debug_addr`.
429  [#358](https://github.com/gimli-rs/gimli/pull/358)
430
431* Added more `AttributeValue` variants: `DebugAddrBase`, `DebugAddrIndex`,
432  `DebugLocListsBase`, `DebugLocListsIndex`, `DebugRngListsBase`, `DebugRngListsIndex`,
433  `DebugStrOffsetsBase`, `DebugStrOffsetsIndex`, `DebugLineStrRef`.
434  [#358](https://github.com/gimli-rs/gimli/pull/358)
435
436* Changed `AttributeValue::Data*` attributes to native endian integers instead
437  of byte arrays.
438  [#365](https://github.com/gimli-rs/gimli/pull/365)
439
440* Replaced `EvaluationResult::TextBase` with
441  `EvaluationResult::RequiresRelocatedAddress`. The handling of `TextBase`
442  was incorrect.
443  [#335](https://github.com/gimli-rs/gimli/pull/335)
444
445* Added `EvaluationResult::IndexedAddress` for operations that require an
446  address from `.debug_addr`.
447  [#358](https://github.com/gimli-rs/gimli/pull/358)
448
449* Added `Reader::read_slice`. Added a default implementation of
450  `Reader::read_u8_array` which uses this.
451  [#358](https://github.com/gimli-rs/gimli/pull/358)
452
453### Added
454
455* Added initial support for writing DWARF. This is targeted at supporting
456  line number information only.
457  [#340](https://github.com/gimli-rs/gimli/pull/340)
458  [#344](https://github.com/gimli-rs/gimli/pull/344)
459  [#346](https://github.com/gimli-rs/gimli/pull/346)
460  [#361](https://github.com/gimli-rs/gimli/pull/361)
461  [#362](https://github.com/gimli-rs/gimli/pull/362)
462  [#365](https://github.com/gimli-rs/gimli/pull/365)
463  [#368](https://github.com/gimli-rs/gimli/pull/368)
464  [#382](https://github.com/gimli-rs/gimli/pull/382)
465
466* Added `read` and `write` Cargo features. Both are enabled by default.
467  [#343](https://github.com/gimli-rs/gimli/pull/343)
468
469* Added support for reading DWARF 5 `.debug_line` and `.debug_line_str` sections.
470  [#366](https://github.com/gimli-rs/gimli/pull/366)
471
472* Added support for reading DWARF 5 `.debug_str_offsets` sections, including
473  parsing `DW_FORM_strx*` attributes.
474  [#358](https://github.com/gimli-rs/gimli/pull/358)
475
476* Added support for reading DWARF 5 `.debug_addr` sections, including parsing
477  `DW_FORM_addrx*` attributes and evaluating `DW_OP_addrx` and `DW_OP_constx`
478  operations.
479  [#358](https://github.com/gimli-rs/gimli/pull/358)
480
481* Added support for reading DWARF 5 indexed addresses and offsets in
482  `.debug_loclists` and `.debug_rnglists`, including parsing `DW_FORM_rnglistx`
483  and `DW_FORM_loclistx` attributes.
484  [#358](https://github.com/gimli-rs/gimli/pull/358)
485
486* Added high level `Dwarf` and `Unit` types. Existing code does not need to
487  switch to using these types, but doing so will make DWARF 5 support simpler.
488  [#352](https://github.com/gimli-rs/gimli/pull/352)
489  [#380](https://github.com/gimli-rs/gimli/pull/380)
490  [#381](https://github.com/gimli-rs/gimli/pull/381)
491
492* Added `EhFrame::set_address_size` and `DebugFrame::set_address_size` methods
493  to allow parsing non-native CFI sections. The default address size is still
494  the native size.
495  [#325](https://github.com/gimli-rs/gimli/pull/325)
496
497* Added architecture specific definitions for `Register` values and names.
498  Changed dwarfdump to print them.
499  [#328](https://github.com/gimli-rs/gimli/pull/328)
500
501* Added support for reading relocatable DWARF sections.
502  [#337](https://github.com/gimli-rs/gimli/pull/337)
503
504* Added parsing of `DW_FORM_data16`.
505  [#366](https://github.com/gimli-rs/gimli/pull/366)
506
507### Fixed
508
509* Fixed parsing DWARF 5 ranges with `start == end == 0`.
510  [#323](https://github.com/gimli-rs/gimli/pull/323)
511
512* Changed `LineRows` to be covariant in its `Reader` type parameter.
513  [#324](https://github.com/gimli-rs/gimli/pull/324)
514
515* Fixed handling of empty units in dwarfdump.
516  [#330](https://github.com/gimli-rs/gimli/pull/330)
517
518* Fixed `UnitHeader::length_including_self` for `Dwarf64`.
519  [#342](https://github.com/gimli-rs/gimli/pull/342)
520
521* Fixed parsing of `DW_CFA_set_loc`.
522  [#355](https://github.com/gimli-rs/gimli/pull/355)
523
524* Fixed handling of multiple headers in `.debug_loclists` and `.debug_rnglists`.
525  [#370](https://github.com/gimli-rs/gimli/pull/370)
526
527--------------------------------------------------------------------------------
528
529## 0.16.1
530
531Released 2018/08/28.
532
533### Added
534
535* Added `EhFrameHdr::lookup_and_parse`. [#316][]
536* Added support for `DW_CFA_GNU_args_size`. [#319][]
537
538### Fixed
539
540* Implement `Send`/`Sync` for `SubRange`. [#305][]
541* Fixed `alloc` support on nightly. [#306][] [#310][]
542
543[#305]: https://github.com/gimli-rs/gimli/pull/305
544[#306]: https://github.com/gimli-rs/gimli/pull/306
545[#310]: https://github.com/gimli-rs/gimli/pull/310
546[#316]: https://github.com/gimli-rs/gimli/pull/316
547[#319]: https://github.com/gimli-rs/gimli/pull/319
548
549--------------------------------------------------------------------------------
550
551## 0.16.0
552
553Released 2018/06/01.
554
555### Added
556
557* Added support for building in `#![no_std]` environments, when the `alloc`
558  crate is available. Disable the "std" feature and enable the "alloc"
559  feature. [#138][] [#271][]
560
561* Added support for DWARF 5 `.debug_rnglists` and `.debug_loclists`
562  sections. [#272][]
563
564* Added support for DWARF 5 `DW_FORM_ref_sup` and `DW_FORM_strp_sup` attribute
565  forms. [#288][]
566
567* Added support for DWARF 5 operations on typed values. [#293][]
568
569* A `dwarf-validate` example program that checks the integrity of the given
570  DWARF and its references between sections. [#290][]
571
572* Added the `EndianReader<T>` type, an easy way to define a custom `Reader`
573  implementation with a reference to a generic buffer of bytes and an associated
574  endianity. [#298][] [#302][]
575
576### Changed
577
578* Various speed improvements for evaluating `.debug_line` line number
579  programs. [#276][]
580
581* The example `dwarfdump` clone is a [whole lot faster
582  now][dwarfdump-faster]. [#282][] [#284][] [#285][]
583
584### Deprecated
585
586* `EndianBuf` has been renamed to `EndianSlice`, use that name instead. [#295][]
587
588### Fixed
589
590* Evaluating the `DW_CFA_restore_state` opcode properly maintains the current
591  location. Previously it would incorrectly restore the old location when
592  popping from evaluation stack. [#274][]
593
594[#271]: https://github.com/gimli-rs/gimli/issues/271
595[#138]: https://github.com/gimli-rs/gimli/issues/138
596[#274]: https://github.com/gimli-rs/gimli/issues/274
597[#272]: https://github.com/gimli-rs/gimli/issues/272
598[#276]: https://github.com/gimli-rs/gimli/issues/276
599[#282]: https://github.com/gimli-rs/gimli/issues/282
600[#285]: https://github.com/gimli-rs/gimli/issues/285
601[#284]: https://github.com/gimli-rs/gimli/issues/284
602[#288]: https://github.com/gimli-rs/gimli/issues/288
603[#290]: https://github.com/gimli-rs/gimli/issues/290
604[#293]: https://github.com/gimli-rs/gimli/issues/293
605[#295]: https://github.com/gimli-rs/gimli/issues/295
606[#298]: https://github.com/gimli-rs/gimli/issues/298
607[#302]: https://github.com/gimli-rs/gimli/issues/302
608[dwarfdump-faster]: https://robert.ocallahan.org/2018/03/speeding-up-dwarfdump-with-rust.html
609
610--------------------------------------------------------------------------------
611
612## 0.15.0
613
614Released 2017/12/01.
615
616### Added
617
618* Added the `EndianBuf::to_string()` method. [#233][]
619
620* Added more robust error handling in our example `dwarfdump` clone. [#234][]
621
622* Added `FrameDescriptionEntry::initial_address` method. [#237][]
623
624* Added `FrameDescriptionEntry::len` method. [#237][]
625
626* Added the `FrameDescriptionEntry::entry_len` method. [#241][]
627
628* Added the `CommonInformationEntry::offset` method. [#241][]
629
630* Added the `CommonInformationEntry::entry_len` method. [#241][]
631
632* Added the `CommonInformationEntry::version` method. [#241][]
633
634* Added the `CommonInformationEntry::augmentation` method. [#241][]
635
636* Added the `CommonInformationEntry::code_alignment_factor` method. [#241][]
637
638* Added the `CommonInformationEntry::data_alignment_factor` method. [#241][]
639
640* Added the `CommonInformationEntry::return_address_register` method. [#241][]
641
642* Added support for printing `.eh_frame` sections to our example `dwarfdump`
643  clone. [#241][]
644
645* Added support for parsing the `.eh_frame_hdr` section. On Linux, the
646  `.eh_frame_hdr` section provides a pointer to the already-mapped-in-memory
647  `.eh_frame` data, so that it doesn't need to be duplicated, and a binary
648  search table of its entries for faster unwinding information lookups. [#250][]
649
650* Added support for parsing DWARF 5 compilation unit headers. [#257][]
651
652* Added support for DWARF 5's `DW_FORM_implicit_const`. [#257][]
653
654### Changed
655
656* Unwinding methods now give ownership of the unwinding context back to the
657  caller if errors are encountered, not just on the success path. This allows
658  recovering from errors in signal-safe code, where constructing a new unwinding
659  context is not an option because it requires allocation. This is a **breaking
660  change** affecting `UnwindSection::unwind_info_for_address` and
661  `UninitializedUnwindContext::initialize`. [#241][]
662
663* `CfaRule` and `RegisterRule` now expose their `DW_OP` expressions as
664  `Expression`. This is a minor **breaking change**. [#241][]
665
666* The `Error::UnknownVersion` variant now contains the unknown version
667  number. This is a minor **breaking change**. [#245][]
668
669* `EvaluationResult::RequiresEntryValue` requires an `Expression` instead of a
670  `Reader` now. This is a minor **breaking change**. [#256][]
671
672
673[#233]: https://github.com/gimli-rs/gimli/pull/233
674[#234]: https://github.com/gimli-rs/gimli/pull/234
675[#237]: https://github.com/gimli-rs/gimli/pull/237
676[#241]: https://github.com/gimli-rs/gimli/pull/241
677[#245]: https://github.com/gimli-rs/gimli/pull/245
678[#250]: https://github.com/gimli-rs/gimli/pull/250
679[#256]: https://github.com/gimli-rs/gimli/pull/256
680[#257]: https://github.com/gimli-rs/gimli/pull/257
681
682--------------------------------------------------------------------------------
683
684## 0.14.0
685
686Released 2017/08/08.
687
688### Added
689
690* All `pub` types now `derive(Hash)`. [#192][]
691
692* All the constants from DWARF 5 are now defined. [#193][]
693
694* Added support for the `DW_OP_GNU_parameter_ref` GNU extension to parsing and
695  evaluation DWARF opcodes. [#208][]
696
697* Improved LEB128 parsing performance. [#216][]
698
699* Improved `.debug_{aranges,pubnames,pubtypes}` parsing performance. [#218][]
700
701* Added the ability to choose endianity dynamically at run time, rather than
702  only statically at compile time. [#219][]
703
704### Changed
705
706* The biggest change of this release is that `gimli` no longer requires the
707  object file's section be fully loaded into memory. This enables using `gimli`
708  on 32 bit platforms where there often isn't enough contiguous virtual memory
709  address space to load debugging information into. The default behavior is
710  still geared for 64 bit platforms, where address space overfloweth, and you
711  can still load the whole sections of the object file (or the entire object
712  file) into memory. This is abstracted over with the `gimli::Reader`
713  trait. This manifests as small (but many) breaking changes to much of the
714  public API. [#182][]
715
716### Fixed
717
718* The `DW_END_*` constants for defining endianity of a compilation unit were
719  previously incorrect. [#193][]
720
721* The `DW_OP_addr` opcode is relative to the base address of the `.text` section
722  of the binary, but we were incorrectly treating it as an absolute value. [#210][]
723
724[GitHub]: https://github.com/gimli-rs/gimli
725[crates.io]: https://crates.io/crates/gimli
726[contributing]: https://github.com/gimli-rs/gimli/blob/master/CONTRIBUTING.md
727[easy]: https://github.com/gimli-rs/gimli/issues?q=is%3Aopen+is%3Aissue+label%3Aeasy
728[#192]: https://github.com/gimli-rs/gimli/pull/192
729[#193]: https://github.com/gimli-rs/gimli/pull/193
730[#182]: https://github.com/gimli-rs/gimli/issues/182
731[#208]: https://github.com/gimli-rs/gimli/pull/208
732[#210]: https://github.com/gimli-rs/gimli/pull/210
733[#216]: https://github.com/gimli-rs/gimli/pull/216
734[#218]: https://github.com/gimli-rs/gimli/pull/218
735[#219]: https://github.com/gimli-rs/gimli/pull/219
736