1010package mem_tlsf
1111
1212import " base:intrinsics"
13- import " base:sanitizer"
1413import " base:runtime"
1514
1615// log2 of number of linear subdivisions of block sizes.
@@ -156,8 +155,6 @@ pool_add :: proc(control: ^Allocator, pool: []u8) -> (err: Error) {
156155 block_set_used (next)
157156 block_set_prev_free (next)
158157
159- sanitizer.address_poison (pool)
160-
161158 return
162159}
163160
@@ -379,74 +376,47 @@ resize_non_zeroed :: proc(control: ^Allocator, ptr: rawptr, old_size, new_size:
379376
380377@ (private, require_results)
381378block_size :: proc " contextless" (block: ^Block_Header) -> (size: uint ) {
382- sanitizer.address_unpoison (block)
383- defer sanitizer.address_poison (block)
384-
385379 return block.size &~ (BLOCK_HEADER_FREE | BLOCK_HEADER_PREV_FREE)
386380}
387381
388382@(private)
389383block_set_size :: proc " contextless" (block: ^Block_Header, size: uint ) {
390- sanitizer.address_unpoison (block)
391- defer sanitizer.address_poison (block)
392-
393384 old_size := block.size
394385 block.size = size | (old_size & (BLOCK_HEADER_FREE | BLOCK_HEADER_PREV_FREE))
395386}
396387
397388@ (private, require_results)
398389block_is_last :: proc " contextless" (block: ^Block_Header) -> (is_last: bool ) {
399- sanitizer.address_unpoison (block)
400- defer sanitizer.address_poison (block)
401-
402390 return block_size (block) == 0
403391}
404392
405393@ (private, require_results)
406394block_is_free :: proc " contextless" (block: ^Block_Header) -> (is_free: bool ) {
407- sanitizer.address_unpoison (block)
408- defer sanitizer.address_poison (block)
409-
410395 return (block.size & BLOCK_HEADER_FREE) == BLOCK_HEADER_FREE
411396}
412397
413398@(private)
414399block_set_free :: proc " contextless" (block: ^Block_Header) {
415- sanitizer.address_unpoison (block)
416- defer sanitizer.address_poison (block)
417-
418400 block.size |= BLOCK_HEADER_FREE
419401}
420402
421403@(private)
422404block_set_used :: proc " contextless" (block: ^Block_Header) {
423- sanitizer.address_unpoison (block)
424- defer sanitizer.address_poison (block)
425-
426405 block.size &~= BLOCK_HEADER_FREE
427406}
428407
429408@ (private, require_results)
430409block_is_prev_free :: proc " contextless" (block: ^Block_Header) -> (is_prev_free: bool ) {
431- sanitizer.address_unpoison (block)
432- defer sanitizer.address_poison (block)
433-
434410 return (block.size & BLOCK_HEADER_PREV_FREE) == BLOCK_HEADER_PREV_FREE
435411}
436412
437413@(private)
438414block_set_prev_free :: proc " contextless" (block: ^Block_Header) {
439- sanitizer.address_unpoison (block)
440- defer sanitizer.address_poison (block)
441-
442415 block.size |= BLOCK_HEADER_PREV_FREE
443416}
444417
445418@(private)
446419block_set_prev_used :: proc " contextless" (block: ^Block_Header) {
447- sanitizer.address_unpoison (block)
448- defer sanitizer.address_poison (block)
449-
450420 block.size &~= BLOCK_HEADER_PREV_FREE
451421}
452422
@@ -475,41 +445,25 @@ offset_to_block_backwards :: proc(ptr: rawptr, size: uint) -> (block: ^Block_Hea
475445@ (private, require_results)
476446block_prev :: proc (block: ^Block_Header) -> (prev: ^Block_Header) {
477447 assert (block_is_prev_free (block), " previous block must be free" )
478-
479- sanitizer.address_unpoison (block)
480- defer sanitizer.address_poison (block)
481-
482448 return block.prev_phys_block
483449}
484450
485451// Return location of next existing block.
486452@ (private, require_results)
487453block_next :: proc (block: ^Block_Header) -> (next: ^Block_Header) {
488- sanitizer.address_unpoison (block)
489- defer sanitizer.address_poison (block)
490-
491454 return offset_to_block (block_to_ptr (block), block_size (block) - BLOCK_HEADER_OVERHEAD)
492455}
493456
494457// Link a new block with its physical neighbor, return the neighbor.
495458@ (private, require_results)
496459block_link_next :: proc (block: ^Block_Header) -> (next: ^Block_Header) {
497- sanitizer.address_unpoison (block)
498- defer sanitizer.address_poison (block)
499-
500460 next = block_next (block)
501- sanitizer.address_unpoison (next)
502- defer sanitizer.address_poison (next)
503-
504461 next.prev_phys_block = block
505462 return
506463}
507464
508465@(private)
509466block_mark_as_free :: proc (block: ^Block_Header) {
510- sanitizer.address_unpoison (block)
511- defer sanitizer.address_poison (block)
512-
513467 // Link the block to the next block, first.
514468 next := block_link_next (block)
515469 block_set_prev_free (next)
@@ -518,9 +472,6 @@ block_mark_as_free :: proc(block: ^Block_Header) {
518472
519473@(private)
520474block_mark_as_used :: proc (block: ^Block_Header) {
521- sanitizer.address_unpoison (block)
522- defer sanitizer.address_poison (block)
523-
524475 next := block_next (block)
525476 block_set_prev_used (next)
526477 block_set_used (block)
@@ -611,9 +562,6 @@ mapping_search :: proc(size: uint) -> (fl, sl: i32) {
611562
612563@ (private, require_results)
613564search_suitable_block :: proc (control: ^Allocator, fli, sli: ^i32 ) -> (block: ^Block_Header) {
614- sanitizer.address_unpoison (block)
615- defer sanitizer.address_poison (block)
616-
617565 // First, search for a block in the list associated with the given fl/sl index.
618566 fl := fli^; sl := sli^
619567
@@ -641,9 +589,6 @@ search_suitable_block :: proc(control: ^Allocator, fli, sli: ^i32) -> (block: ^B
641589// Remove a free block from the free list.
642590@(private)
643591remove_free_block :: proc (control: ^Allocator, block: ^Block_Header, fl: i32 , sl: i32 ) {
644- sanitizer.address_unpoison (block)
645- defer sanitizer.address_poison (block)
646-
647592 prev := block.prev_free
648593 next := block.next_free
649594 assert (prev != nil , " prev_free can not be nil" )
@@ -670,9 +615,6 @@ remove_free_block :: proc(control: ^Allocator, block: ^Block_Header, fl: i32, sl
670615// Insert a free block into the free block list.
671616@(private)
672617insert_free_block :: proc (control: ^Allocator, block: ^Block_Header, fl: i32 , sl: i32 ) {
673- sanitizer.address_unpoison (block)
674- defer sanitizer.address_poison (block)
675-
676618 current := control.blocks[fl][sl]
677619 assert (current != nil , " free lists cannot have a nil entry" )
678620 assert (block != nil , " cannot insert a nil entry into the free list" )
@@ -691,37 +633,25 @@ insert_free_block :: proc(control: ^Allocator, block: ^Block_Header, fl: i32, sl
691633// Remove a given block from the free list.
692634@(private)
693635block_remove :: proc (control: ^Allocator, block: ^Block_Header) {
694- sanitizer.address_unpoison (block)
695- defer sanitizer.address_poison (block)
696-
697636 fl, sl := mapping_insert (block_size (block))
698637 remove_free_block (control, block, fl, sl)
699638}
700639
701640// Insert a given block into the free list.
702641@(private)
703642block_insert :: proc (control: ^Allocator, block: ^Block_Header) {
704- sanitizer.address_unpoison (block)
705- defer sanitizer.address_poison (block)
706-
707643 fl, sl := mapping_insert (block_size (block))
708644 insert_free_block (control, block, fl, sl)
709645}
710646
711647@ (private, require_results)
712648block_can_split :: proc (block: ^Block_Header, size: uint ) -> (can_split: bool ) {
713- sanitizer.address_unpoison (block)
714- defer sanitizer.address_poison (block)
715-
716649 return block_size (block) >= size_of (Block_Header) + size
717650}
718651
719652// Split a block into two, the second of which is free.
720653@ (private, require_results)
721654block_split :: proc (block: ^Block_Header, size: uint ) -> (remaining: ^Block_Header) {
722- sanitizer.address_unpoison (block)
723- defer sanitizer.address_poison (block)
724-
725655 // Calculate the amount of space left in the remaining block.
726656 remaining = offset_to_block (block_to_ptr (block), size - BLOCK_HEADER_OVERHEAD)
727657
@@ -744,10 +674,6 @@ block_split :: proc(block: ^Block_Header, size: uint) -> (remaining: ^Block_Head
744674@ (private, require_results)
745675block_absorb :: proc (prev: ^Block_Header, block: ^Block_Header) -> (absorbed: ^Block_Header) {
746676 assert (!block_is_last (prev), " previous block can't be last" )
747-
748- sanitizer.address_unpoison (prev)
749- defer sanitizer.address_poison (prev)
750-
751677 // Note: Leaves flags untouched.
752678 prev.size += block_size (block) + BLOCK_HEADER_OVERHEAD
753679 _ = block_link_next (prev)
@@ -786,9 +712,6 @@ block_merge_next :: proc(control: ^Allocator, block: ^Block_Header) -> (merged:
786712// Trim any trailing block space off the end of a free block, return to pool.
787713@(private)
788714block_trim_free :: proc (control: ^Allocator, block: ^Block_Header, size: uint ) {
789- sanitizer.address_unpoison (block)
790- defer sanitizer.address_poison (block)
791-
792715 assert (block_is_free (block), " block must be free" )
793716 if (block_can_split (block, size)) {
794717 remaining_block := block_split (block, size)
@@ -858,7 +781,6 @@ block_prepare_used :: proc(control: ^Allocator, block: ^Block_Header, size: uint
858781 block_trim_free (control, block, size)
859782 block_mark_as_used (block)
860783 res = ([^]byte )(block_to_ptr (block))[:size]
861- sanitizer.address_unpoison (res)
862784 }
863785 return
864- }
786+ }
0 commit comments