NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4652 most downloaded on crates.io
Support for x86_64 specific instructions, registers, and structures.
Last release 14 days ago
24 Sep 2026
Release timing varies
gaps range from 2 weeks to 1.2 years
Nearly every release is documented
notes for 58 of the last 60 stable releases
7 versions withdrawn
withdrawn after publishing
10 years old
135 releases · first in 2016
add `Mapper::clear` to clear any page table entry regardless of the present flag
Mapper::clear to clear any page table entry regardless of the present flagMapper::unmap now also returns the flags of the pageOffsetPageTable a type alias
OffsetPageTable::new with OffsetPageTable::from_phys_offset or MappedPageTable::from_phys_offset.OffsetPageTable's PageTableFrameMapping implementation is now public as PhysOffset.repr(transparent) and range types repr(Rust)MappedPageTable::display
MappedPageTable can now be displayed.PageTableEntry::frame now takes an is_level_1_entry: bool parameter.FsBase::write, GsBase::write, and KernelGsBase::write unsafedoc_auto_cfg, asm_const, and const_fn featuresnightly feature by default
nightly feature explicitly if you use nightly-only features.IntoIterator instead of Iterator for range typesOne column per quarter.
This release is compatible with Rust nightlies starting with nightly-2026-07-10 (this only applies when the nightly feature is used).
This release is compatible with Rust nightlies starting with nightly-2026-07-10 (this only applies when the nightly feature is used).
add ability to add iomap to TSS
Add `MapperFlush` method to get page
MapperFlush method to get pageupdate() to Cr3, Dr7, SFMask, UCet, SCet, mxcsr, rflags, and XCr0impl PageTableFrameMapping for &Pimpl fmt::Debug for EntryOptionsThis release is compatible with Rust nightlies starting with nightly-2024-11-23 (this only applies when the nightly feature is used).
This release is compatible with Rust nightlies starting with nightly-2024-11-23 (this only applies when the nightly feature is used).
GlobalDescriptorTable::limitsize and len for PageRange, PhysFrameRange, PageRangeInclusive and PhysFrameRangeInclusivex86_64in{,b,w,l} and out{,b,w,l}rust-toolchain to rust-toolchain.tomlx86_64-bare-metal.json with x86_64-unknown-none-Crelocation-model=static in RUSTFLAGS for bootloader test job#![feature(asm_const)]add constructor for `InterruptStackFrameValue`
Remove deprecated functions/flags
InvalidStarSegmentSelectors errorPcidTooBig errorIndex<u8> for IDT instead of Index<usize>cpu_flags's type to RFlagsload_tss and GlobalDescriptorTableCr2::read return a resultexternal_asm and inline_asm featuresPageSize traitMerge branch 'next' into master
Merge branch 'next' into master
Nothing published for this version
This switches to using the sparse index as reccomended by: https://crates.io/data-access#api
This switches to using the sparse index as reccomended by:
https://crates.io/data-access#api
Once merged, this should automatically release v0.14.12 (see #457).
Signed-off-by: Joe Richey joerichey@google.com
Add missing IDT entries #CP and #HV`
is_empty to PageTableDescriptor::tss_segment_uncheckediretq function to the InterruptStackFrameValue struct.flush_broadcast and tlbsync functionsProvide null segment selector as associated constant on `SegmentSelector`
external_asm and inline_asm features are deprecated and now have no effect.
VirtAddrNotValid and PhysAddrNotValid is now public (#340).
external_asm and inline_asm features are deprecated and now have no effect.instructions feature (on by default) now requires Rust 1.59README (#355)core::iter::Step for VirtAddr and Page (#342)
step_trait feature flagUCet and SCet registers (#349)rustversion to mark certain functions const fn on Rust 1.61 (#353)Entry::handler_addr() is now public (#354)const fn (#369)
VirtAddr::as_ptr()VirtAddr::as_mut_ptr()PhysAddr::new()PhysAddr::try_new()const_fn_fn_ptr_basics and const_fn_trait_bound features (#352)nomem in load_tss (#358)GlobalDescriptorTable::add_entry error handling (#361)tss_segment documentation (#366)- Add Cr2::read_raw (#334) - Add support for MXCSR register
fix: build error on the latest nightly
set_general_handler macro (#285)#VC) to the InterruptDescriptorTable (#313)InterruptStackFrame (#312)page_table_index (#318)index and #VC (#321)const_assert! in favor of std's assert! (#326)Old locations still re-export all the types, so this is not a breaking change.
registers::segmentation module (#309), containing:
instructions::segmentation::{Segment, Segment64, CS, DS, ES, FS, GS, SS}structures::gdt::SegmentSelectorcargo doc --no-default-features succeeds.Update segment register references in GDT::load* method to non-deprecated methods
ExceptionVector enum and additional flags to PageFaultErrorCode (#303)clean_up and clean_up_with_filter methods to deallocate unused page tables (#264)MapperFlush::new and MapperFlushAll::new constructor functions (#296)#[cfg(doc)] instead of docs.rs-specific cfg flag (#287)bit_field dependency (#306)Deprecate the corresponding free functions:
instructions::tables::sgdt (#279)Cr0 bits: EXTENSION_TYPE (ET)Cr4 bits:
KEY_LOCKER (KL)CONTROL_FLOW_ENFORCEMENT (CET)PROTECTION_KEY_SUPERVISOR (PKS)XCr0 bits: BNDREG, BNDCSR, OPMASK, ZMM_HI256, HI16_ZMMXCr0 bitsSelectorErrorCode for parsing interrupt error codes from #TS, #NP, #SS, and #GP (#274)addr::{align_up, align_down} const (#270)structures::idt available on stable Rust (#271)
HandlerFuncs if the "abi_x86_interrupt" feature is disabledset_handler_addr that just takes a VirtAddrSS, CS, DS, ES, FS, GS marker typesSegment trait for reading/writing the segment registerSegment64 trait for reading/writing the segment baseGS::swap()cs, set_csswap_gsload_{ss,ds,es,fs,gs}{wr,rd}{fs,gs}baseMake the following types aliases of the new PortGeneric type (#248):
PortGeneric type (#248):
Port<T> = PortGeneric<T, ReadWriteAccess>PortReadOnly<T> = PortGeneric<T, ReadOnlyAccess>PortWriteOnly<T> = PortGeneric<T, WriteOnlyAccess>nightly feature to be const fns (#255):
PageTable::newGlobalDescriptorTable::from_raw_sliceMappedFrame::{start_address, size}Page<Size4KiB>::p1_indexDebug implementation for InterruptDescriptorTable (#253)
Debug implementations for Entry and EntryOptionsMultiple improvements to assembly code
Use new const_fn_trait_bound feature to fix build on latest nightly
const_fn_trait_bound feature to fix build on latest nightly (#250)
const_fn feature now requires at least Rust nightly 2021-05-06.sidt instruction (#246)Nothing published for this version
Breaking: Take the interrupt stack frame by value (not by reference) #242
Nothing published for this version
- Add support for XCR0 register
XCR0 register (#239)Implement more fmt traits for addr types
- Implement Clone for PageTable
Clone for PageTable (#236)Fix build on latest nightly: The feature const_in_array_repeat_expressions was removed
const_in_array_repeat_expressions was removed (#230)PCID support instructions ([#169])(https://github.com/rust-osdev/x86_64/pull/169))
Breaking: Remove deprecated items
MapperAllSizes::translate() (#207)TranslateResult type and create separate Translate trait (#211)PhysToVirt trait to PageTableFrameMapping (#214)() (#199)UnusedPhysFrameExceptionStackFrameVirtAddr::new_uncheckedinterrupts::enable_interrupts_and_hltDescriptorTablePointer::base a VirtAddr (#215)read_rip to VirtAddr (#216)PortReadWrite trait, which is no longer needed (#217)Sized requirement for FrameAllocator in Mapper::map_to (204)Fix bad conversion from llvm_asm! to asm!
Use asm! instead of perma-unstable llvm_asm! macro
Add additional DescriptorFlags and aliases compatible with syscall/sysenter
Fix build error on latest nightly
Breaking: Decouple instructions into a separate feature flag
instructions module by a new instructions feature (enabled by default).stable feature to external_asmPageTable::new is no longer a const fn on stable (i.e. without the nightly feature)- Add VirtAddr::is_null
VirtAddr::is_null (#180)Fix const_item_mutation warnings added in latest Rust nightly
- (accidental empty release)
Don't rely on promotion of PageTableEntry::new inside a const fn
PageTableEntry::new inside a const fn (#175)Add a function for the nop instruction
nop instruction (#174)- (accidental release, yanked)
Add rdfsbase, rdgsbase, wrfsbase, wrgsbase
Export PhysAddrNotValid and VirtAddrNotValid error types
PhysAddrNotValid and VirtAddrNotValid error types (#163)Breaking: Handle parent table flags in Mapper methods
Fix: Inclusive ranges is_empty() comparison
Nightly Breakage: Use llvm_asm! instead of deprecated asm! macro
Add InterruptDescriptorTable::load_unsafe
Breaking: Make map_to and update_flags unsafe
map_to and update_flags unsafe (#135)FrameDeallocator::deallocate_frame unsafe (#146)VirtAddr::new_unchecked function to new_truncate.const_fn!{} macro to make functions const without duplication (#144)
const.{PhysFrame,Page}::from_start_address_unchecked (#142)#[inline] everywhere (#145)VirtAddr::new_truncate, use shift instead of mul and div (#143)Self::new() in InterruptDescriptorTable::reset() (#148)Add an enable_interrupts_and_hlt function that executes sti; hlt
Add #[inline] attribute to small functions
#[inline] attribute to small functions (#129)asm: add target_env = "musl" to pickup the underscore asm names
Enable usage with non-nightly rust
- Remove the cast dependency
cast dependency (#124)Improve PageTableIndex and PageOffset
Breaking: Return the UnusedPhysFrame on MapToError::PageAlreadyMapped
Allow immediate port version of in/out instructions
Add support for cr4 control register
Fix: Add required reexport for new UnusedPhysFrame type
Breaking: Replace ux dependency with custom wrapper structs
ux dependency with custom wrapper structs (#91)Self: Sized bounds on generic functions (#84)Add slice and slice_mut methods to IDT
slice and slice_mut methods to IDT (#95)Your coding agent can read these notes before it upgrades. Set up the MCP server →