From e818cab3f1fc4a3d4d0b8e2c9424fb2e7b1dff70 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Fri, 2 Aug 2024 01:20:40 +0200 Subject: *: use a generic UserRegs type everywhere I'm storing registers mostly inspired by Plan 9's Ureg, probably obvious from the name --- src/kernel/arch/amd64/sysenter.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/kernel/arch/amd64/sysenter.c') diff --git a/src/kernel/arch/amd64/sysenter.c b/src/kernel/arch/amd64/sysenter.c index 5a96e33..2f83e3d 100644 --- a/src/kernel/arch/amd64/sysenter.c +++ b/src/kernel/arch/amd64/sysenter.c @@ -2,17 +2,20 @@ #include #include #include +#include -CpuRegs _sysexit_regs; +SysexitRegs _sysexit_regs; -_Noreturn void sysexit(CpuRegs regs) { - _sysexit_regs = regs; +_Noreturn void sysexit(UserRegs *regs, char sse[512]) { + _sysexit_regs.u = *regs; + memcpy(_sysexit_regs.sse, sse, 512); _sysexit_real(); } _Noreturn void sysenter_stage2(void) { - CpuRegs *regs = &proc_cur->regs; - *regs = _sysexit_regs; + UserRegs *regs = &proc_cur->regs; + *regs = _sysexit_regs.u; + memcpy(proc_cur->sse, _sysexit_regs.sse, 512); _syscall(regs->rdi, regs->rsi, regs->rdx, regs->r10, regs->r8, regs->r9); proc_switch_any(); } -- cgit v1.2.3