From ccc86342cdd305b53fc0c3b815f2dedd8d7c47a2 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 9 Jun 2024 01:45:29 +0100 Subject: [PATCH] Add address parameter to wapp_mem_util_alloc --- src/mem/util/mem_utils.c | 20 ++++++++++---------- src/mem/util/mem_utils.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/mem/util/mem_utils.c b/src/mem/util/mem_utils.c index e642e9b..2e03581 100644 --- a/src/mem/util/mem_utils.c +++ b/src/mem/util/mem_utils.c @@ -19,7 +19,7 @@ internal const i32 access_types[] = { [WAPP_MEM_ACCESS_READ_WRITE_EXEC] = PAGE_EXECUTE_READWRITE, }; -internal inline void *alloc_windows(u64 size, MemAccess access, +internal inline void *alloc_windows(void *addr, u64 size, MemAccess access, MemAllocFlags flags); #elif defined(WAPP_PLATFORM_POSIX) #include @@ -33,7 +33,7 @@ internal const i32 access_types[] = { [WAPP_MEM_ACCESS_READ_WRITE_EXEC] = PROT_READ | PROT_WRITE | PROT_EXEC, }; -internal inline void *alloc_posix(u64 size, MemAccess access, +internal inline void *alloc_posix(void *addr, u64 size, MemAccess access, MemAllocFlags flags); #else #error "Unrecognised platform" @@ -62,17 +62,17 @@ void *wapp_mem_util_align_forward(void *ptr, u64 alignment) { return (void *)p; } -void *wapp_mem_util_alloc(u64 size, MemAccess access, MemAllocFlags flags, - MemInitType type) { +void *wapp_mem_util_alloc(void *addr, u64 size, MemAccess access, + MemAllocFlags flags, MemInitType type) { #if defined(WAPP_PLATFORM_WINDOWS) // Ensure memory is committed if it's meant to be initialised if (type == WAPP_MEM_INIT_INITIALISED) { flags |= WAPP_MEM_ALLOC_COMMIT; } - void *output = alloc_windows(size, access, flags); + void *output = alloc_windows(addr, size, access, flags); #elif defined(WAPP_PLATFORM_POSIX) - void *output = alloc_posix(size, access, flags); + void *output = alloc_posix(addr, size, access, flags); #else return NULL; #endif @@ -93,14 +93,14 @@ void wapp_mem_util_free(void *ptr, u64 size) { } #ifdef WAPP_PLATFORM_WINDOWS -internal inline void *alloc_windows(u64 size, MemAccess access, +internal inline void *alloc_windows(void *addr, u64 size, MemAccess access, MemAllocFlags flags) { - return VirtualAlloc2(NULL, NULL, (SIZE_T)size, flags, access_types[access]); + return VirtualAlloc2(addr, NULL, (SIZE_T)size, flags, access_types[access]); } #endif #if defined(WAPP_PLATFORM_POSIX) -internal inline void *alloc_posix(u64 size, MemAccess access, +internal inline void *alloc_posix(void *addr, u64 size, MemAccess access, MemAllocFlags flags) { i32 alloc_flags = flags | MAP_ANON | MAP_PRIVATE; @@ -109,6 +109,6 @@ internal inline void *alloc_posix(u64 size, MemAccess access, alloc_flags |= MAP_NORESERVE; #endif - return mmap(NULL, size, access_types[access], alloc_flags, -1, 0); + return mmap(addr, size, access_types[access], alloc_flags, -1, 0); } #endif diff --git a/src/mem/util/mem_utils.h b/src/mem/util/mem_utils.h index 20c3896..e844f7f 100644 --- a/src/mem/util/mem_utils.h +++ b/src/mem/util/mem_utils.h @@ -49,8 +49,8 @@ typedef enum mem_init_type { } MemInitType; void *wapp_mem_util_align_forward(void *ptr, u64 alignment); -void *wapp_mem_util_alloc(u64 size, MemAccess access, MemAllocFlags flags, - MemInitType type); +void *wapp_mem_util_alloc(void *addr, u64 size, MemAccess access, + MemAllocFlags flags, MemInitType type); void wapp_mem_util_free(void *ptr, u64 size); #ifdef __cplusplus