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