# Unreleased # 0.15.1 – 2024-03-19 ## New Features - [add constructor for `InterruptStackFrameValue`](https://github.com/rust-osdev/x86_64/pull/467) - [add `Cr3::write_pcid_no_flush`](https://github.com/rust-osdev/x86_64/pull/472) ## Fixes - [properly jump the address gap in CleanUp](https://github.com/rust-osdev/x86_64/pull/469) ## Other Improvements - [added help on update_flags to get flags](https://github.com/rust-osdev/x86_64/pull/465) - [expose DEBUG_STR more directly](https://github.com/rust-osdev/x86_64/pull/471) # 0.15.0 – 2024-03-04 ## Breaking changes - [replace software_interrupt! macro with generic function](https://github.com/rust-osdev/x86_64/pull/259) - [Use SegmentSelector in InterruptStackFrame](https://github.com/rust-osdev/x86_64/pull/263) - [add `InvalidStarSegmentSelectors` error](https://github.com/rust-osdev/x86_64/pull/317) - [add `PcidTooBig` error](https://github.com/rust-osdev/x86_64/pull/316) - [implement `Index` for IDT instead of `Index`](https://github.com/rust-osdev/x86_64/pull/319) - [change `cpu_flags`'s type to `RFlags`](https://github.com/rust-osdev/x86_64/pull/324) - [fix `load_tss` and `GlobalDescriptorTable`](https://github.com/rust-osdev/x86_64/pull/323) - [add an immutable getter for the level 4 page table](https://github.com/rust-osdev/x86_64/pull/327) - [make `Cr2::read` return a result](https://github.com/rust-osdev/x86_64/pull/335) - [remove `external_asm` and `inline_asm` features](https://github.com/rust-osdev/x86_64/pull/345) - [Allow the GDT to be of any length](https://github.com/rust-osdev/x86_64/pull/360) - [Remove software_interrupt! macro](https://github.com/rust-osdev/x86_64/pull/363) - [Remove usize trait impls](https://github.com/rust-osdev/x86_64/pull/364) - [Remove deprecated functions/flags](https://github.com/rust-osdev/x86_64/pull/368) - [VirtAddr improvements](https://github.com/rust-osdev/x86_64/pull/370) - [Add structures::gdt::Entry type](https://github.com/rust-osdev/x86_64/pull/380) - [Allow GDT to be loaded with shared reference](https://github.com/rust-osdev/x86_64/pull/381) - [seal off the `PageSize` trait](https://github.com/rust-osdev/x86_64/pull/404) - [idt: Fixup Options structure and cleanup set_handler_fn](https://github.com/rust-osdev/x86_64/pull/226) ## New Features - [implement `Step` for `PageTableIndex`](https://github.com/rust-osdev/x86_64/pull/464) ## Fixes - [fix typo in docs](https://github.com/rust-osdev/x86_64/pull/265) - [activate `feature(asm_const)`](https://github.com/rust-osdev/x86_64/pull/320) - [gdt: Check that MAX is in range](https://github.com/rust-osdev/x86_64/pull/365) ## Other Improvements - [allow inlining Step methods](https://github.com/rust-osdev/x86_64/pull/464) - [constify more `Page` and `PageTableIndex` functions](https://github.com/rust-osdev/x86_64/pull/464) # 0.14.12 – 2023-02-09 ## New Features - [Add `HandlerFuncType` trait](https://github.com/rust-osdev/x86_64/pull/439) - [Support `VirtAddr::from_ptr` for `T: ?Sized`](https://github.com/rust-osdev/x86_64/pull/442) - [Expose `Cr3::write_raw`](https://github.com/rust-osdev/x86_64/pull/445) ## Fixes - [Use synchronizing assembly for `interrupts::enable`/`disable`](https://github.com/rust-osdev/x86_64/pull/440) ## Other Improvements - [Optimize `Page::from_page_table_indices`](https://github.com/rust-osdev/x86_64/pull/456) # 0.14.11 – 2022-09-15 ## New Features - [Add missing IDT entries #CP and #HV`](https://github.com/rust-osdev/x86_64/pull/387) - [Adding next_higher_level to PageLevelIndex](https://github.com/rust-osdev/x86_64/pull/400) - [Adding `is_empty` to PageTable](https://github.com/rust-osdev/x86_64/pull/399) - [Add `Descriptor::tss_segment_unchecked`](https://github.com/rust-osdev/x86_64/pull/428) - [Add the `iretq` function to the `InterruptStackFrameValue` struct.](https://github.com/rust-osdev/x86_64/pull/431) - [add `flush_broadcast` and `tlbsync` functions](https://github.com/rust-osdev/x86_64/pull/403) ## Fixes - [Change Star::write() to use checked subtractions](https://github.com/rust-osdev/x86_64/pull/422) - [add workaround for recursive page tables with recursive index 511](https://github.com/rust-osdev/x86_64/pull/425) - [Fix off-by-one in documentation](https://github.com/rust-osdev/x86_64/pull/427) - [Fix misc doc typos](https://github.com/rust-osdev/x86_64/pull/432) - [add compiler fences to enable and disable](https://github.com/rust-osdev/x86_64/pull/436) ## Other Improvements - [set repr to transparent for various types](https://github.com/rust-osdev/x86_64/pull/402) - [Remove unused `doc_cfg` feature](https://github.com/rust-osdev/x86_64/pull/408) - [Enable `doc_auto_cfg` on `docs.rs` builds](https://github.com/rust-osdev/x86_64/pull/407) - [Add Descriptor::dpl const method and use it in GDT construction](https://github.com/rust-osdev/x86_64/pull/410) - [Bump bitflags to 2.3.2](https://github.com/rust-osdev/x86_64/pull/426) - [Add `inline` attribute to segment functions](https://github.com/rust-osdev/x86_64/pull/430) # 0.14.10 – 2022-07-10 ## New Features - [Add `registers::debug`](https://github.com/rust-osdev/x86_64/pull/286) - [Provide null segment selector as associated constant on `SegmentSelector`](https://github.com/rust-osdev/x86_64/pull/373) - [Add getters for the page table frame mapping](https://github.com/rust-osdev/x86_64/pull/385) ## Fixes - [Fix align functions](https://github.com/rust-osdev/x86_64/pull/375) - [Correct wrong comment](https://github.com/rust-osdev/x86_64/pull/374) ## Other Improvements - [Cleanup Segment macros](https://github.com/rust-osdev/x86_64/pull/376) - [Update comment and docs](https://github.com/rust-osdev/x86_64/pull/382) # 0.14.9 - 2022-03-31 ## New Features - Address in `VirtAddrNotValid` and `PhysAddrNotValid` is now public ([#340](https://github.com/rust-osdev/x86_64/pull/340)). - This field now contains the whole invalid address ([#347](https://github.com/rust-osdev/x86_64/pull/347)). - Remove all uses of external assembly ([#343](https://github.com/rust-osdev/x86_64/pull/343)) - `external_asm` and `inline_asm` features are deprecated and now have no effect. - `instructions` feature (on by default) now requires Rust 1.59 - Specific MSRV now noted in `README` ([#355](https://github.com/rust-osdev/x86_64/pull/355)) - Implement `core::iter::Step` for `VirtAddr` and `Page` ([#342](https://github.com/rust-osdev/x86_64/pull/342)) - This trait is only available on nightly. - Gated behind `step_trait` feature flag - Add `UCet` and `SCet` registers ([#349](https://github.com/rust-osdev/x86_64/pull/349)) - Use [`rustversion`](https://crates.io/crates/rustversion) to mark certain functions `const fn` on Rust 1.61 ([#353](https://github.com/rust-osdev/x86_64/pull/353)) - `Entry::handler_addr()` is now public ([#354](https://github.com/rust-osdev/x86_64/pull/354)) - Increase packed structure alignment ([#362](https://github.com/rust-osdev/x86_64/pull/362)) - Make more address methods `const fn` ([#369](https://github.com/rust-osdev/x86_64/pull/369)) - `VirtAddr::as_ptr()` - `VirtAddr::as_mut_ptr()` - `PhysAddr::new()` - `PhysAddr::try_new()` ## Bug fixes and Documentation - Fixed overflow bug in PageRangeInclusive ([#351](https://github.com/rust-osdev/x86_64/pull/351)) - Remove stabilized `const_fn_fn_ptr_basics` and `const_fn_trait_bound` features ([#352](https://github.com/rust-osdev/x86_64/pull/352)) - Don't set `nomem` in `load_tss` ([#358](https://github.com/rust-osdev/x86_64/pull/358)) - Correctly initialize TSS's IOPB to be empty ([#357](https://github.com/rust-osdev/x86_64/pull/357)) - Improve `GlobalDescriptorTable::add_entry` error handling ([#361](https://github.com/rust-osdev/x86_64/pull/361)) - Update `tss_segment` documentation ([#366](https://github.com/rust-osdev/x86_64/pull/366)) # 0.14.8 – 2022-02-03 - Add `Cr2::read_raw` ([#334](https://github.com/rust-osdev/x86_64/pull/334)) - Add support for `MXCSR` register ([#336](https://github.com/rust-osdev/x86_64/pull/336)) # 0.14.7 – 2021-12-18 - fix: build error on the latest nightly ([#329](https://github.com/rust-osdev/x86_64/pull/329)) - add `set_general_handler` macro ([#285](https://github.com/rust-osdev/x86_64/pull/285)) - Derive common traits for number, range and enum types ([#315](https://github.com/rust-osdev/x86_64/pull/315)) - Add the VMM Communication Exception (`#VC`) to the `InterruptDescriptorTable` ([#313](https://github.com/rust-osdev/x86_64/pull/313)) - fix: enable manipulation of `InterruptStackFrame` ([#312](https://github.com/rust-osdev/x86_64/pull/312)) - fix docs for `page_table_index` ([#318](https://github.com/rust-osdev/x86_64/pull/318)) - Remove redundant alignment check ([#314](https://github.com/rust-osdev/x86_64/pull/314)) - fix(idt): fix panic messages for `index` and `#VC` ([#321](https://github.com/rust-osdev/x86_64/pull/321)) - remove `const_assert!` in favor of std's `assert!` ([#326](https://github.com/rust-osdev/x86_64/pull/326)) - Move bootloader integration test to separate CI job ([#330](https://github.com/rust-osdev/x86_64/pull/330)) # 0.14.6 – 2021-09-20 - New `registers::segmentation` module ([#309](https://github.com/rust-osdev/x86_64/pull/309)), containing: - `instructions::segmentation::{Segment, Segment64, CS, DS, ES, FS, GS, SS}` - `structures::gdt::SegmentSelector` - Old locations still re-export all the types, so this is not a breaking change. - Fixes build so that `cargo doc --no-default-features` succeeds. # 0.14.5 – 2021-09-04 - Add `ExceptionVector` enum and additional flags to `PageFaultErrorCode` ([#303](https://github.com/rust-osdev/x86_64/pull/303)) - Add `clean_up` and `clean_up_with_filter` methods to deallocate unused page tables ([#264](https://github.com/rust-osdev/x86_64/pull/264)) - Rename some XCr0 and CR4 flags (#[275](https://github.com/rust-osdev/x86_64/pull/275)) - Expose `MapperFlush::new` and `MapperFlushAll::new` constructor functions ([#296](https://github.com/rust-osdev/x86_64/pull/296)) - Use `#[cfg(doc)]` instead of docs.rs-specific cfg flag (#[287](https://github.com/rust-osdev/x86_64/pull/287)) - Some documentation updates: - Update segment register references in `GDT::load*` method to non-deprecated methods ([#301](https://github.com/rust-osdev/x86_64/pull/301)) - Remove a panic note ([#300](https://github.com/rust-osdev/x86_64/pull/300)) - Update `bit_field` dependency ([#306](https://github.com/rust-osdev/x86_64/pull/306)) # 0.14.4 – 2021-07-19 - Add `instructions::tables::sgdt` ([#279](https://github.com/rust-osdev/x86_64/pull/279)) - Improve control register bits ([#273](https://github.com/rust-osdev/x86_64/pull/273)) - Add `Cr0` bits: `EXTENSION_TYPE` (ET) - Add `Cr4` bits: - `KEY_LOCKER` (KL) - `CONTROL_FLOW_ENFORCEMENT` (CET) - `PROTECTION_KEY_SUPERVISOR` (PKS) - Add `XCr0` bits: `BNDREG`, `BNDCSR`, `OPMASK`, `ZMM_HI256`, `HI16_ZMM` - Add consistency checks for `XCr0` bits - Add `SelectorErrorCode` for parsing interrupt error codes from `#TS`, `#NP`, `#SS`, and `#GP` ([#274](https://github.com/rust-osdev/x86_64/pull/274)) - Make `addr::{align_up, align_down}` const ([#270](https://github.com/rust-osdev/x86_64/pull/270)) - Make `structures::idt` available on stable Rust ([#271](https://github.com/rust-osdev/x86_64/pull/271)) - Use dummy types for the `HandlerFunc`s if the `"abi_x86_interrupt"` feature is disabled - Add unsafe `set_handler_addr` that just takes a `VirtAddr` - Add common abstractions for x86 Segments ([#258](https://github.com/rust-osdev/x86_64/pull/258)) - Add `SS`, `CS`, `DS`, `ES`, `FS`, `GS` marker types - Add `Segment` trait for reading/writing the segment register - Add `Segment64` trait for reading/writing the segment base - Add `GS::swap()` - Deprecate the corresponding free functions: - `cs`, `set_cs` - `swap_gs` - `load_{ss,ds,es,fs,gs}` - `{wr,rd}{fs,gs}base` - Bug fixes: - Corrected documentation typo ([#278](https://github.com/rust-osdev/x86_64/pull/278)) - Avoided off-by-one error in `GlobalDescriptorTable::from_raw_slice` when `"const_fn"` is not enabled ([#269](https://github.com/rust-osdev/x86_64/pull/269)) - Specify `sysv64` as the calling convention for the `"external_asm"` functions ([#267](https://github.com/rust-osdev/x86_64/pull/267)) # 0.14.3 – 2021-05-14 - Make the following types aliases of the new `PortGeneric` type ([#248](https://github.com/rust-osdev/x86_64/pull/248)): - `Port = PortGeneric` - `PortReadOnly = PortGeneric` - `PortWriteOnly = PortGeneric` - The following methods no longer require the `nightly` feature to be `const fn`s ([#255](https://github.com/rust-osdev/x86_64/pull/255)): - `PageTable::new` - `GlobalDescriptorTable::from_raw_slice` - `MappedFrame::{start_address, size}` - `Page::p1_index` - Add `Debug` implementation for `InterruptDescriptorTable` ([#253](https://github.com/rust-osdev/x86_64/pull/253)) - Improve `Debug` implementations for `Entry` and `EntryOptions` # 0.14.2 – 2021-05-13 - Multiple improvements to assembly code ([#251](https://github.com/rust-osdev/x86_64/pull/251)) - Added `external_asm` implementations for `bochs_breakpoint` and `XCr0` - Updated `options` for `asm!` blocks (to improve performance) - Updated docs to use [`doc_cfg`](https://doc.rust-lang.org/unstable-book/language-features/doc-cfg.html) # 0.14.1 – 2021-05-06 - Use new `const_fn_trait_bound` feature to fix build on latest nightly ([#250](https://github.com/rust-osdev/x86_64/pull/250)) - _Attention:_ The `const_fn` feature now requires at least Rust nightly `2021-05-06`. - Add support for `sidt` instruction ([#246](https://github.com/rust-osdev/x86_64/pull/246)) - Fix Debug and PartialEq implementations for IDT entry type ([#249](https://github.com/rust-osdev/x86_64/pull/249)) - Looser trait bounds for Port types ([#247](https://github.com/rust-osdev/x86_64/pull/247)) # 0.14.0 – 2021-04-11 - **Breaking:** Take the interrupt stack frame by value (not by reference) [#242](https://github.com/rust-osdev/x86_64/pull/242) - **Breaking:** Change `InterruptStackFrame::as_mut` to return a `Volatile<_>` wrapper [#242](https://github.com/rust-osdev/x86_64/pull/242) # 0.13.5 – 2021-04-01 - Add support for `XCR0` register ([#239](https://github.com/rust-osdev/x86_64/pull/239)) # 0.13.4 – 2021-03-27 - Implement more fmt traits for addr types ([#237](https://github.com/rust-osdev/x86_64/pull/237)) # 0.13.3 – 2021-03-16 - Implement `Clone` for `PageTable` ([#236](https://github.com/rust-osdev/x86_64/pull/236)) # 0.13.2 – 2021-02-02 - Fix build on latest nightly: The feature `const_in_array_repeat_expressions` was removed ([#230](https://github.com/rust-osdev/x86_64/pull/230)) # 0.13.1 – 2020-12-29 - PCID support instructions ([#169])(https://github.com/rust-osdev/x86_64/pull/169)) # 0.13.0 – 2020-12-28 - **Breaking:** Also return flags for `MapperAllSizes::translate()` ([#207](https://github.com/rust-osdev/x86_64/pull/207)) - **Breaking:** Restructure the `TranslateResult` type and create separate `Translate` trait ([#211](https://github.com/rust-osdev/x86_64/pull/211)) - **Breaking:** Rename `PhysToVirt` trait to `PageTableFrameMapping` ([#214](https://github.com/rust-osdev/x86_64/pull/214)) - **Breaking:** Use custom error types instead of `()` ([#199](https://github.com/rust-osdev/x86_64/pull/199)) - **Breaking:** Remove deprecated items - `UnusedPhysFrame` - `ExceptionStackFrame` - `VirtAddr::new_unchecked` - `interrupts::enable_interrupts_and_hlt` - **Breaking:** Make `DescriptorTablePointer::base` a `VirtAddr` ([#215](https://github.com/rust-osdev/x86_64/pull/215)) - **Breaking:** Change return type of `read_rip` to `VirtAddr` ([#216](https://github.com/rust-osdev/x86_64/pull/216)) - **Breaking:** Make writing the RFLAGS register unsafe ([#219](https://github.com/rust-osdev/x86_64/pull/219)) - **Breaking:** Remove `PortReadWrite` trait, which is no longer needed ([#217](https://github.com/rust-osdev/x86_64/pull/217)) - Relaxe `Sized` requirement for `FrameAllocator` in `Mapper::map_to` ([204](https://github.com/rust-osdev/x86_64/pull/204)) # 0.12.4 – 2020-12-28 - Fix bad conversion from llvm_asm! to asm! ([#218](https://github.com/rust-osdev/x86_64/pull/218)) - GDT: Add `load_unchecked`, `from_raw_slice`, and `as_raw_slice` ([#210](https://github.com/rust-osdev/x86_64/pull/210)) # 0.12.3 – 2020-10-31 - Use `asm!` instead of perma-unstable `llvm_asm!` macro ([#165](https://github.com/rust-osdev/x86_64/pull/165)) - Make `GlobalDescriptorTable::add_entry` a const fn ([#191](https://github.com/rust-osdev/x86_64/pull/191)) - Rename `enable_interrupts_and_hlt` to `enable_and_hlt` ([#206](https://github.com/rust-osdev/x86_64/pull/206)) - Provide functions for accessing the underlying L4 table for mapper types ([#184](https://github.com/rust-osdev/x86_64/pull/184)) - Remove Trait constraint for `Port::new()` ([#188](https://github.com/rust-osdev/x86_64/pull/188)) # 0.12.2 – 2020-09-29 - Add additional `DescriptorFlags` and aliases compatible with `syscall`/`sysenter` ([#181](https://github.com/rust-osdev/x86_64/pull/181)) - Fix (another) build error on latest nightly ([#186](https://github.com/rust-osdev/x86_64/pull/186)) # 0.12.1 – 2020-09-24 - Fix build error on latest nightly ([#182](https://github.com/rust-osdev/x86_64/pull/182)) # 0.12.0 – 2020-09-23 - **Breaking**: Decouple instructions into a separate feature flag ([#179](https://github.com/rust-osdev/x86_64/pull/179)) - Gates the `instructions` module by a new `instructions` feature (enabled by default). - Rename the `stable` feature to `external_asm` - `PageTable::new` is no longer a `const fn` on stable (i.e. without the `nightly` feature) # 0.11.8 – 2020-09-23 - Add `VirtAddr::is_null` ([#180](https://github.com/rust-osdev/x86_64/pull/180)) # 0.11.7 – 2020-09-11 - Fix const_item_mutation warnings added in latest Rust nightly ([#178](https://github.com/rust-osdev/x86_64/pull/178)) # 0.11.6 – 2020-09-11 (yanked) - (accidental empty release) # 0.11.5 – 2020-09-03 - Don't rely on promotion of `PageTableEntry::new` inside a `const fn` ([#175](https://github.com/rust-osdev/x86_64/pull/175)) # 0.11.4 – 2020-09-01 - Add a function for the `nop` instruction ([#174](https://github.com/rust-osdev/x86_64/pull/174)) # ~~0.11.3 – 2020-09-01~~ - (accidental release, yanked) # 0.11.2 – 2020-08-13 - Add rdfsbase, rdgsbase, wrfsbase, wrgsbase ([#172](https://github.com/rust-osdev/x86_64/pull/172)) # 0.11.1 - Export `PhysAddrNotValid` and `VirtAddrNotValid` error types ([#163](https://github.com/rust-osdev/x86_64/pull/163)) # 0.11.0 - **Breaking**: Handle parent table flags in Mapper methods ([#114](https://github.com/rust-osdev/x86_64/pull/114)) # 0.10.3 - Fix: Inclusive ranges is_empty() comparison ([#156](https://github.com/rust-osdev/x86_64/pull/156)) # 0.10.2 - **Nightly Breakage**: Use `llvm_asm!` instead of deprecated `asm!` macro ([#151](https://github.com/rust-osdev/x86_64/pull/151)) - Return the correct RPL from GDT::add_entry() ([#153](https://github.com/rust-osdev/x86_64/pull/153)) # 0.10.1 - Add InterruptDescriptorTable::load_unsafe ([#137](https://github.com/rust-osdev/x86_64/pull/137)) # 0.10.0 - **Breaking**: Make `map_to` and `update_flags` unsafe ([#135](https://github.com/rust-osdev/x86_64/pull/135)) - **Breaking**: Make `FrameDeallocator::deallocate_frame` unsafe ([#146](https://github.com/rust-osdev/x86_64/pull/146)) - **Breaking**: Don't pass small trivially copyable types by reference ([#147](https://github.com/rust-osdev/x86_64/pull/147)) - Various improvements to VirtAddr and PhysAddr ([#141](https://github.com/rust-osdev/x86_64/pull/141)) - Among other things, this renamed the `VirtAddr::new_unchecked` function to `new_truncate`. - Add `const_fn!{}` macro to make functions const without duplication ([#144](https://github.com/rust-osdev/x86_64/pull/144)) - Also makes some more functions `const`. - Add `{PhysFrame,Page}::from_start_address_unchecked` ([#142](https://github.com/rust-osdev/x86_64/pull/142)) - Use `#[inline]` everywhere ([#145](https://github.com/rust-osdev/x86_64/pull/145)) - In `VirtAddr::new_truncate`, use shift instead of mul and div ([#143](https://github.com/rust-osdev/x86_64/pull/143)) - Use `Self::new()` in `InterruptDescriptorTable::reset()` ([#148](https://github.com/rust-osdev/x86_64/pull/148)) # 0.9.6 - Add an enable_interrupts_and_hlt function that executes `sti; hlt` ([#138](https://github.com/rust-osdev/x86_64/pull/138)) - Fix some clippy warnings ([#130](https://github.com/rust-osdev/x86_64/pull/130)) - Resolve remaining clippy warnings and add clippy job to CI ([#132](https://github.com/rust-osdev/x86_64/pull/132)) # 0.9.5 - Add `#[inline]` attribute to small functions ([#129](https://github.com/rust-osdev/x86_64/pull/129)) # 0.9.4 - asm: add target_env = "musl" to pickup the underscore asm names ([#128](https://github.com/rust-osdev/x86_64/pull/128)) # 0.9.3 - Enable usage with non-nightly rust ([#127](https://github.com/rust-osdev/x86_64/pull/127)) # 0.9.2 - Remove the `cast` dependency ([#124](https://github.com/rust-osdev/x86_64/pull/124)) # 0.9.1 - Improve PageTableIndex and PageOffset ([#122](https://github.com/rust-osdev/x86_64/pull/122)) # 0.9.0 - **Breaking:** Return the UnusedPhysFrame on MapToError::PageAlreadyMapped ([#118](https://github.com/rust-osdev/x86_64/pull/118)) - Add User Mode registers ([#119](https://github.com/rust-osdev/x86_64/pull/119)) # 0.8.3 - Allow immediate port version of in/out instructions ([#115](https://github.com/rust-osdev/x86_64/pull/115)) - Make more functions const ([#116](https://github.com/rust-osdev/x86_64/pull/116)) # 0.8.2 - Add support for cr4 control register ([#111](https://github.com/rust-osdev/x86_64/pull/111)) # 0.8.1 - Fix: Add required reexport for new UnusedPhysFrame type ([#110](https://github.com/rust-osdev/x86_64/pull/110)) # 0.8.0 - **Breaking:** Replace `ux` dependency with custom wrapper structs ([#91](https://github.com/rust-osdev/x86_64/pull/91)) - **Breaking:** Add new UnsafePhysFrame type and use it in Mapper::map_to ([#89](https://github.com/rust-osdev/x86_64/pull/89)) - **Breaking:** Rename divide_by_zero field of interrupt descriptor table to divide_error ([#108](https://github.com/rust-osdev/x86_64/pull/108)) - **Breaking:** Introduce new diverging handler functions for double faults and machine check exceptions ([#109](https://github.com/rust-osdev/x86_64/pull/109)) - _Possibly Breaking:_ Make Mapper trait object safe by adding `Self: Sized` bounds on generic functions ([#84](https://github.com/rust-osdev/x86_64/pull/84)) # 0.7.7 - Add `slice` and `slice_mut` methods to IDT ([#95](https://github.com/rust-osdev/x86_64/pull/95)) # 0.7.6 - Use repr C to suppress not-ffi-safe when used with extern handler functions ([#94](https://github.com/rust-osdev/x86_64/pull/94)) # 0.7.5 - Add FsBase and GsBase register support ([#87](https://github.com/rust-osdev/x86_64/pull/87)) # 0.7.4 - Remove raw-cpuid dependency and use rdrand intrinsics ([#85](https://github.com/rust-osdev/x86_64/pull/85)) - Update integration tests to use new testing framework ([#86](https://github.com/rust-osdev/x86_64/pull/86)) # 0.7.3 - Add a new `OffsetPageTable` mapper type ([#83](https://github.com/rust-osdev/x86_64/pull/83)) # 0.7.2 - Add `instructions::bochs_breakpoint` and `registers::read_rip` functions ([#79](https://github.com/rust-osdev/x86_64/pull/79)) - Mark all single instruction functions as `#[inline]` ([#79](https://github.com/rust-osdev/x86_64/pull/79)) - Update GDT docs, add user_data_segment function and WRITABLE flag ([#78](https://github.com/rust-osdev/x86_64/pull/78)) - Reexport MappedPageTable on non-x86_64 platforms too ([#82](https://github.com/rust-osdev/x86_64/pull/82)) # 0.7.1 - Add ring-3 flag to GDT descriptor ([#77](https://github.com/rust-osdev/x86_64/pull/77)) # 0.7.0 - **Breaking**: `Port::read` and `PortReadOnly::read` now take `&mut self` instead of `&self` ([#76](https://github.com/rust-osdev/x86_64/pull/76)). # 0.6.0 - **Breaking**: Make the `FrameAllocator` unsafe to implement. This way, we can force the implementer to guarantee that all frame allocators are valid. See [#69](https://github.com/rust-osdev/x86_64/issues/69) for more information. # 0.5.5 - Use [`cast`](https://docs.rs/cast/0.2.2/cast/) crate instead of less general `usize_conversions` crate. # 0.5.4 - Update dependencies to latest versions (fix [#67](https://github.com/rust-osdev/x86_64/issues/67)) # 0.5.3 - Add `PortReadOnly` and `PortWriteOnly` types in `instructions::port` module ([#66](https://github.com/rust-osdev/x86_64/pull/66)). # 0.5.2 - Update documentation of `MappedPageTable`: Require that passed `level_4_table` is valid. # 0.5.1 - Add `PageTable::{iter, iter_mut}` functions to iterate over page table entries. # 0.5.0 ## Breaking - The `random` module is now a submodule of the `instructions` module. - The `structures::paging` module was split into several submodules: - The `NotGiantPageSize`, `PageRange`, and `PageRangeInclusive` types were moved to a new `page` submodule. - The `PhysFrameRange` and `PhysFrameRangeInclusive` types were moved to a new `frame` submodule. - The `FrameError` and `PageTableEntry` types were moved to a new `page_table` submodule. - The `MapperFlush`, `MapToError`, `UnmapError`, and `FlagUpdateError` types were moved to a new `mapper` submodule. - The `structures::paging` module received the following changes: - The `Mapper::translate_page` function now returns a `Result` with a new `TranslateError` error type. - The `NotRecursivelyMapped` error type was removed. - The `instructions::int3` function was moved into the `instructions::interrupts` module. - Removed some old deprecated functions. - Made modifications of the interrupt stack frame unsafe by introducing a new wrapper type and an unsafe `as_mut` method. ## Other - Added a new `structures::paging::MapperAllSizes` trait with generic translation methods and implement it for `MappedPageTable` and `RecursivePageTable`. - Added a new `structures::paging::MappedPageTable` type that implements the `Mapper` and `MapperAllSizes` traits. - Added a `software_interrupt` macro to invoke arbitrary `int x` instructions. - Renamed the `ExceptionStackFrame` type to `InterruptStackFrame`. # 0.4.2 - Add `RdRand::get_u{16, 32, 64}` methods - Deprecate `RdRand::get` because it does not check for failure - Make `RdRand` Copy # 0.4.1 - Add support for the RdRand instruction (random number generation) # 0.4.0 ## Breaking - Make `Mapper::map_to` and `Mapper::identity_map` unsafe because it is possible to break memory safety by passing invalid arguments. - Rename `FrameAllocator::alloc` to `allocate_frame` and `FrameDeallocator::dealloc` to `deallocate_frame`. - Remove `From` implementation for `PhysFrameRange` - The `os_bootinfo` crate is no longer used by the `bootloader` crate. - It is not possible to provide an implementation for all `os_bootinfo` versions. ## Other - Update to 2018 edition # 0.3.6 - Add a `SIZE` constant to the `Page` type - Add two interrupt tests to the `testing` sub-crate