11#define MAP_FAILED ((void*)-1)
13#define MAP_SHARED 0x01
14#define MAP_PRIVATE 0x02
15#define MAP_SHARED_VALIDATE 0x03
19#define MAP_ANONYMOUS MAP_ANON
20#define MAP_NORESERVE 0x4000
21#define MAP_GROWSDOWN 0x0100
22#define MAP_DENYWRITE 0x0800
23#define MAP_EXECUTABLE 0x1000
24#define MAP_LOCKED 0x2000
25#define MAP_POPULATE 0x8000
26#define MAP_NONBLOCK 0x10000
27#define MAP_STACK 0x20000
28#define MAP_HUGETLB 0x40000
29#define MAP_SYNC 0x80000
30#define MAP_FIXED_NOREPLACE 0x100000
33#define MAP_HUGE_SHIFT 26
34#define MAP_HUGE_MASK 0x3f
35#define MAP_HUGE_16KB (14 << 26)
36#define MAP_HUGE_64KB (16 << 26)
37#define MAP_HUGE_512KB (19 << 26)
38#define MAP_HUGE_1MB (20 << 26)
39#define MAP_HUGE_2MB (21 << 26)
40#define MAP_HUGE_8MB (23 << 26)
41#define MAP_HUGE_16MB (24 << 26)
42#define MAP_HUGE_32MB (25 << 26)
43#define MAP_HUGE_256MB (28 << 26)
44#define MAP_HUGE_512MB (29 << 26)
45#define MAP_HUGE_1GB (30 << 26)
46#define MAP_HUGE_2GB (31 << 26)
47#define MAP_HUGE_16GB (34U << 26)
77 int flags,
size_t len_4kb,
92 serial2_printf(
"mmaped virt=0x%x phys=0x%x flags=%b\n", virt_addr, phys,
97 return (
void*)virt_addr;
103 auto procc = thr ? thr->process :
nullptr;
108 serial_trace(
"mmap_request: addr=0x%x len=0x%x prot=%d "
109 "flags=0x%x fd=0x%x off=0x%x\n",
each_core_data * get_current_core_data(void)
void serial2_printf(const char *fmt,...)
#define ALIGN_UP(x, align)
void * syscall_mmap(void *addr, size_t len, int prot, int flags, int fd, long off)
static uintptr_t mmap_resolve_virt_addr(void *addr, int flags, struct virtual_memory_page *vm_page, size_t len_4kb)
static uint64_t mmap_prot_to_flags(int prot)
static void * mmap_handle_anonymous(thread_t *thr, process_t *procc, void *addr, int flags, size_t len_4kb, uint64_t mmap_flags)
void vxMultipleMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t size, uint64_t flags)
void * phys_base_alloc(uint64_t block)
struct virtual_memory_page * vm_page
#define serial_trace(...)
volatile uintptr_t * page
uintptr_t vma_lookup_free_vaddr(struct virtual_memory_page *page, mem_vma_region region, size_t size)
void vma_register(struct virtual_memory_page *page, uintptr_t phys_address, uintptr_t virt_addr, size_t size)