zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cbbf8c8a2d77d84ce88ea1cef9a3e7d54081e33d (tree)
parent 4b329176460d91056b75f0798778b1c58e0f104b
Author: Frank Denis <124872+jedisct1@users.noreply.github.com>
Date:   Thu, 12 Jan 2023 14:48:14 +0100

wasi-libc: use __heap_end if available (#14273)

The symbol was introduced in LLD 15.0.7, as a way to know how
much memory can be allocated:

https://github.com/llvm/llvm-project/commit/1095870e8ceddc5371f446f4e7c3473f89a461cd
https://github.com/WebAssembly/wasi-libc/pull/377
Diffstat:
Mlib/libc/wasi/emmalloc/emmalloc.c | 6+++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lib/libc/wasi/emmalloc/emmalloc.c b/lib/libc/wasi/emmalloc/emmalloc.c @@ -56,6 +56,7 @@ // Defind by the linker to have the address of the start of the heap. extern unsigned char __heap_base; +extern unsigned char __heap_end __attribute__((__weak__)); // Behavior of right shifting a signed integer is compiler implementation defined. static_assert((((int32_t)0x80000000U) >> 31) == -1, "This malloc implementation requires that right-shifting a signed integer produces a sign-extending (arithmetic) shift!"); @@ -545,7 +546,10 @@ static bool claim_more_memory(size_t numBytes) // If this is the first time we're called, see if we can use // the initial heap memory set up by wasm-ld. if (!listOfAllRegions) { - unsigned char *heap_end = sbrk(0); + unsigned char *heap_end = &__heap_end; + if (heap_end == NULL) + heap_end = sbrk(0); + if (numBytes <= (size_t)(heap_end - &__heap_base)) { startPtr = &__heap_base; endPtr = heap_end;