Can hit assertion failure related to segment_slices with a relatively specific allocation size
While trying to find differences in behaviour for very large allocation requests - larger than my RAM FWIW - I found a range of sizes where instead of getting NULL returned from mi_malloc, I get a SIGABORT from a failed assertion:
The code I run is using rakudo or nqp, I just ask for an array of pointers and set a value at a very high index:
nqp -e 'my @foo; @foo[2 ** 45 - 2 ** 19] := 1'
This results in a request to allocate a buffer for the array of size 0xFFFFFFC01000.
That then ends up triggering the following assertion:
mi_segment_alloc (required=281474976710656, page_alignment=0, req_arena_id=0, tld=0x7f0662b9bf20 <tld_main+32>,
huge_page=0x7ffcac7591c0) at 3rdparty/mimalloc/src/segment.c:901
901 mi_assert_internal(segment_slices > 0 && segment_slices <= UINT32_MAX);
(rr)
_mi_assert_fail (assertion=0x7f0662a05288 "segment_slices > 0 && segment_slices <= UINT32_MAX",
fname=0x7f0662a04788 "3rdparty/mimalloc/src/segment.c", line=901,
func=0x7f0662a07790 <__func__.28> "mi_segment_alloc") at 3rdparty/mimalloc/src/options.c:529
529 _mi_fprintf(NULL, NULL, "mimalloc: assertion failed: at \"%s\":%u, %s\n assertion: \"%s\"\n", fname, line, (func==NULL?"":func), assertion);
(rr) reverse-finish
Run back to call of #0 _mi_assert_fail (
assertion=0x7f0662a05288 "segment_slices > 0 && segment_slices <= UINT32_MAX",
fname=0x7f0662a04788 "3rdparty/mimalloc/src/segment.c", line=901,
func=0x7f0662a07790 <__func__.28> "mi_segment_alloc") at 3rdparty/mimalloc/src/options.c:529
0x00007f06623ef31d in mi_segment_alloc (required=281474976710656, page_alignment=0, req_arena_id=0,
tld=0x7f0662b9bf20 <tld_main+32>, huge_page=0x7ffcac7591c0) at 3rdparty/mimalloc/src/segment.c:901
901 mi_assert_internal(segment_slices > 0 && segment_slices <= UINT32_MAX);
(rr) print segment_slices
$25 = 4294967297
(rr) print UINT32_MAX
$26 = 4294967295
(rr)
This is a 64bit Fedora Linux 41 on an AMD Ryzen processor with 64 gigabytes of RAM installed.
Trying just mi_malloc(0xFFFFFFC01000) at the top of moarvm's int main without before doing anything else (shared libraries would still be initialised) also reproduces this assertion failure, so if you need to repro this, that should really be all you need.
Quick GDB session stepping from mi_malloc to the abort with some random debug output in the middle
(rr) call mi_debug_show_arenas()
mimalloc: arena 0: 32 blocks of size 32MiB (in 1 fields)
mimalloc: inuse blocks:
mimalloc: xx..............................
mimalloc: total ('x'): 2
mimalloc: committed blocks:
mimalloc: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mimalloc: total ('x'): 32
mimalloc: total inuse blocks : 2
(rr) call mi_debug_show_arenas(1,1,1)
mimalloc: arena 0: 32 blocks of size 32MiB (in 1 fields)
mimalloc: inuse blocks:
mimalloc: xx..............................
mimalloc: total ('x'): 2
mimalloc: committed blocks:
mimalloc: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
mimalloc: total ('x'): 32
mimalloc: total inuse blocks : 2
(rr) call mi_stats_print(NULL)
heap stats: peak total current block total#
bin 1: 118.8 KiB 133.2 KiB 118.8 KiB 8 B 16.9 K not all freed
bin 4: 983.3 KiB 1.1 MiB 983.3 KiB 32 B 37.0 K not all freed
bin 6: 195.0 KiB 204.4 KiB 195.0 KiB 48 B 4.3 K not all freed
bin 8: 457.1 KiB 565.1 KiB 457.0 KiB 64 B 9.0 K not all freed
bin 9: 44.8 KiB 2.7 MiB 44.7 KiB 80 B 35.9 K not all freed
bin 10: 128.0 KiB 147.8 KiB 128.0 KiB 96 B 1.5 K not all freed
bin 11: 35.3 KiB 768.6 KiB 34.9 KiB 112 B 7.0 K not all freed
bin 12: 40.6 KiB 58.4 KiB 40.4 KiB 128 B 466 not all freed
bin 13: 522.8 KiB 610.8 KiB 522.8 KiB 160 B 3.8 K not all freed
bin 14: 27.1 KiB 44.9 KiB 26.7 KiB 192 B 239 not all freed
bin 15: 34.0 KiB 372.4 KiB 33.6 KiB 224 B 1.6 K not all freed
bin 16: 163.8 KiB 199.2 KiB 163.6 KiB 256 B 794 not all freed
bin 17: 50.1 KiB 80.9 KiB 49.8 KiB 320 B 258 not all freed
bin 18: 28.2 KiB 49.6 KiB 27.4 KiB 384 B 132 not all freed
bin 19: 19.3 KiB 1.3 MiB 18.4 KiB 448 B 3.1 K not all freed
bin 20: 95.8 KiB 144.5 KiB 95.3 KiB 512 B 288 not all freed
bin 21: 51.4 KiB 94.1 KiB 50.8 KiB 640 B 150 not all freed
bin 22: 28.6 KiB 64.7 KiB 27.8 KiB 768 B 86 not all freed
bin 23: 34.2 KiB 57.0 KiB 32.5 KiB 896 B 65 not all freed
bin 24: 112.4 KiB 152.5 KiB 111.4 KiB 1.0 KiB 152 not all freed
bin 25: 31.3 KiB 3.8 MiB 27.6 KiB 1.2 KiB 3.1 K not all freed
bin 26: 28.6 KiB 84.3 KiB 28.6 KiB 1.5 KiB 56 not all freed
bin 27: 29.8 KiB 66.7 KiB 29.8 KiB 1.7 KiB 38 not all freed
bin 28: 104.4 KiB 162.6 KiB 104.4 KiB 2.0 KiB 81 not all freed
bin 29: 40.1 KiB 105.4 KiB 37.6 KiB 2.5 KiB 42 not all freed
bin 30: 42.1 KiB 90.3 KiB 39.1 KiB 3.0 KiB 30 not all freed
bin 31: 35.1 KiB 63.2 KiB 35.1 KiB 3.5 KiB 18 not all freed
bin 32: 136.5 KiB 196.7 KiB 136.5 KiB 4.0 KiB 49 not all freed
bin 33: 50.1 KiB 100.3 KiB 45.1 KiB 5.0 KiB 20 not all freed
bin 34: 30.1 KiB 54.2 KiB 30.1 KiB 6.0 KiB 9 not all freed
bin 35: 49.1 KiB 84.3 KiB 49.1 KiB 7.0 KiB 12 not all freed
bin 36: 144.5 KiB 200.7 KiB 144.5 KiB 8.0 KiB 25 not all freed
bin 37: 331.2 KiB 401.5 KiB 331.2 KiB 10.0 KiB 40 not all freed
bin 38: 24.0 KiB 36.1 KiB 24.0 KiB 12.0 KiB 3 not all freed
bin 39: 716.8 KiB 758.9 KiB 716.8 KiB 14.0 KiB 54 not all freed
bin 40: 449.7 KiB 465.8 KiB 449.7 KiB 16.0 KiB 29 not all freed
bin 41: 602.3 KiB 662.5 KiB 602.3 KiB 20.0 KiB 33 not all freed
bin 42: 361.4 KiB 385.5 KiB 361.4 KiB 24.0 KiB 16 not all freed
bin 43: 56.2 KiB 56.2 KiB 56.2 KiB 28.1 KiB 2 not all freed
bin 44: 32.1 KiB 32.1 KiB 32.1 KiB 32.1 KiB 1 not all freed
bin 45: 200.7 KiB 240.9 KiB 200.7 KiB 40.1 KiB 6 not all freed
bin 46: 96.3 KiB 96.3 KiB 96.3 KiB 48.1 KiB 2 not all freed
bin 47: 112.4 KiB 112.4 KiB 112.4 KiB 56.2 KiB 2 not all freed
heap stats: peak total current block total#
binned: 6.2 Mi 16.2 Mi 6.2 Mi not all freed
huge: 8.1 Mi 8.1 Mi 8.1 Mi not all freed
total: 14.4 MiB 24.4 MiB 14.4 MiB
malloc req: 14.0 MiB
reserved: 1.0 GiB 1.0 GiB 1.0 GiB
committed: 1.0 GiB 1.0 GiB 1.0 GiB
reset: 0
purged: 899.5 KiB
touched: 14.6 MiB 15.9 MiB 14.6 MiB
segments: 1 1 1 not all freed
-abandoned: 0 0 0 ok
-cached: 0 0 0 ok
pages: 117 121 117 not all freed
-abandoned: 0 0 0 ok
-extended: 987
-retire: 184
arenas: 1
-rollback: 0
mmaps: 2
commits: 8
resets: 0
purges: 2
guarded: 0
threads: 1 1 1 not all freed
searches: 1.0 avg
numa nodes: 1
elapsed: 193.944 s
process: user: 0.000 s, system: 0.000 s, faults: 0, rss: 35.1 MiB, commit: 1.0 GiB
(rr) step
mi_malloc (size=281474972520448) at 3rdparty/mimalloc/src/alloc.c:205
205 return mi_heap_malloc(mi_prim_get_default_heap(), size);
(rr)
mi_prim_get_default_heap () at 3rdparty/mimalloc/include/mimalloc/prim.h:413
413 return _mi_heap_default;
(rr)
414 }
(rr)
mi_heap_malloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520448) at 3rdparty/mimalloc/src/alloc.c:201
201 return _mi_heap_malloc_zero(heap, size, false);
(rr)
_mi_heap_malloc_zero (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520448, zero=false)
at 3rdparty/mimalloc/src/alloc.c:197
197 return _mi_heap_malloc_zero_ex(heap, size, zero, 0);
(rr)
_mi_heap_malloc_zero_ex (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520448, zero=false, huge_alignment=0)
at 3rdparty/mimalloc/src/alloc.c:171
171 if mi_likely(size thread_id == 0 || heap->thread_id == _mi_thread_id()); // heaps are thread local
(rr)
_mi_thread_id () at 3rdparty/mimalloc/src/init.c:145
145 return _mi_prim_thread_id();
(rr)
_mi_prim_thread_id () at 3rdparty/mimalloc/include/mimalloc/prim.h:295
295 return (uintptr_t)__builtin_thread_pointer();
(rr)
296 }
(rr)
_mi_thread_id () at 3rdparty/mimalloc/src/init.c:146
146 }
(rr)
_mi_heap_malloc_zero_ex (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520448, zero=false, huge_alignment=0)
at 3rdparty/mimalloc/src/alloc.c:184
184 void* const p = _mi_malloc_generic(heap, size + MI_PADDING_SIZE, zero, huge_alignment); // note: size can overflow but it is detected in malloc_generic
(rr) print MI_PADDING_SIZE
$2 = 8
(rr) print size + MI_PADDING_SIZE
$3 = 281474972520456
(rr) step
_mi_malloc_generic (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, zero=false, huge_alignment=0)
at 3rdparty/mimalloc/src/page.c:983
983 mi_assert_internal(heap != NULL);
(rr)
986 if mi_unlikely(!mi_heap_is_initialized(heap)) {
(rr)
mi_heap_is_initialized (heap=0x7f0662b9d340 <_mi_heap_main>) at 3rdparty/mimalloc/include/mimalloc/internal.h:452
452 mi_assert_internal(heap != NULL);
(rr)
453 return (heap != NULL && heap != &_mi_heap_empty);
(rr)
454 }
(rr)
_mi_malloc_generic (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, zero=false, huge_alignment=0)
at 3rdparty/mimalloc/src/page.c:990
990 mi_assert_internal(mi_heap_is_initialized(heap));
(rr)
mi_heap_is_initialized (heap=0x7f0662b9d340 <_mi_heap_main>) at 3rdparty/mimalloc/include/mimalloc/internal.h:452
452 mi_assert_internal(heap != NULL);
(rr)
453 return (heap != NULL && heap != &_mi_heap_empty);
(rr)
454 }
(rr)
_mi_malloc_generic (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, zero=false, huge_alignment=0)
at 3rdparty/mimalloc/src/page.c:993
993 if mi_unlikely(++heap->generic_count >= 100) {
(rr)
1011 mi_page_t* page = mi_find_page(heap, size, huge_alignment);
(rr)
mi_find_page (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, huge_alignment=0)
at 3rdparty/mimalloc/src/page.c:958
958 const size_t req_size = size - MI_PADDING_SIZE; // correct for padding_size in case of an overflow on `size`
(rr)
959 if mi_unlikely(req_size > (MI_MEDIUM_OBJ_SIZE_MAX - MI_PADDING_SIZE) || huge_alignment > 0) {
(rr) print req_size
$4 = 281474972520448
(rr) step
960 if mi_unlikely(req_size > MI_MAX_ALLOC_SIZE) {
(rr)
965 return mi_large_huge_page_alloc(heap,size,huge_alignment);
(rr)
mi_large_huge_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, page_alignment=0)
at 3rdparty/mimalloc/src/page.c:913
913 size_t block_size = _mi_os_good_alloc_size(size);
(rr)
_mi_os_good_alloc_size (size=281474972520456) at 3rdparty/mimalloc/src/os.c:74
74 if (size = (SIZE_MAX - align_size)) return size; // possible overflow?
(rr) print SIZE_MAX
$5 = 18446744073709551615
(rr) print SIZE_MAX - align_size
$6 = 18446744073705357311
(rr) print (size >= (SIZE_MAX - align_size))
$7 = 0
(rr) step
80 return _mi_align_up(size, align_size);
(rr)
_mi_align_up (sz=281474972520456, alignment=4194304) at 3rdparty/mimalloc/include/mimalloc/internal.h:337
337 mi_assert_internal(alignment != 0);
(rr)
338 uintptr_t mask = alignment - 1;
(rr)
339 if ((alignment & mask) == 0) { // power of two?
(rr)
340 return ((sz + mask) & ~mask);
(rr) print sz
$8 = 281474972520456
(rr) print sz + mask
$9 = 281474976714759
(rr) print (sz + mask) & ~mask
$10 = 281474976710656
(rr) step
345 }
(rr)
_mi_os_good_alloc_size (size=281474972520456) at 3rdparty/mimalloc/src/os.c:81
81 }
(rr)
mi_large_huge_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, page_alignment=0)
at 3rdparty/mimalloc/src/page.c:914
914 mi_assert_internal(mi_bin(block_size) == MI_BIN_HUGE || page_alignment > 0);
(rr)
mi_bin (size=281474976710656) at 3rdparty/mimalloc/src/page-queue.c:61
61 size_t wsize = _mi_wsize_from_size(size);
(rr)
_mi_wsize_from_size (size=281474976710656) at 3rdparty/mimalloc/include/mimalloc/internal.h:396
396 mi_assert_internal(size MI_MEDIUM_OBJ_WSIZE_MAX) {
(rr) print wsize
$13 = 35184372088832
(rr) print MI_MEDIUM_OBJ_WSIZE_MAX
$14 = 8192
(rr) step
76 return MI_BIN_HUGE;
(rr)
92 }
(rr)
mi_large_huge_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, page_alignment=0)
at 3rdparty/mimalloc/src/page.c:915
915 bool is_huge = (block_size > MI_LARGE_OBJ_SIZE_MAX || page_alignment > 0);
(rr)
919 mi_page_queue_t* pq = mi_page_queue(heap, is_huge ? MI_LARGE_OBJ_SIZE_MAX+1 : block_size);
(rr) print MI_LARGE_OBJ_SIZE_MAX
$15 = 16777216
(rr) print MI_LARGE_OBJ_SIZE_MAX+1
$16 = 16777217
(rr) step
mi_page_queue (heap=0x7f0662b9d340 <_mi_heap_main>, size=16777217)
at 3rdparty/mimalloc/include/mimalloc/internal.h:631
631 return &((mi_heap_t*)heap)->pages[_mi_bin(size)];
(rr)
_mi_bin (size=16777217) at 3rdparty/mimalloc/src/page-queue.c:101
101 return mi_bin(size);
(rr)
mi_bin (size=16777217) at 3rdparty/mimalloc/src/page-queue.c:61
61 size_t wsize = _mi_wsize_from_size(size);
(rr)
_mi_wsize_from_size (size=16777217) at 3rdparty/mimalloc/include/mimalloc/internal.h:396
396 mi_assert_internal(size MI_MEDIUM_OBJ_WSIZE_MAX) {
(rr)
76 return MI_BIN_HUGE;
(rr)
92 }
(rr)
_mi_bin (size=16777217) at 3rdparty/mimalloc/src/page-queue.c:102
102 }
(rr)
mi_page_queue (heap=0x7f0662b9d340 <_mi_heap_main>, size=16777217)
at 3rdparty/mimalloc/include/mimalloc/internal.h:632
632 }
(rr)
mi_large_huge_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, page_alignment=0)
at 3rdparty/mimalloc/src/page.c:920
920 mi_assert_internal(!is_huge || mi_page_queue_is_huge(pq));
(rr)
mi_page_queue_is_huge (pq=0x7f0662b9df20 <_mi_heap_main>) at 3rdparty/mimalloc/src/page-queue.c:41
41 return (pq->block_size == (MI_MEDIUM_OBJ_SIZE_MAX+sizeof(uintptr_t)));
(rr)
42 }
(rr)
mi_large_huge_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, size=281474972520456, page_alignment=0)
at 3rdparty/mimalloc/src/page.c:922
922 mi_page_t* page = mi_page_fresh_alloc(heap, pq, block_size, page_alignment);
(rr)
mi_page_fresh_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, pq=0x7f0662b9df20 <_mi_heap_main>,
block_size=281474976710656, page_alignment=0) at 3rdparty/mimalloc/src/page.c:275
275 mi_assert_internal(pq != NULL);
(rr) print/x block_size
$17 = 0x1000000000000
(rr) step
276 mi_assert_internal(mi_heap_contains_queue(heap, pq));
(rr)
mi_heap_contains_queue (heap=0x7f0662b9d340 <_mi_heap_main>, pq=0x7f0662b9df20 <_mi_heap_main>)
at 3rdparty/mimalloc/src/page-queue.c:135
135 return (pq >= &heap->pages[0] && pq pages[MI_BIN_FULL]);
(rr)
136 }
(rr)
mi_page_fresh_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, pq=0x7f0662b9df20 <_mi_heap_main>,
block_size=281474976710656, page_alignment=0) at 3rdparty/mimalloc/src/page.c:277
277 mi_assert_internal(page_alignment > 0 || block_size > MI_MEDIUM_OBJ_SIZE_MAX || block_size == pq->block_size);
(rr)
279 mi_page_t* page = _mi_segment_page_alloc(heap, block_size, page_alignment, &heap->tld->segments);
(rr)
_mi_segment_page_alloc (heap=0x7f0662b9d340 <_mi_heap_main>, block_size=281474976710656, page_alignment=0,
tld=0x7f0662b9bf20 ) at 3rdparty/mimalloc/src/segment.c:1647
1647 if mi_unlikely(page_alignment > MI_BLOCK_ALIGNMENT_MAX) {
(rr)
1653 else if (block_size arena_id,tld);
(rr)
mi_segment_huge_page_alloc (size=281474976710656, page_alignment=0, req_arena_id=0,
tld=0x7f0662b9bf20 ) at 3rdparty/mimalloc/src/segment.c:1566
1566 mi_page_t* page = NULL;
(rr)
1567 mi_segment_t* segment = mi_segment_alloc(size,page_alignment,req_arena_id,tld,&page);
(rr) print page
$18 = (mi_page_t *) 0x0
(rr) print tld
$19 = (mi_segments_tld_t *) 0x7f0662b9bf20
(rr) print *$
$20 = {spans = {{first = 0x0, last = 0x0, slice_count = 1}, {first = 0x0, last = 0x0, slice_count = 1}, {
first = 0x0, last = 0x0, slice_count = 2}, {first = 0x0, last = 0x0, slice_count = 3}, {first = 0x0,
last = 0x0, slice_count = 4}, {first = 0x0, last = 0x0, slice_count = 5}, {first = 0x0, last = 0x0,
slice_count = 6}, {first = 0x0, last = 0x0, slice_count = 7}, {first = 0x0, last = 0x0, slice_count = 10}, {
first = 0x0, last = 0x0, slice_count = 12}, {first = 0x0, last = 0x0, slice_count = 14}, {first = 0x0,
last = 0x0, slice_count = 16}, {first = 0x0, last = 0x0, slice_count = 20}, {first = 0x0, last = 0x0,
slice_count = 24}, {first = 0x0, last = 0x0, slice_count = 28}, {first = 0x0, last = 0x0, slice_count = 32},
{first = 0x0, last = 0x0, slice_count = 40}, {first = 0x0, last = 0x0, slice_count = 48}, {first = 0x0,
last = 0x0, slice_count = 56}, {first = 0x0, last = 0x0, slice_count = 64}, {first = 0x0, last = 0x0,
slice_count = 80}, {first = 0x0, last = 0x0, slice_count = 96}, {first = 0x0, last = 0x0,
slice_count = 112}, {first = 0x0, last = 0x0, slice_count = 128}, {first = 0x0, last = 0x0,
slice_count = 160}, {first = 0x20000008e70, last = 0x20000008e70, slice_count = 192}, {first = 0x0,
last = 0x0, slice_count = 224}, {first = 0x0, last = 0x0, slice_count = 256}, {first = 0x0, last = 0x0,
slice_count = 320}, {first = 0x0, last = 0x0, slice_count = 384}, {first = 0x0, last = 0x0,
slice_count = 448}, {first = 0x0, last = 0x0, slice_count = 512}, {first = 0x0, last = 0x0,
slice_count = 640}, {first = 0x0, last = 0x0, slice_count = 768}, {first = 0x0, last = 0x0,
slice_count = 896}, {first = 0x0, last = 0x0, slice_count = 1024}}, count = 1, peak_count = 1,
current_size = 33554432, peak_size = 33554432, reclaim_count = 0, subproc = 0x7f0662cae600 ,
stats = 0x7f0662b9c2b8 }
(rr) step
mi_segment_alloc (required=281474976710656, page_alignment=0, req_arena_id=0, tld=0x7f0662b9bf20 ,
huge_page=0x7ffcac7591c0) at 3rdparty/mimalloc/src/segment.c:896
896 mi_assert_internal((required==0 && huge_page==NULL) || (required>0 && huge_page != NULL));
(rr)
900 size_t segment_slices = mi_segment_calculate_slices(required, &info_slices);
(rr)
mi_segment_calculate_slices (required=281474976710656, info_slices=0x7ffcac759120)
at 3rdparty/mimalloc/src/segment.c:371
371 size_t page_size = _mi_os_page_size();
(rr)
_mi_os_page_size () at 3rdparty/mimalloc/src/os.c:57
57 return mi_os_mem_config.page_size;
(rr)
58 }
(rr)
mi_segment_calculate_slices (required=281474976710656, info_slices=0x7ffcac759120)
at 3rdparty/mimalloc/src/segment.c:372
372 size_t isize = _mi_align_up(sizeof(mi_segment_t), page_size);
(rr)
_mi_align_up (sz=57744, alignment=4096) at 3rdparty/mimalloc/include/mimalloc/internal.h:337
337 mi_assert_internal(alignment != 0);
(rr)
338 uintptr_t mask = alignment - 1;
(rr)
339 if ((alignment & mask) == 0) { // power of two?
(rr)
340 return ((sz + mask) & ~mask);
(rr) finish
Run till exit from #0 _mi_align_up (sz=57744, alignment=4096) at 3rdparty/mimalloc/include/mimalloc/internal.h:340
0x00007f06623ed169 in mi_segment_calculate_slices (required=281474976710656, info_slices=0x7ffcac759120)
at 3rdparty/mimalloc/src/segment.c:372
372 size_t isize = _mi_align_up(sizeof(mi_segment_t), page_size);
Value returned is $21 = 61440
(rr) step
373 size_t guardsize = 0;
(rr)
384 isize = _mi_align_up(isize + guardsize, MI_SEGMENT_SLICE_SIZE);
(rr)
_mi_align_up (sz=61440, alignment=65536) at 3rdparty/mimalloc/include/mimalloc/internal.h:337
337 mi_assert_internal(alignment != 0);
(rr) finish
Run till exit from #0 _mi_align_up (sz=61440, alignment=65536)
at 3rdparty/mimalloc/include/mimalloc/internal.h:337
0x00007f06623ed18d in mi_segment_calculate_slices (required=281474976710656, info_slices=0x7ffcac759120)
at 3rdparty/mimalloc/src/segment.c:384
384 isize = _mi_align_up(isize + guardsize, MI_SEGMENT_SLICE_SIZE);
Value returned is $22 = 65536
(rr) step
385 if (info_slices != NULL) *info_slices = isize / MI_SEGMENT_SLICE_SIZE;
(rr)
386 size_t segment_size = (required==0 ? MI_SEGMENT_SIZE : _mi_align_up( required + isize + guardsize, MI_SEGMENT_SLICE_SIZE) );
(rr)
_mi_align_up (sz=281474976776192, alignment=65536) at 3rdparty/mimalloc/include/mimalloc/internal.h:337
337 mi_assert_internal(alignment != 0);
(rr) finish
Run till exit from #0 _mi_align_up (sz=281474976776192, alignment=65536)
at 3rdparty/mimalloc/include/mimalloc/internal.h:337
0x00007f06623ed1d0 in mi_segment_calculate_slices (required=281474976710656, info_slices=0x7ffcac759120)
at 3rdparty/mimalloc/src/segment.c:386
386 size_t segment_size = (required==0 ? MI_SEGMENT_SIZE : _mi_align_up( required + isize + guardsize, MI_SEGMENT_SLICE_SIZE) );
Value returned is $23 = 281474976776192
(rr) print/x $23
$24 = 0x1000000010000
(rr) step
387 mi_assert_internal(segment_size % MI_SEGMENT_SLICE_SIZE == 0);
(rr)
388 return (segment_size / MI_SEGMENT_SLICE_SIZE);
(rr)
389 }
(rr)
mi_segment_alloc (required=281474976710656, page_alignment=0, req_arena_id=0, tld=0x7f0662b9bf20 ,
huge_page=0x7ffcac7591c0) at 3rdparty/mimalloc/src/segment.c:901
901 mi_assert_internal(segment_slices > 0 && segment_slices 0 && segment_slices "mi_segment_alloc") at 3rdparty/mimalloc/src/options.c:529
529 _mi_fprintf(NULL, NULL, "mimalloc: assertion failed: at \"%s\":%u, %s\n assertion: \"%s\"\n", fname, line, (func==NULL?"":func), assertion);
(rr) reverse-finish
Run back to call of #0 _mi_assert_fail (
assertion=0x7f0662a05288 "segment_slices > 0 && segment_slices "mi_segment_alloc") at 3rdparty/mimalloc/src/options.c:529
0x00007f06623ef31d in mi_segment_alloc (required=281474976710656, page_alignment=0, req_arena_id=0,
tld=0x7f0662b9bf20 , huge_page=0x7ffcac7591c0) at 3rdparty/mimalloc/src/segment.c:901
901 mi_assert_internal(segment_slices > 0 && segment_slices
The mimalloc version in question is built from commit 94036de6.