Remove rd/wrfsbase

This commit is contained in:
Jeremy Soller 2016-10-31 18:04:28 -06:00
parent 8c0c4764f5
commit 4fc9283aff
6 changed files with 32 additions and 29 deletions

View file

@ -158,14 +158,13 @@ pub unsafe extern fn kstart_ap(cpu_id: usize, bsp_table: usize, stack_start: usi
kmain_ap(cpu_id);
}
pub unsafe fn usermode(ip: usize, sp: usize, fs: usize) -> ! {
pub unsafe fn usermode(ip: usize, sp: usize) -> ! {
// Go to usermode
asm!("xchg bx, bx
mov ds, ax
mov es, ax
mov fs, ax
mov fs, bx
mov gs, ax
wrfsbase rbx
push rax
push rcx
push rdx
@ -174,7 +173,7 @@ pub unsafe fn usermode(ip: usize, sp: usize, fs: usize) -> ! {
iretq"
: // No output because it never returns
: "{rax}"(gdt::GDT_USER_DATA << 3 | 3), // Data segment
"{rbx}"(fs), // TLS segment
"{rbx}"(gdt::GDT_USER_TLS << 3 | 3), // TLS segment
"{rcx}"(sp), // Stack pointer
"{rdx}"(3 << 12 | 1 << 9), // Flags - Set IOPL and interrupt enable flag
"{rsi}"(gdt::GDT_USER_CODE << 3 | 3), // Code segment