Index: sys/riscv/riscv/trap.c =================================================================== --- sys/riscv/riscv/trap.c +++ sys/riscv/riscv/trap.c @@ -158,15 +158,12 @@ } static void -ecall_handler(struct trapframe *frame) +ecall_handler(void) { struct thread *td; td = curthread; - KASSERT(td->td_frame == frame, - ("%s: td_frame %p != frame %p", __func__, td->td_frame, frame)); - syscallenter(td); syscallret(td); } @@ -324,9 +321,11 @@ struct pcb *pcb; td = curthread; - td->td_frame = frame; pcb = td->td_pcb; + KASSERT(td->td_frame == frame, + ("%s: td_frame %p != frame %p", __func__, td->td_frame, frame)); + /* Ensure we came from usermode, interrupts disabled */ KASSERT((csr_read(sstatus) & (SSTATUS_SPP | SSTATUS_SIE)) == 0, ("Came from U mode with interrupts enabled")); @@ -357,7 +356,7 @@ break; case EXCP_USER_ECALL: frame->tf_sepc += 4; /* Next instruction */ - ecall_handler(frame); + ecall_handler(); break; case EXCP_ILLEGAL_INSTRUCTION: #ifdef FPE