fix fxsave/fxrstor

apparently the fxsaved memory needs to be zeroed out before...
This commit is contained in:
2023-10-20 14:36:04 +02:00
parent 167eb32caf
commit cb83701401
2 changed files with 10 additions and 5 deletions

View File

@@ -175,13 +175,15 @@ struct Task *new_ktask(void(*fn), char *name) {
new->frame.ip = (uint64_t) fn;
new->frame.cs = GDTSEL(gdt_code);
new->frame.ss = GDTSEL(gdt_data);
__builtin_ia32_fxsave64((void *) (((uintptr_t) (new->frame.ssestate) + 32) & 0xFFFFFFFFFFFFFFF0));
for (int i = 0; i < 512; i++) new->frame.ssestate[i] = 0;
new->frame.flags = flags();
new->frame.guard = IDT_GUARD;
new->addressSpace = KERN_AddressSpace;
new->state = TS_RUNNING;
new->mode = TASKMODE_KERN;
sanity_check_frame(&new->frame);
m_lock(&NewTasks_lock);
append_task(&NewTasks, new);
m_unlock(&NewTasks_lock);

View File

@@ -25,13 +25,16 @@
; Ensure 16-byte alignment
; This works as last bunch of bits in fxsave state aren't used
sub rsp, 512
; Fxsaved memory needs to be zeroed before!
mov rsi, 0x0000000000000000
times 64 push rsi
mov rsi, rsp
add rsi, 32
mov rdi, 0xFFFFFFFFFFFFFFF0
and rsi, rdi
; TODO: Fix!!
; fxsave [rsi]
fxsave64 [rsi]
%endmacro
%macro popaq 0
@@ -43,7 +46,7 @@
mov rdi, 0xFFFFFFFFFFFFFFF0
and rsi, rdi
; fxrstor [rsi]
fxrstor64 [rsi]
add rsp, 512
pop r15