Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Partially revert "Don't use sbrk(0) to determine the initial heap size" #386

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 4 additions & 15 deletions dlmalloc/src/malloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -5227,23 +5227,12 @@ static void try_init_allocator(void) {

char *base = &__heap_base;
// Try to use the linker pseudo-symbol `__heap_end` for the initial size of
// the heap, but if that's not defined due to LLVM being too old perhaps then
// round up `base` to the nearest `PAGESIZE`. The initial size of linear
// memory will be at least the heap base to this page boundary, and it's then
// assumed that the initial linear memory image was truncated at that point.
// While this reflects the default behavior of `wasm-ld` it is also possible
// for users to craft larger linear memories by passing options to extend
// beyond this threshold. In this situation the memory will not be used for
// dlmalloc.
//
// Note that `sbrk(0)`, or in dlmalloc-ese `CALL_MORECORE(0)`, is specifically
// not used here. That captures the current size of the heap but is only
// correct if the we're the first to try to grow the heap. If the heap has
// grown elsewhere, such as a different allocator in place, then this would
// incorrectly claim such memroy as our own.
// the heap, but if that's not defined due to LLVM being too old then
// fall back to assuming the heap extends to end of linear memory.
// (`CALL_MORECORE(0)`)
char *end = &__heap_end;
if (end == NULL)
end = (char*) page_align((size_t) base);
end = (char *)CALL_MORECORE(0);
size_t initial_heap_size = end - base;

/* Check that initial heap is long enough to serve a minimal allocation request. */
Expand Down