Remove user TLS

This commit is contained in:
Jeremy Soller 2016-09-12 15:52:04 -06:00
parent ea8b9189a3
commit e50e6d2e4f

View file

@ -11,9 +11,8 @@ pub const GDT_KERNEL_DATA: usize = 2;
pub const GDT_KERNEL_TLS: usize = 3; pub const GDT_KERNEL_TLS: usize = 3;
pub const GDT_USER_CODE: usize = 4; pub const GDT_USER_CODE: usize = 4;
pub const GDT_USER_DATA: usize = 5; pub const GDT_USER_DATA: usize = 5;
pub const GDT_USER_TLS: usize = 6; pub const GDT_TSS: usize = 6;
pub const GDT_TSS: usize = 7; pub const GDT_TSS_HIGH: usize = 7;
pub const GDT_TSS_HIGH: usize = 8;
pub const GDT_A_PRESENT: u8 = 1 << 7; pub const GDT_A_PRESENT: u8 = 1 << 7;
pub const GDT_A_RING_0: u8 = 0 << 5; pub const GDT_A_RING_0: u8 = 0 << 5;
@ -56,7 +55,7 @@ pub static mut GDTR: DescriptorTablePointer = DescriptorTablePointer {
}; };
#[thread_local] #[thread_local]
pub static mut GDT: [GdtEntry; 9] = [ pub static mut GDT: [GdtEntry; 8] = [
// Null // Null
GdtEntry::new(0, 0, 0, 0), GdtEntry::new(0, 0, 0, 0),
// Kernel code // Kernel code
@ -64,13 +63,11 @@ pub static mut GDT: [GdtEntry; 9] = [
// Kernel data // Kernel data
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_0 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE), GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_0 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE),
// Kernel TLS // Kernel TLS
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE), GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_0 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE),
// User code // User code
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_EXECUTABLE | GDT_A_PRIVILEGE, GDT_F_LONG_MODE), GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_EXECUTABLE | GDT_A_PRIVILEGE, GDT_F_LONG_MODE),
// User data // User data
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE), GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE),
//TODO: User TLS
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_SYSTEM | GDT_A_PRIVILEGE, GDT_F_LONG_MODE),
// TSS // TSS
GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_TSS_AVAIL, 0), GdtEntry::new(0, 0, GDT_A_PRESENT | GDT_A_RING_3 | GDT_A_TSS_AVAIL, 0),
// TSS must be 16 bytes long, twice the normal size // TSS must be 16 bytes long, twice the normal size