From: Minep Date: Sat, 17 Sep 2022 18:10:33 +0000 (+0100) Subject: fix: load x87 fpu default settings X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/commitdiff_plain/d96f52f65ecb90e26be9bd709fbdb1de54795db1?ds=sidebyside fix: load x87 fpu default settings fix: forked child should inherit parent's x87 and mmx state --- diff --git a/lunaix-os/kernel/k_init.c b/lunaix-os/kernel/k_init.c index fe9cf90..ce4ac6a 100644 --- a/lunaix-os/kernel/k_init.c +++ b/lunaix-os/kernel/k_init.c @@ -164,6 +164,11 @@ spawn_proc0() : "i"(KSTACK_TOP), "i"(KCODE_SEG), "r"(proc0->intr_ctx.eip) : "%ebx", "memory"); + // 加载x87默认配置 + asm volatile("fninit\n" + "fxsave (%%eax)" ::"a"(proc0->fxstate) + : "memory"); + // 向调度器注册进程。 commit_process(proc0); diff --git a/lunaix-os/kernel/process/process.c b/lunaix-os/kernel/process/process.c index 82f1ffa..74c9380 100644 --- a/lunaix-os/kernel/process/process.c +++ b/lunaix-os/kernel/process/process.c @@ -196,6 +196,8 @@ dup_proc() pcb->intr_ctx = __current->intr_ctx; pcb->parent = __current; + memcpy(pcb->fxstate, __current->fxstate, 512); + if (__current->cwd) { pcb->cwd = __current->cwd; vfs_ref_dnode(pcb->cwd);