ELF > , @ @ Y X runtime/shared_heap.c POOL_BLOCK_FREE_HP(v) end == p !Is_young(v) Tag_val(v) == Closure_tag Is_block(fwd) Tag_val(fwd) == tag !POOL_BLOCK_FREE_HP(p) tag != Infix_tag runtime/caml/mlvalues.h val & 1 pool->sz == sz lock unlock Whsize_hd(hd) <= wh a->owner == local->owner Is_block((value)p) p == end Caml_state_opt != NULL !heap->unswept_avail_pools[i] !heap->unswept_full_pools[i] !heap->unswept_large !heap->avail_pools[i] !heap->full_pools[i] !heap->swept_large wosize > 0 wsize_sizeclass[sz] >= whsize POOL_BLOCK_FREE_HP(next_obj) pool_freelist.free == NULL r->owner == NULL p < (value*)r + POOL_WSIZE POOL_BLOCK_FREE_HP(p) p->next_obj == NULL local->unswept_large == NULL Hd_val(v) Compacting heap start heap->swept_large == NULL caml_mark_stack_is_empty() total_free_blocks > 0 POOL_BLOCK_FREE_HP(new_p) Compacting heap complete Cycling heap [%02d] POOL_BLOCK_FREE_HD(hd) || !Has_status_hd(hd, caml_global_heap_state.GARBAGE) POOL_BLOCK_FREE_HP(last_free_block) (all_used && !a->next_obj) || (!all_used && POOL_BLOCK_FREE_HP(a->next_obj)) Orphan shared heap. Released %d active pools, %d large Received %d new pools, %d new large allocs r == NULL || r->owner == local->owner (uintptr_t)end % Cache_line_bsize == 0 p >= (value*)POOL_FIRST_BLOCK(r, sz) p[1] == 0 || POOL_BLOCK_FREE_HP(p[1]) (r->next_obj == 0 && local->full_pools[sz] == r) || POOL_BLOCK_FREE_HP(r->next_obj) local->next_to_sweep == NUM_SIZECLASSES local->unswept_avail_pools[i] == NULL local->unswept_full_pools[i] == NULL Pooled memory: %lu allocated, %lu free, %lu fragmentation !Has_status_hd(hd, caml_global_heap_state.GARBAGE) Large memory: %lu allocated, %lu free, %lu fragmentation local->stats.pool_words == pool_stats.allocated local->stats.pool_live_words == pool_stats.live local->stats.pool_live_blocks == pool_stats.live_blocks local->stats.pool_frag_words == pool_stats.overhead local->stats.pool_words - (local->stats.pool_live_words + local->stats.pool_frag_words) == pool_stats.free local->stats.large_words == large_stats.allocated local->stats.large_blocks == large_stats.live_blocks Has_status_val(v, caml_global_heap_state.UNMARKED) heap->avail_pools[sz_class] == NULL heap->full_pools[sz_class] == NULL atomic_load_relaxed(&pool_freelist.global_avail_pools[sz_class]) == NULL atomic_load_relaxed(&pool_freelist.global_full_pools[sz_class]) == NULL Caml_state->young_ptr == Caml_state->young_end Unable to allocate pool_stats for size class %d !Has_status_hd(hd, caml_global_heap_state.MARKED) !Has_status_hd(hd, NOT_MARKABLE) POOL_FIRST_BLOCK(to_pool, sz_class) <= (header_t*)next (header_t*)next <= POOL_END(to_pool) Finalise freelist. Freed %d large AWL= AVL5 AUIATAUHSHH_Ht*fH< H% H= H[HuH H B F