Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
mmap.c File Reference
#include "hal/cpu/core.h"
#include "hal/cpu/paging.h"
#include "libk/serial.h"
#include "memory/memory_utils.h"
#include "memory/phys_base_allocator.h"
#include "memory/vm_manager.h"
#include "sys/err_no.h"
#include <str.h>
#include <sys/syscall.h>

Go to the source code of this file.

Macros

#define MAP_FAILED   ((void*)-1)
 
#define MAP_SHARED   0x01
 
#define MAP_PRIVATE   0x02
 
#define MAP_SHARED_VALIDATE   0x03
 
#define MAP_TYPE   0x0f
 
#define MAP_FIXED   0x10
 
#define MAP_ANON   0x20
 
#define MAP_ANONYMOUS   MAP_ANON
 
#define MAP_NORESERVE   0x4000
 
#define MAP_GROWSDOWN   0x0100
 
#define MAP_DENYWRITE   0x0800
 
#define MAP_EXECUTABLE   0x1000
 
#define MAP_LOCKED   0x2000
 
#define MAP_POPULATE   0x8000
 
#define MAP_NONBLOCK   0x10000
 
#define MAP_STACK   0x20000
 
#define MAP_HUGETLB   0x40000
 
#define MAP_SYNC   0x80000
 
#define MAP_FIXED_NOREPLACE   0x100000
 
#define MAP_FILE   0
 
#define MAP_HUGE_SHIFT   26
 
#define MAP_HUGE_MASK   0x3f
 
#define MAP_HUGE_16KB   (14 << 26)
 
#define MAP_HUGE_64KB   (16 << 26)
 
#define MAP_HUGE_512KB   (19 << 26)
 
#define MAP_HUGE_1MB   (20 << 26)
 
#define MAP_HUGE_2MB   (21 << 26)
 
#define MAP_HUGE_8MB   (23 << 26)
 
#define MAP_HUGE_16MB   (24 << 26)
 
#define MAP_HUGE_32MB   (25 << 26)
 
#define MAP_HUGE_256MB   (28 << 26)
 
#define MAP_HUGE_512MB   (29 << 26)
 
#define MAP_HUGE_1GB   (30 << 26)
 
#define MAP_HUGE_2GB   (31 << 26)
 
#define MAP_HUGE_16GB   (34U << 26)
 

Functions

static uint64_t mmap_prot_to_flags (int prot)
 
static uintptr_t mmap_resolve_virt_addr (void *addr, int flags, struct virtual_memory_page *vm_page, size_t len_4kb)
 
static void * mmap_handle_anonymous (thread_t *thr, process_t *procc, void *addr, int flags, size_t len_4kb, uint64_t mmap_flags)
 
void * syscall_mmap (void *addr, size_t len, int prot, int flags, int fd, long off)
 

Macro Definition Documentation

◆ MAP_ANON

#define MAP_ANON   0x20

Definition at line 18 of file mmap.c.

◆ MAP_ANONYMOUS

#define MAP_ANONYMOUS   MAP_ANON

Definition at line 19 of file mmap.c.

Referenced by syscall_mmap().

◆ MAP_DENYWRITE

#define MAP_DENYWRITE   0x0800

Definition at line 22 of file mmap.c.

◆ MAP_EXECUTABLE

#define MAP_EXECUTABLE   0x1000

Definition at line 23 of file mmap.c.

◆ MAP_FAILED

#define MAP_FAILED   ((void*)-1)

Definition at line 11 of file mmap.c.

◆ MAP_FILE

#define MAP_FILE   0

Definition at line 31 of file mmap.c.

◆ MAP_FIXED

#define MAP_FIXED   0x10

Definition at line 17 of file mmap.c.

Referenced by mmap_handle_anonymous(), and mmap_resolve_virt_addr().

◆ MAP_FIXED_NOREPLACE

#define MAP_FIXED_NOREPLACE   0x100000

Definition at line 30 of file mmap.c.

◆ MAP_GROWSDOWN

#define MAP_GROWSDOWN   0x0100

Definition at line 21 of file mmap.c.

◆ MAP_HUGE_16GB

#define MAP_HUGE_16GB   (34U << 26)

Definition at line 47 of file mmap.c.

◆ MAP_HUGE_16KB

#define MAP_HUGE_16KB   (14 << 26)

Definition at line 35 of file mmap.c.

