From: Matthias Kruk Date: Wed, 18 Dec 2019 09:26:18 +0000 (+0900) Subject: Implement sys_mmap() function X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=ae5a66494785cebfe63d9557bc5ca481c5a0b2ba;p=corax Implement sys_mmap() function --- diff --git a/kernel/core/posixcall.c b/kernel/core/posixcall.c index 809460d..25ff841 100644 --- a/kernel/core/posixcall.c +++ b/kernel/core/posixcall.c @@ -353,6 +353,47 @@ int sys_setsid(void) return(ret_val); } +int sys_mmap(stack_frame_t *stk) +{ + int ret_val; + void *mapped; + void *addr; + size_t len; + int prot; + int flags; + int fd; + size_t offset; + process_t *cproc; + + ret_val = -EFAULT; + mapped = (void*)-1; + + addr = (void*)stk->ebx; + len = (size_t)stk->ecx; + prot = (int)stk->edx; + flags = (int)stk->esi; + fd = (int)stk->edi; + offset = (size_t)stk->ebp; + + cproc = process_get_current(); + + if(cproc) { + pg_dir_t *pgdir; + + ret_val = process_get_pagedir(cproc, &pgdir); + + if(!ret_val) { + ret_val = pg_dir_mmap(pgdir, addr, len, prot, flags, &mapped); + } + } + + if(!ret_val) { + ret_val = mapped; + } + + return(ret_val); +} + int sys_posixcall(stack_frame_t *stk) { int ret_val; @@ -405,6 +446,14 @@ int sys_posixcall(stack_frame_t *stk) ret_val = sys_execfve(stk); break; + case SYS_MMAP: + ret_val = sys_mmap(stk); + break; + + case SYS_MUNMAP: + ret_val = -ENOSYS; + break; + default: ret_val = -EOPNOTSUPP; break;