diff --git a/apps/app.c b/apps/app.c index 4ece3e50..cd7770c5 100644 --- a/apps/app.c +++ b/apps/app.c @@ -1,11 +1,9 @@ -#include #include #include #include #include -#include +#include #include -#include void bye() { @@ -24,17 +22,11 @@ int main() console_write("\n", 1); - long rc = syscall(SYS_allocate_memory, 4096, PROT_READ | PROT_WRITE); - if (rc < 0) - { - printf("allocate_memory: %s\n", strerror(-rc)); - return 1; - } - char* address = (char*)rc; + char* address = (char*)allocate_memory(PAGE_SIZE * 2, PROT_READ | PROT_WRITE); printf("address: %p\n", address); printf("memory at address: %c\n", *address); *address = 'e'; printf("memory at address: %c\n", *address); - syscall(SYS_deallocate_memory, address); + deallocate_memory(address, PAGE_SIZE * 2); } diff --git a/libc/CMakeLists.txt b/libc/CMakeLists.txt index b731ca1c..3a80c95c 100644 --- a/libc/CMakeLists.txt +++ b/libc/CMakeLists.txt @@ -10,6 +10,7 @@ set(SOURCES src/atexit.cpp src/ctype.cpp src/time.cpp + src/sys/mman.cpp ) if(${ARCH} STREQUAL "x86_64") diff --git a/libc/include/sys/mman.h b/libc/include/sys/mman.h new file mode 100644 index 00000000..90e8c04a --- /dev/null +++ b/libc/include/sys/mman.h @@ -0,0 +1,23 @@ +#ifndef _LUNA_MMAN_H +#define _LUNA_MMAN_H + +#include +#include + +#define PAGE_SIZE 4096 + +#define MAP_FAILED (void*)-1 + +#ifdef __cplusplus +extern "C" +{ +#endif + + void* allocate_memory(size_t size, int flags); + int deallocate_memory(void* address, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libc/src/sys/mman.cpp b/libc/src/sys/mman.cpp new file mode 100644 index 00000000..f06264f6 --- /dev/null +++ b/libc/src/sys/mman.cpp @@ -0,0 +1,19 @@ +#include +#include +#include +#include + +extern "C" +{ + void* allocate_memory(size_t size, int flags) + { + long rc = syscall(SYS_allocate_memory, size, flags); + __errno_return(rc, void*); + } + + int deallocate_memory(void* address, size_t size) + { + long rc = syscall(SYS_deallocate_memory, address, size); + __errno_return(rc, int); + } +}