diff --git a/init/init.c b/init/init.c index 6c446a5..9e58855 100644 --- a/init/init.c +++ b/init/init.c @@ -8,11 +8,11 @@ void app_main (void) { uintptr_t out_paddr; int mem_rid = m_proc_create_resource_mem (16, RV_PRIVATE, &out_paddr); - /* m_proc_map (out_paddr, M_PROC_MAP_BASE, 16, PM_PRESENT | PM_RW | PM_USER); */ + m_proc_map (out_paddr, M_PROC_MAP_BASE, 16, PM_PRESENT | PM_RW | PM_USER); - /* memset ((void*)M_PROC_MAP_BASE, 0, M_PAGE_SIZE * 16); */ + memset ((void*)M_PROC_MAP_BASE, 0, M_PAGE_SIZE * 16); - /* m_proc_unmap (M_PROC_MAP_BASE, 16); */ + m_proc_unmap (M_PROC_MAP_BASE, 16); - /* m_proc_drop_resource (mem_rid); */ + m_proc_drop_resource (mem_rid); } diff --git a/kernel/amd64/regsasm.h b/kernel/amd64/regsasm.h index a8998fd..cb600ea 100644 --- a/kernel/amd64/regsasm.h +++ b/kernel/amd64/regsasm.h @@ -35,4 +35,21 @@ popq % rcx; \ popq % rax; +#define pop_regs_skip_rax \ + popq % r15; \ + popq % r14; \ + popq % r13; \ + popq % r12; \ + popq % r11; \ + popq % r10; \ + popq % r9; \ + popq % r8; \ + popq % rbx; \ + popq % rbp; \ + popq % rdi; \ + popq % rsi; \ + popq % rdx; \ + popq % rcx; \ + addq $8, % rsp + #endif // _KERNEL_AMD64_REGSASM_H diff --git a/kernel/amd64/syscallentry.S b/kernel/amd64/syscallentry.S index f643b39..ddff6e8 100644 --- a/kernel/amd64/syscallentry.S +++ b/kernel/amd64/syscallentry.S @@ -32,7 +32,7 @@ amd64_syscall_entry: movq %rbp, %rsp - pop_regs + pop_regs_skip_rax addq $56, %rsp movq %gs:0, %rsp diff --git a/kernel/proc/resource.c b/kernel/proc/resource.c index 0b5c999..195a654 100644 --- a/kernel/proc/resource.c +++ b/kernel/proc/resource.c @@ -83,8 +83,8 @@ struct proc_resource* proc_create_resource (struct proc* proc, int rid, int type struct proc_resource_mem_init* mem_init = data; proc_create_resource_mem (&resource->u.mem, mem_init); resource->ops.cleanup = &proc_cleanup_resource_mem; - DEBUG ("resource=%p paddr=%p, pages=%zu\n", resource, resource->u.mem.paddr, - resource->u.mem.pages); + DEBUG ("resource=%p type=%d rid=%d paddr=%p, pages=%zu\n", resource, resource->type, + resource->rid, resource->u.mem.paddr, resource->u.mem.pages); } break; default: { free (resource);