mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
syscalls: munmap
This commit is contained in:
@@ -27,7 +27,8 @@ extern syscall_chdir
|
||||
extern syscall_fstatat
|
||||
extern syscall_pipe2
|
||||
extern syscall_mkdir
|
||||
func_count equ 26
|
||||
extern syscall_munmap
|
||||
func_count equ 27
|
||||
|
||||
|
||||
func_table:
|
||||
@@ -57,6 +58,7 @@ func_table:
|
||||
dq syscall_fstatat
|
||||
dq syscall_pipe2
|
||||
dq syscall_mkdir
|
||||
dq syscall_munmap
|
||||
section .text
|
||||
global asm_syscall_entry
|
||||
|
||||
|
||||
+3
-1
@@ -513,10 +513,12 @@ bool vmm_unmap(void* addr, size_t pagec){
|
||||
|
||||
spinlock_acquire(lock);
|
||||
|
||||
unmap(start, addr, pagec);
|
||||
bool ret = unmap(start, addr, pagec);
|
||||
|
||||
spinlock_release(lock);
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
bool vmm_setused(void* addr, size_t pagec, size_t mmuflags){
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#include <kernel/vmm.h>
|
||||
#include <kernel/syscalls.h>
|
||||
#include <arch/cls.h>
|
||||
|
||||
syscallret syscall_munmap(void* addr, size_t length){
|
||||
|
||||
syscallret retv;
|
||||
retv.ret = -1;
|
||||
|
||||
if(length == 0 || length % PAGE_SIZE > 0){
|
||||
retv.errno = EINVAL;
|
||||
return retv;
|
||||
}
|
||||
|
||||
if(addr > USER_SPACE_END){
|
||||
retv.errno = EFAULT;
|
||||
return retv;
|
||||
}
|
||||
|
||||
bool res = vmm_unmap(addr, length / PAGE_SIZE);
|
||||
|
||||
retv.ret = 0;
|
||||
retv.errno = 0;
|
||||
|
||||
if(!res){
|
||||
retv.errno = ENOMEM;
|
||||
retv.ret = -1;
|
||||
}
|
||||
|
||||
return retv;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user