◆ MAP_HUGE_16MB

#define MAP_HUGE_16MB   (24 << 26)

Definition at line 41 of file mmap.c.

◆ MAP_HUGE_1GB

#define MAP_HUGE_1GB   (30 << 26)

Definition at line 45 of file mmap.c.

◆ MAP_HUGE_1MB

#define MAP_HUGE_1MB   (20 << 26)

Definition at line 38 of file mmap.c.

◆ MAP_HUGE_256MB

#define MAP_HUGE_256MB   (28 << 26)

Definition at line 43 of file mmap.c.

◆ MAP_HUGE_2GB

#define MAP_HUGE_2GB   (31 << 26)

Definition at line 46 of file mmap.c.

◆ MAP_HUGE_2MB

#define MAP_HUGE_2MB   (21 << 26)

Definition at line 39 of file mmap.c.

◆ MAP_HUGE_32MB

#define MAP_HUGE_32MB   (25 << 26)

Definition at line 42 of file mmap.c.

◆ MAP_HUGE_512KB

#define MAP_HUGE_512KB   (19 << 26)

Definition at line 37 of file mmap.c.

◆ MAP_HUGE_512MB

#define MAP_HUGE_512MB   (29 << 26)

Definition at line 44 of file mmap.c.

◆ MAP_HUGE_64KB

#define MAP_HUGE_64KB   (16 << 26)

Definition at line 36 of file mmap.c.

◆ MAP_HUGE_8MB

#define MAP_HUGE_8MB   (23 << 26)

Definition at line 40 of file mmap.c.

◆ MAP_HUGE_MASK

#define MAP_HUGE_MASK   0x3f

Definition at line 34 of file mmap.c.

◆ MAP_HUGE_SHIFT

#define MAP_HUGE_SHIFT   26

Definition at line 33 of file mmap.c.

◆ MAP_HUGETLB

#define MAP_HUGETLB   0x40000

Definition at line 28 of file mmap.c.

◆ MAP_LOCKED

#define MAP_LOCKED   0x2000

Definition at line 24 of file mmap.c.

◆ MAP_NONBLOCK

#define MAP_NONBLOCK   0x10000

Definition at line 26 of file mmap.c.

◆ MAP_NORESERVE

#define MAP_NORESERVE   0x4000

Definition at line 20 of file mmap.c.

◆ MAP_POPULATE

#define MAP_POPULATE   0x8000

Definition at line 25 of file mmap.c.

◆ MAP_PRIVATE

#define MAP_PRIVATE   0x02

Definition at line 14 of file mmap.c.

Referenced by syscall_mmap().

◆ MAP_SHARED

#define MAP_SHARED   0x01

Definition at line 13 of file mmap.c.

◆ MAP_SHARED_VALIDATE

#define MAP_SHARED_VALIDATE   0x03

Definition at line 15 of file mmap.c.

◆ MAP_STACK

#define MAP_STACK   0x20000

Definition at line 27 of file mmap.c.

◆ MAP_SYNC

#define MAP_SYNC   0x80000

Definition at line 29 of file mmap.c.

◆ MAP_TYPE

#define MAP_TYPE   0x0f

Definition at line 16 of file mmap.c.

Function Documentation

◆ mmap_handle_anonymous()

static void * mmap_handle_anonymous ( thread_t * thr,
process_t * procc,
void * addr,
int flags,
size_t len_4kb,
uint64_t mmap_flags )
static

◆ mmap_prot_to_flags()

static uint64_t mmap_prot_to_flags ( int prot)
static

Definition at line 49 of file mmap.c.

References flags, PAGE_NO_EXECUTE, PAGE_PRESENT, PAGE_WRITABLE, PROT_EXEC, PROT_NONE, PROT_READ, and PROT_WRITE.

Referenced by syscall_mmap().

◆ mmap_resolve_virt_addr()

static uintptr_t mmap_resolve_virt_addr ( void * addr,
int flags,
struct virtual_memory_page * vm_page,
size_t len_4kb )
static

Definition at line 64 of file mmap.c.

References addr, flags, MAP_FIXED, vm_page, vma_lookup_free_vaddr(), and VMA_REGION_PROCESS.

Referenced by mmap_handle_anonymous().

◆ syscall_mmap()

void * syscall_mmap ( void * addr,
size_t len,
int prot,
int flags,
int fd,
long off )