From 4084336705595db25dbdfce1d42946dd60e4ae80 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sun, 9 Nov 2025 22:21:19 +0100 Subject: [PATCH] ulib Add umallocbig() and ufreebig() for non-fragmented allocations --- ulib/umalloc/umalloc.c | 15 +++++++++++++++ ulib/umalloc/umalloc.h | 2 ++ ulib/util/util.h | 2 ++ 3 files changed, 19 insertions(+) diff --git a/ulib/umalloc/umalloc.c b/ulib/umalloc/umalloc.c index ade581c..0c6390c 100644 --- a/ulib/umalloc/umalloc.c +++ b/ulib/umalloc/umalloc.c @@ -148,3 +148,18 @@ void *urealloc(void *ptr, size_t newsize) { err: return NULL; } + +void *umallocbig(size_t size) { + size_t allocsz = ALIGN_UP(size, 4096); + uint8_t *out; + int32_t ret = mman_map(NULL, allocsz, MMAN_MAP_PF_RW, 0, &out); + if (out == NULL || ret != E_OK) { + return NULL; + } + return out; +} + +void ufreebig(void *addr) { + if (addr != NULL) + mman_unmap(addr); +} diff --git a/ulib/umalloc/umalloc.h b/ulib/umalloc/umalloc.h index 96fd7f8..c83bb28 100644 --- a/ulib/umalloc/umalloc.h +++ b/ulib/umalloc/umalloc.h @@ -7,5 +7,7 @@ void *umalloc(size_t size); void ufree(void *ptr_); void *urealloc(void *ptr, size_t newsize); +void *umallocbig(size_t size); +void ufreebig(void *addr); #endif // ULIB_UMALLOC_UMALLOC_H_ diff --git a/ulib/util/util.h b/ulib/util/util.h index db43075..2b880c2 100644 --- a/ulib/util/util.h +++ b/ulib/util/util.h @@ -21,6 +21,8 @@ (_a > _b ? _a : _b); \ }) +#define ALIGN_UP(x, align) (((x) + ((align)-1)) & ~((align)-1)) + void quit(void); #endif // ULIB_UTIL_UTIL_H_