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