- kprintf(KERROR "(pid: %d) Segmentation fault on %p (%p:%p,e=0x%x)\n",
- __current->pid,
- ptr,
- param->execp->cs,
- param->execp->eip,
- param->execp->err_code);
-
- sigset_add(__current->sigctx.sig_pending, _SIGSEGV);
+ ERROR("(pid: %d) Segmentation fault on %p (%p:%p,e=0x%x)",
+ __current->pid,
+ ptr,
+ param->execp->cs,
+ param->execp->eip,
+ param->execp->err_code);
+
+ trace_printstack_isr(param);
+
+ if (kernel_context(param)) {
+ ERROR("[page fault on kernel]");
+ // halt kernel if segv comes from kernel space
+ spin();
+ }
+
+ thread_setsignal(current_thread, _SIGSEGV);