diff options
Diffstat (limited to 'src/bits64/segmentation.rs')
-rw-r--r-- | src/bits64/segmentation.rs | 47 |
1 files changed, 3 insertions, 44 deletions
diff --git a/src/bits64/segmentation.rs b/src/bits64/segmentation.rs index 4c440e9..f43828a 100644 --- a/src/bits64/segmentation.rs +++ b/src/bits64/segmentation.rs @@ -1,16 +1,12 @@ -use core::mem::size_of; - -use ::descriptor; -use ::PrivilegeLevel; -pub use ::segmentation::*; -use bits64::task::*; +#[allow(unused_imports)] +use segmentation::SegmentSelector; /// Reload code segment register. /// Note this is special since we can not directly move /// to %cs. Instead we push the new segment selector /// and return value on the stack and use lretq /// to reload cs and continue at 1:. -#[cfg(target_arch="x86-64")] +#[cfg(target_arch="x86_64")] pub unsafe fn set_cs(sel: SegmentSelector) { asm!("pushq $0; \ leaq 1f(%rip), %rax; \ @@ -18,40 +14,3 @@ pub unsafe fn set_cs(sel: SegmentSelector) { lretq; \ 1:" :: "ri" (sel.bits() as usize) : "rax" "memory"); } - -pub enum SegmentBitness { - Bits32, - Bits64, -} - -impl SegmentBitness { - pub fn pack(self) -> Flags { - match self { - SegmentBitness::Bits32 => FLAGS_DB, - SegmentBitness::Bits64 => FLAGS_L, - } - } -} - -impl SegmentDescriptor { - pub fn new_memory64(base: u32, limit: u32, ty: Type, accessed: bool, dpl: PrivilegeLevel, bitness: SegmentBitness) -> SegmentDescriptor { - let ty1 = descriptor::Type::SegmentDescriptor { - ty: ty, - accessed: accessed, - }; - let flags = bitness.pack(); - let seg = SegmentDescriptor::memory_or_tss(base, limit, ty1, dpl, flags); - seg - } - - pub fn new_tss64(tss: &TaskStateSegment, dpl: PrivilegeLevel) -> [SegmentDescriptor; 2] { - let tss_ptr = tss as *const TaskStateSegment; - let ty1 = descriptor::Type::SystemDescriptor { - size: true, - ty: descriptor::SystemType::TssAvailable, - }; - let seg1 = SegmentDescriptor::memory_or_tss(tss_ptr as u32, size_of::<TaskStateSegment>() as u32, ty1, dpl, Flags::empty()); - let seg2 = SegmentDescriptor::high(tss_ptr as u64); - [seg1, seg2] - } -} |