MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / dump_memory_regions

Function dump_memory_regions

system/lib/emmalloc.c:357–402  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

355}
356
357static void dump_memory_regions() {
358 ASSERT_MALLOC_IS_ACQUIRED();
359 RootRegion *root = listOfAllRegions;
360 MAIN_THREAD_ASYNC_EM_ASM(out('All memory regions:'));
361 while (root) {
362 Region *r = (Region*)root;
363 assert(debug_region_is_consistent(r));
364 uint8_t *lastRegionEnd = root->endPtr;
365 MAIN_THREAD_ASYNC_EM_ASM(out('Region block '+ptrToString($0)+' - '+ptrToString($1)+ ' ('+Number($2)+' bytes):'),
366 r, lastRegionEnd, lastRegionEnd-(uint8_t*)r);
367 while ((uint8_t*)r < lastRegionEnd) {
368 MAIN_THREAD_ASYNC_EM_ASM(out('Region '+ptrToString($0)+', size: '+Number($1)+' ('+($2?"used":"--FREE--")+')'),
369 r, r->size, region_ceiling_size(r) == r->size);
370
371 assert(debug_region_is_consistent(r));
372 size_t sizeFromCeiling = size_of_region_from_ceiling(r);
373 if (sizeFromCeiling != r->size) {
374 MAIN_THREAD_ASYNC_EM_ASM(out('Corrupt region! Size marker at the end of the region does not match: '+Number($0)), sizeFromCeiling);
375 }
376 if (r->size == 0) {
377 break;
378 }
379 r = next_region(r);
380 }
381 root = root->next;
382 MAIN_THREAD_ASYNC_EM_ASM(out(""));
383 }
384 MAIN_THREAD_ASYNC_EM_ASM(out('Free regions:'));
385 for (int i = 0; i < NUM_FREE_BUCKETS; ++i) {
386 Region *prev = &freeRegionBuckets[i];
387 Region *fr = freeRegionBuckets[i].next;
388 while (fr != &freeRegionBuckets[i]) {
389 MAIN_THREAD_ASYNC_EM_ASM(out('In bucket '+$0+', free region '+ptrToString($1)+', size: ' + Number($2) + ' (size at ceiling: '+Number($3)+'), prev: ' + ptrToString($4) + ', next: ' + ptrToString($5)),
390 i, fr, fr->size, size_of_region_from_ceiling(fr), fr->prev, fr->next);
391 assert(debug_region_is_consistent(fr));
392 assert(region_is_free(fr));
393 assert(fr->prev == prev);
394 prev = fr;
395 assert(fr->next != fr);
396 assert(fr->prev != fr);
397 fr = fr->next;
398 }
399 }
400 MAIN_THREAD_ASYNC_EM_ASM(out('Free bucket index map: ' + Number($0).toString(2) + ' ' + Number($1).toString(2)), (uint32_t)(freeRegionBucketsUsed >> 32), (uint32_t)freeRegionBucketsUsed);
401 MAIN_THREAD_ASYNC_EM_ASM(out(""));
402}
403
404void emmalloc_dump_memory_regions() {
405 MALLOC_ACQUIRE();

Callers 1

Calls 8

ptrToStringFunction · 0.85
region_ceiling_sizeFunction · 0.85
next_regionFunction · 0.85
region_is_freeFunction · 0.85
outFunction · 0.50
assertFunction · 0.50

Tested by

no test coverage detected