Pass CPU state as a pointer
Previously CPU statue was passed on the stack, but the compiler is allowed to clobber values passed to it on the stack in the SysV x86 ABI. So now leave the state on the stack but pass a pointer to it into the ISR functions.
This commit is contained in:
@@ -35,7 +35,7 @@ syscall_enable()
|
||||
}
|
||||
|
||||
uintptr_t
|
||||
syscall_dispatch(uintptr_t return_rsp, const cpu_state ®s)
|
||||
syscall_dispatch(uintptr_t return_rsp, cpu_state ®s)
|
||||
{
|
||||
console *cons = console::get();
|
||||
syscall call = static_cast<syscall>(regs.rax);
|
||||
@@ -65,7 +65,7 @@ syscall_dispatch(uintptr_t return_rsp, const cpu_state ®s)
|
||||
auto *p = s.current();
|
||||
p->wait_on_signal(-1ull);
|
||||
cons->printf("\nReceived PAUSE syscall\n");
|
||||
return_rsp = s.tick(return_rsp);
|
||||
return_rsp = s.schedule(return_rsp);
|
||||
cons->set_color();
|
||||
}
|
||||
break;
|
||||
@@ -78,7 +78,7 @@ syscall_dispatch(uintptr_t return_rsp, const cpu_state ®s)
|
||||
auto *p = s.current();
|
||||
p->wait_on_time(regs.rbx);
|
||||
cons->printf("\nReceived SLEEP syscall\n");
|
||||
return_rsp = s.tick(return_rsp);
|
||||
return_rsp = s.schedule(return_rsp);
|
||||
cons->set_color();
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user