mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 06:58:22 +00:00
syscalls: munmap
This commit is contained in:
@@ -27,7 +27,8 @@ extern syscall_chdir
|
|||||||
extern syscall_fstatat
|
extern syscall_fstatat
|
||||||
extern syscall_pipe2
|
extern syscall_pipe2
|
||||||
extern syscall_mkdir
|
extern syscall_mkdir
|
||||||
func_count equ 26
|
extern syscall_munmap
|
||||||
|
func_count equ 27
|
||||||
|
|
||||||
|
|
||||||
func_table:
|
func_table:
|
||||||
@@ -57,6 +58,7 @@ func_table:
|
|||||||
dq syscall_fstatat
|
dq syscall_fstatat
|
||||||
dq syscall_pipe2
|
dq syscall_pipe2
|
||||||
dq syscall_mkdir
|
dq syscall_mkdir
|
||||||
|
dq syscall_munmap
|
||||||
section .text
|
section .text
|
||||||
global asm_syscall_entry
|
global asm_syscall_entry
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -513,10 +513,12 @@ bool vmm_unmap(void* addr, size_t pagec){
|
|||||||
|
|
||||||
spinlock_acquire(lock);
|
spinlock_acquire(lock);
|
||||||
|
|
||||||
unmap(start, addr, pagec);
|
bool ret = unmap(start, addr, pagec);
|
||||||
|
|
||||||
spinlock_release(lock);
|
spinlock_release(lock);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vmm_setused(void* addr, size_t pagec, size_t mmuflags){
|
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