Skip to content

Commit 3af9d8d

Browse files
authored
Fix emscripten_heap_resize (#13716)
This is a partial revert of #13695 which broke test_zzz_zzz_emmalloc_4gb. The `oldSize` argument was being interpreted by signed by JS. Simpler just to read it directly rather than use the wrapper function.
1 parent cc2fc36 commit 3af9d8d

16 files changed

+34
-49
lines changed

src/library.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ LibraryManager.library = {
238238
},
239239
#endif // ~TEST_MEMORY_GROWTH_FAILS
240240

241-
__emscripten_resize_heap__deps: [
241+
emscripten_resize_heap__deps: [
242242
#if ASSERTIONS == 2
243243
, 'emscripten_get_now'
244244
#endif
@@ -249,7 +249,8 @@ LibraryManager.library = {
249249
, '$emscripten_realloc_buffer'
250250
#endif
251251
],
252-
__emscripten_resize_heap: function(oldSize, requestedSize) {
252+
emscripten_resize_heap: function(requestedSize) {
253+
var oldSize = HEAPU8.length;
253254
#if CAN_ADDRESS_2GB
254255
requestedSize = requestedSize >>> 0;
255256
#endif

system/lib/libc/emscripten_resize_heap.c

Lines changed: 0 additions & 17 deletions
This file was deleted.

system/lib/standalone/standalone.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,9 @@ size_t emscripten_get_heap_max() {
124124
return emscripten_get_heap_size();
125125
}
126126

127-
int __emscripten_resize_heap(size_t old_size, size_t size) {
127+
int emscripten_resize_heap(size_t size) {
128128
#ifdef __EMSCRIPTEN_MEMORY_GROWTH__
129+
size_t old_size = __builtin_wasm_memory_size(0) * WASM_PAGE_SIZE;
129130
assert(old_size < size);
130131
ssize_t diff = (size - old_size + WASM_PAGE_SIZE - 1) / WASM_PAGE_SIZE;
131132
size_t result = __builtin_wasm_memory_grow(0, diff);

tests/mem_growth.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,26 @@
33
#include <emscripten/html5.h>
44
#include <emscripten/heap.h>
55

6-
size_t prevheapsize = 0;
7-
EM_BOOL tick(double time, void *userData)
8-
{
9-
size_t heap_size = emscripten_get_heap_size();
10-
if (prevheapsize != heap_size)
11-
printf("Heap size: %llu\n", (unsigned long long) heap_size);
12-
prevheapsize = heap_size;
13-
void *ptr = malloc(16*1024*1024);
14-
if (!ptr)
15-
{
16-
printf("Cannot malloc anymore. Final heap size: %llu\n", (unsigned long long)emscripten_get_heap_size());
6+
EM_BOOL tick(double time, void *userData) {
7+
static size_t prevheapsize = 0;
8+
static int count = 0;
9+
size_t heap_size = emscripten_get_heap_size();
10+
if (prevheapsize != heap_size) {
11+
printf("Heap size: %zu inc: %zu count: %d\n", heap_size, heap_size - prevheapsize, count);
12+
}
13+
14+
prevheapsize = heap_size;
15+
void *ptr = malloc(16*1024*1024);
16+
if (!ptr) {
17+
printf("Cannot malloc anymore. Final heap size: %llu\n", (unsigned long long)emscripten_get_heap_size());
1718
#ifdef REPORT_RESULT
18-
REPORT_RESULT(emscripten_get_heap_size());
19+
REPORT_RESULT(emscripten_get_heap_size());
1920
#endif
20-
}
21-
return !!ptr;
21+
}
22+
count++;
23+
return !!ptr;
2224
}
2325

24-
int main()
25-
{
26-
emscripten_request_animation_frame_loop(tick, 0);
26+
int main() {
27+
emscripten_request_animation_frame_loop(tick, 0);
2728
}

tests/other/metadce/hello_libcxx_O2.imports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
env.__emscripten_resize_heap
21
env.abort
32
env.emscripten_memcpy_big
3+
env.emscripten_resize_heap
44
env.setTempRet0
55
env.strftime_l
66
wasi_snapshot_preview1.environ_get

tests/other/metadce/hello_libcxx_O2.sent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
__cxa_atexit
2-
__emscripten_resize_heap
32
abort
43
emscripten_memcpy_big
4+
emscripten_resize_heap
55
environ_get
66
environ_sizes_get
77
fd_close

tests/other/metadce/hello_libcxx_O2_fexceptions.imports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ env.__cxa_free_exception
77
env.__cxa_rethrow
88
env.__cxa_throw
99
env.__cxa_uncaught_exceptions
10-
env.__emscripten_resize_heap
1110
env.__resumeException
1211
env.abort
1312
env.emscripten_memcpy_big
13+
env.emscripten_resize_heap
1414
env.getTempRet0
1515
env.invoke_diii
1616
env.invoke_fiii

tests/other/metadce/hello_libcxx_O2_fexceptions.sent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ __cxa_free_exception
88
__cxa_rethrow
99
__cxa_throw
1010
__cxa_uncaught_exceptions
11-
__emscripten_resize_heap
1211
__resumeException
1312
abort
1413
emscripten_memcpy_big
14+
emscripten_resize_heap
1515
environ_get
1616
environ_sizes_get
1717
fd_close

tests/other/metadce/hello_libcxx_O2_fexceptions_DEMANGLE_SUPPORT.imports

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ env.__cxa_free_exception
77
env.__cxa_rethrow
88
env.__cxa_throw
99
env.__cxa_uncaught_exceptions
10-
env.__emscripten_resize_heap
1110
env.__resumeException
1211
env.abort
1312
env.emscripten_memcpy_big
13+
env.emscripten_resize_heap
1414
env.getTempRet0
1515
env.invoke_diii
1616
env.invoke_fiii

tests/other/metadce/hello_libcxx_O2_fexceptions_DEMANGLE_SUPPORT.sent

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ __cxa_free_exception
88
__cxa_rethrow
99
__cxa_throw
1010
__cxa_uncaught_exceptions
11-
__emscripten_resize_heap
1211
__resumeException
1312
abort
1413
emscripten_memcpy_big
14+
emscripten_resize_heap
1515
environ_get
1616
environ_sizes_get
1717
fd_close

0 commit comments

Comments
 (0)