From 267a62d292205a20640d38374cf13025346d89a2 Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 7 Apr 2022 00:04:12 +0300 Subject: [PATCH] don't use mmap in allocStack for WASI --- makefile | 2 +- src/opt/mm_buddyTemplate.c | 2 +- src/vm.c | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/makefile b/makefile index 78b8af88..42cd2d0d 100644 --- a/makefile +++ b/makefile @@ -29,7 +29,7 @@ heapverifyn-singeli: rtverifyn-singeli: @${MAKE} singeli=1 t=rtverifyn_si f="-O3 -DRT_VERIFY -DEEQUAL_NEGZERO -march=native" c wasi-o3: - @${MAKE} singeli=0 t=wasi_o3 f="-DWASM -DWASI -O3 -DCATCH_ERRORS=0 -D_WASI_EMULATED_MMAN --target=wasm32-wasi" LDFLAGS="-lwasi-emulated-mman --target=wasm32-wasi" LD_LIBS= PIE= c + @${MAKE} singeli=0 t=wasi_o3 f="-DWASM -DWASI -DNO_MMAP -O3 -DCATCH_ERRORS=0 -D_WASI_EMULATED_MMAN --target=wasm32-wasi" LDFLAGS="-lwasi-emulated-mman --target=wasm32-wasi" LD_LIBS= PIE= c emcc-o3: @${MAKE} singeli=0 t=emcc_o3 f='-DWASM -DEMCC -O3' LDFLAGS='-s EXPORTED_FUNCTIONS=_main,_cbqn_runLine -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s ALLOW_MEMORY_GROWTH=1' CC=emcc c diff --git a/src/opt/mm_buddyTemplate.c b/src/opt/mm_buddyTemplate.c index 79fb1f73..79f187a9 100644 --- a/src/opt/mm_buddyTemplate.c +++ b/src/opt/mm_buddyTemplate.c @@ -39,7 +39,7 @@ static NOINLINE void* BN(allocateMore)(i64 bucket, u8 type, i64 from, i64 to) { if (mm_heapAlloc+sz >= mm_heapMax) thrOOM(); mm_heapAlloc+= sz; // gc_maybeGC(); - #if WASI + #if NO_MMAP EmptyValue* c = calloc(sz+getPageSize(), 1); #else EmptyValue* c = MMAP(sz); diff --git a/src/vm.c b/src/vm.c index a9e02e3b..8c5334eb 100644 --- a/src/vm.c +++ b/src/vm.c @@ -976,7 +976,13 @@ static void allocStack(void** curr, void** start, void** end, i32 elSize, i32 co usz ps = getPageSize(); u64 sz = (elSize*count + ps-1)/ps * ps; assert(sz%elSize == 0); - *curr = *start = mmap(NULL, sz+ps, PROT_READ|PROT_WRITE, MAP_NORESERVE|MAP_PRIVATE|MAP_ANON, -1, 0); + #if NO_MMAP + void* mem = malloc(sz+ps); + #else + void* mem = mmap(NULL, sz+ps, PROT_READ|PROT_WRITE, MAP_NORESERVE|MAP_PRIVATE|MAP_ANON, -1, 0); + if (*curr == MAP_FAILED) err("Failed to allocate stack"); + #endif + *curr = *start = mem; *end = ((char*)*start)+sz; #if !WASM mprotect(*end, ps, PROT_NONE); // idk first way i found to force erroring on overflow