Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/exec_machdep.c
Show First 20 Lines • Show All 620 Lines • ▼ Show 20 Lines | if (copyout(&frame, fp, sizeof(*fp)) != 0) { | ||||
sigexit(td, SIGILL); | sigexit(td, SIGILL); | ||||
} | } | ||||
tf->tf_x[0] = sig; | tf->tf_x[0] = sig; | ||||
tf->tf_x[1] = (register_t)&fp->sf_si; | tf->tf_x[1] = (register_t)&fp->sf_si; | ||||
tf->tf_x[2] = (register_t)&fp->sf_uc; | tf->tf_x[2] = (register_t)&fp->sf_uc; | ||||
tf->tf_x[8] = (register_t)catcher; | tf->tf_x[8] = (register_t)catcher; | ||||
tf->tf_sp = (register_t)fp; | tf->tf_sp = (register_t)fp; | ||||
tf->tf_elr = (register_t)p->p_sysent->sv_sigcode_base; | tf->tf_elr = (register_t)PROC_SIGCODE(p); | ||||
/* Clear the single step flag while in the signal handler */ | /* Clear the single step flag while in the signal handler */ | ||||
if ((td->td_pcb->pcb_flags & PCB_SINGLE_STEP) != 0) { | if ((td->td_pcb->pcb_flags & PCB_SINGLE_STEP) != 0) { | ||||
td->td_pcb->pcb_flags &= ~PCB_SINGLE_STEP; | td->td_pcb->pcb_flags &= ~PCB_SINGLE_STEP; | ||||
WRITE_SPECIALREG(mdscr_el1, | WRITE_SPECIALREG(mdscr_el1, | ||||
READ_SPECIALREG(mdscr_el1) & ~MDSCR_SS); | READ_SPECIALREG(mdscr_el1) & ~MDSCR_SS); | ||||
isb(); | isb(); | ||||
} | } | ||||
CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_elr, | CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_elr, | ||||
tf->tf_sp); | tf->tf_sp); | ||||
PROC_LOCK(p); | PROC_LOCK(p); | ||||
mtx_lock(&psp->ps_mtx); | mtx_lock(&psp->ps_mtx); | ||||
} | } |