- Add an enable_interrupts_and_hlt function that executes
sti; hlt
(#138) - Fix some clippy warnings (#130)
- Resolve remaining clippy warnings and add clippy job to CI (#132)
- Add
#[inline]
attribute to small functions (#129)
- asm: add target_env = "musl" to pickup the underscore asm names (#128)
- Enable usage with non-nightly rust (#127)
- Remove the
cast
dependency (#124)
- Improve PageTableIndex and PageOffset (#122)
- Breaking: Return the UnusedPhysFrame on MapToError::PageAlreadyMapped (#118)
- Add User Mode registers (#119)
- Add support for cr4 control register (#111)
- Fix: Add required reexport for new UnusedPhysFrame type (#110)
- Breaking: Replace
ux
dependency with custom wrapper structs (#91) - Breaking: Add new UnsafePhysFrame type and use it in Mapper::map_to (#89)
- Breaking: Rename divide_by_zero field of interrupt descriptor table to divide_error (#108)
- Breaking: Introduce new diverging handler functions for double faults and machine check exceptions (#109)
- Possibly Breaking: Make Mapper trait object safe by adding
Self: Sized
bounds on generic functions (#84)
- Add
slice
andslice_mut
methods to IDT (#95)
- Use repr C to suppress not-ffi-safe when used with extern handler functions (#94)
- Add FsBase and GsBase register support (#87)
- Remove raw-cpuid dependency and use rdrand intrinsics (#85)
- Update integration tests to use new testing framework (#86)
- Add a new
OffsetPageTable
mapper type (#83)
- Add
instructions::bochs_breakpoint
andregisters::read_rip
functions (#79) - Mark all single instruction functions as
#[inline]
(#79) - Update GDT docs, add user_data_segment function and WRITABLE flag (#78)
- Reexport MappedPageTable on non-x86_64 platforms too (#82)
- Add ring-3 flag to GDT descriptor (#77)
- Breaking:
Port::read
andPortReadOnly::read
now take&mut self
instead of&self
(#76).
- Breaking: Make the
FrameAllocator
unsafe to implement. This way, we can force the implementer to guarantee that all frame allocators are valid. See #69 for more information.
- Use
cast
crate instead of less generalusize_conversions
crate.
- Update dependencies to latest versions (fix #67)
- Add
PortReadOnly
andPortWriteOnly
types ininstructions::port
module (#66).
- Update documentation of
MappedPageTable
: Require that passedlevel_4_table
is valid.
- Add
PageTable::{iter, iter_mut}
functions to iterate over page table entries.
- The
random
module is now a submodule of theinstructions
module. - The
structures::paging
module was split into several submodules:- The
NotGiantPageSize
,PageRange
, andPageRangeInclusive
types were moved to a newpage
submodule. - The
PhysFrameRange
andPhysFrameRangeInclusive
types were moved to a newframe
submodule. - The
FrameError
andPageTableEntry
types were moved to a newpage_table
submodule. - The
MapperFlush
,MapToError
,UnmapError
, andFlagUpdateError
types were moved to a newmapper
submodule.
- The
- The
structures::paging
module received the following changes:- The
Mapper::translate_page
function now returns aResult
with a newTranslateError
error type. - The
NotRecursivelyMapped
error type was removed.
- The
- The
instructions::int3
function was moved into theinstructions::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.
- Added a new
structures::paging::MapperAllSizes
trait with generic translation methods and implement it forMappedPageTable
andRecursivePageTable
. - Added a new
structures::paging::MappedPageTable
type that implements theMapper
andMapperAllSizes
traits. - Added a
software_interrupt
macro to invoke arbitraryint x
instructions. - Renamed the
ExceptionStackFrame
type toInterruptStackFrame
.
- Add
RdRand::get_u{16, 32, 64}
methods - Deprecate
RdRand::get
because it does not check for failure - Make
RdRand
Copy
- Add support for the RdRand instruction (random number generation)
- Make
Mapper::map_to
andMapper::identity_map
unsafe because it is possible to break memory safety by passing invalid arguments. - Rename
FrameAllocator::alloc
toallocate_frame
andFrameDeallocator::dealloc
todeallocate_frame
. - Remove
From<os_bootinfo::FrameRange>
implementation forPhysFrameRange
- The
os_bootinfo
crate is no longer used by thebootloader
crate. - It is not possible to provide an implementation for all
os_bootinfo
versions.
- The
- Update to 2018 edition
- Add a
SIZE
constant to thePage
type - Add two interrupt tests to the
testing
sub-crate