diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc index 73cb72bb34..17e431043c 100644 --- a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -55,6 +55,16 @@ void Thread::exception(Cpu & cpu) " ISS=", Cpu::Esr::Iss::get(esr), " ip=", (void*)regs->ip); }; + + /* + * If the machine exception is caused by a non-privileged + * component, mark it dead, and continue execution. + */ + if (regs->exception_type == Cpu::SYNC_LEVEL_EL0) { + Genode::raw("Will freeze thread ", *this); + _become_inactive(DEAD); + return; + } break; } default: