diff options
Diffstat (limited to 'x86_64/src/gdt.rs')
-rw-r--r-- | x86_64/src/gdt.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/x86_64/src/gdt.rs b/x86_64/src/gdt.rs index 06af094..7eb1ff7 100644 --- a/x86_64/src/gdt.rs +++ b/x86_64/src/gdt.rs @@ -8,18 +8,21 @@ use kvm_sys::kvm_segment; /// Constructor for a conventional segment GDT (or LDT) entry. Derived from the kernel's segment.h. pub fn gdt_entry(flags: u16, base: u32, limit: u32) -> u64 { - ((((base as u64) & 0xff000000u64) << (56 - 24)) | (((flags as u64) & 0x0000f0ffu64) << 40) | - (((limit as u64) & 0x000f0000u64) << (48 - 16)) | - (((base as u64) & 0x00ffffffu64) << 16) | (((limit as u64) & 0x0000ffffu64))) + ((((base as u64) & 0xff000000u64) << (56 - 24)) + | (((flags as u64) & 0x0000f0ffu64) << 40) + | (((limit as u64) & 0x000f0000u64) << (48 - 16)) + | (((base as u64) & 0x00ffffffu64) << 16) + | ((limit as u64) & 0x0000ffffu64)) } fn get_base(entry: u64) -> u64 { - ((((entry) & 0xFF00000000000000) >> 32) | (((entry) & 0x000000FF00000000) >> 16) | - (((entry) & 0x00000000FFFF0000) >> 16)) + ((((entry) & 0xFF00000000000000) >> 32) + | (((entry) & 0x000000FF00000000) >> 16) + | (((entry) & 0x00000000FFFF0000) >> 16)) } fn get_limit(entry: u64) -> u32 { - ((((entry) & 0x000F000000000000) >> 32) | (((entry) & 0x000000000000FFFF))) as u32 + ((((entry) & 0x000F000000000000) >> 32) | ((entry) & 0x000000000000FFFF)) as u32 } fn get_g(entry: u64) -> u8 { |