Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/trap.c
Show First 20 Lines • Show All 438 Lines • ▼ Show 20 Lines | #endif | ||||
case EXCP_WATCHPT_EL1: | case EXCP_WATCHPT_EL1: | ||||
case EXCP_SOFTSTP_EL1: | case EXCP_SOFTSTP_EL1: | ||||
#ifdef KDB | #ifdef KDB | ||||
kdb_trap(exception, 0, frame); | kdb_trap(exception, 0, frame); | ||||
#else | #else | ||||
panic("No debugger in kernel."); | panic("No debugger in kernel."); | ||||
#endif | #endif | ||||
break; | break; | ||||
case EXCP_FPAC: | |||||
/* We can see this if the authentication on PAC fails */ | |||||
print_registers(frame); | |||||
printf(" far: %16lx\n", READ_SPECIALREG(far_el1)); | |||||
panic("FPAC kernel exception"); | |||||
break; | |||||
case EXCP_UNKNOWN: | case EXCP_UNKNOWN: | ||||
if (undef_insn(1, frame)) | if (undef_insn(1, frame)) | ||||
break; | break; | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
default: | default: | ||||
print_registers(frame); | print_registers(frame); | ||||
printf(" far: %16lx\n", READ_SPECIALREG(far_el1)); | printf(" far: %16lx\n", READ_SPECIALREG(far_el1)); | ||||
panic("Unknown kernel exception %x esr_el1 %lx", exception, | panic("Unknown kernel exception %x esr_el1 %lx", exception, | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | else { | ||||
panic("Unhandled EL0 %s abort: %x", | panic("Unhandled EL0 %s abort: %x", | ||||
exception == EXCP_INSN_ABORT_L ? "instruction" : | exception == EXCP_INSN_ABORT_L ? "instruction" : | ||||
"data", dfsc); | "data", dfsc); | ||||
} | } | ||||
break; | break; | ||||
case EXCP_UNKNOWN: | case EXCP_UNKNOWN: | ||||
if (!undef_insn(0, frame)) | if (!undef_insn(0, frame)) | ||||
call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)far, | call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)far, | ||||
exception); | |||||
userret(td, frame); | |||||
break; | |||||
case EXCP_FPAC: | |||||
call_trapsignal(td, SIGILL, ILL_ILLOPN, (void *)frame->tf_elr, | |||||
exception); | exception); | ||||
userret(td, frame); | userret(td, frame); | ||||
break; | break; | ||||
case EXCP_SP_ALIGN: | case EXCP_SP_ALIGN: | ||||
call_trapsignal(td, SIGBUS, BUS_ADRALN, (void *)frame->tf_sp, | call_trapsignal(td, SIGBUS, BUS_ADRALN, (void *)frame->tf_sp, | ||||
exception); | exception); | ||||
userret(td, frame); | userret(td, frame); | ||||
break; | break; | ||||
case EXCP_PC_ALIGN: | case EXCP_PC_ALIGN: | ||||
▲ Show 20 Lines • Show All 79 Lines • Show Last 20 Lines |