void cpuexc_handler(VP p_excinf) { ID tskid; syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf); if (sns_ctx() != TRUE) { syslog(LOG_WARNING, "sns_ctx() is not TRUE in CPU exception handler."); } if (sns_dpn() != TRUE) { syslog(LOG_WARNING, "sns_dpn() is not TRUE in CPU exception handler."); } syslog(LOG_DEBUG, "sns_loc = %d sns_dsp = %d", (int)sns_loc(), (int)sns_dsp()); syslog(LOG_DEBUG, "vxsns_loc = %d vxsns_ctx = %d vxsns_dsp = %d vxsns_dpn = %d", (int)vxsns_loc(p_excinf), (int)vxsns_ctx(p_excinf), (int)vxsns_dsp(p_excinf), (int)vxsns_dpn(p_excinf)); if (!vxsns_loc(p_excinf) && !vxsns_ctx(p_excinf)) { syscall(iget_tid(&tskid)); syscall(iras_tex(tskid, 0x8000)); } else { syslog(LOG_NOTICE, "Sample program ends with exception."); kernel_exit(); } }
void cpuexc_handler(void *p_excinf) { ID tskid; syslog(LOG_NOTICE, "CPU exception handler (p_excinf = %08p).", p_excinf); if (sns_ctx() != true) { syslog(LOG_WARNING, "sns_ctx() is not true in CPU exception handler."); } if (sns_dpn() != true) { syslog(LOG_WARNING, "sns_dpn() is not true in CPU exception handler."); } syslog(LOG_INFO, "sns_loc = %d sns_dsp = %d sns_tex = %d", sns_loc(), sns_dsp(), sns_tex()); syslog(LOG_INFO, "xsns_dpn = %d xsns_xpn = %d", xsns_dpn(p_excinf), xsns_xpn(p_excinf)); if (xsns_xpn(p_excinf)) { syslog(LOG_NOTICE, "Sample program ends with exception."); SVC_PERROR(ext_ker()); assert(0); } SVC_PERROR(iget_tid(&tskid)); SVC_PERROR(iras_tex(tskid, 0x8000U)); }
void ldr_data_abort_handler(void *p_excinf) { syslog(LOG_EMERG, "====================EXCEPTION DETECTED===================="); syslog(LOG_EMERG, "Data abort exception occurs."); xlog_sys(p_excinf); ID tid; iget_tid(&tid); if (!xsns_xpn(p_excinf)) { syslog(LOG_EMERG, "Kill task (tid = %d) for recovery.", tid); ER ercd = iras_tex(tid, 1); assert(ercd == E_OK); } else { syslog(LOG_EMERG, "Fatal error (tid = %d), exit kernel.", tid); ext_ker(); } syslog(LOG_EMERG, "=========================================================="); }
void alarm1_handler(intptr_t exinf) { ER ercd; ID tskid; check_point(35); ercd = iget_tid(&tskid); check_ercd(ercd, E_OK); check_assert(tskid == TSK_NONE); check_point(36); ercd = iwup_tsk(TASK1); check_ercd(ercd, E_OK); check_point(37); return; check_point(0); }