goto segv_term;
}
- if (!SEL_RPL(param->cs)) {
+ if (!SEL_RPL(param->execp->cs)) {
// 如果是内核页错误……
if (do_kernel(&mapping)) {
return;
kprintf(KERROR "(pid: %d) Segmentation fault on %p (%p:%p)\n",
__current->pid,
ptr,
- param->cs,
- param->eip);
+ param->execp->cs,
+ param->execp->eip);
__SIGSET(__current->sig_pending, _SIGSEGV);
schedule();
// should not reach
do_kernel(v_mapping* mapping)
{
uintptr_t addr = mapping->va;
- if (addr >= KHEAP_START && addr < PROC_START) {
- // This is kernel heap page
- uintptr_t pa = pmm_alloc_page(KERNEL_PID, 0);
- *mapping->pte = (*mapping->pte & 0xfff) | pa | PG_PRESENT;
- cpu_invplg(mapping->pte);
- cpu_invplg(addr);
- goto done;
- }
+
+ // TODO
return 0;
done: