11package runtime
22
33import " base:intrinsics"
4+ import " base:sanitizer"
45
56DEFAULT_ARENA_GROWING_MINIMUM_BLOCK_SIZE :: uint (DEFAULT_TEMP_ALLOCATOR_BACKING_SIZE)
67
@@ -43,6 +44,8 @@ memory_block_alloc :: proc(allocator: Allocator, capacity: uint, alignment: uint
4344 block.base = ([^]byte )(uintptr (block) + base_offset)
4445 block.capacity = uint (end - uintptr (block.base))
4546
47+ sanitizer.address_poison (block.base, block.capacity)
48+
4649 // Should be zeroed
4750 assert (block.used == 0 )
4851 assert (block.prev == nil )
@@ -52,6 +55,7 @@ memory_block_alloc :: proc(allocator: Allocator, capacity: uint, alignment: uint
5255memory_block_dealloc :: proc (block_to_free: ^Memory_Block, loc := #caller_location ) {
5356 if block_to_free != nil {
5457 allocator := block_to_free.allocator
58+ sanitizer.address_unpoison (block_to_free.base, block_to_free.capacity)
5559 mem_free (block_to_free, allocator, loc)
5660 }
5761}
@@ -83,6 +87,7 @@ alloc_from_memory_block :: proc(block: ^Memory_Block, min_size, alignment: uint)
8387 return
8488 }
8589 data = block.base[block.used+alignment_offset:][:min_size]
90+ sanitizer.address_unpoison (block.base[block.used:block.used+size])
8691 block.used += size
8792 return
8893}
@@ -162,6 +167,7 @@ arena_free_all :: proc(arena: ^Arena, loc := #caller_location) {
162167 if arena.curr_block != nil {
163168 intrinsics.mem_zero (arena.curr_block.base, arena.curr_block.used)
164169 arena.curr_block.used = 0
170+ sanitizer.address_poison (arena.curr_block.base, arena.curr_block.capacity)
165171 }
166172 arena.total_used = 0
167173}
@@ -226,6 +232,7 @@ arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
226232 // grow data in-place, adjusting next allocation
227233 block.used = uint (new_end)
228234 data = block.base[start:new_end]
235+ sanitizer.address_unpoison (data)
229236 return
230237 }
231238 }
@@ -299,6 +306,7 @@ arena_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) {
299306 assert (block.used >= temp.used, " out of order use of arena_temp_end" , loc)
300307 amount_to_zero := block.used-temp.used
301308 intrinsics.mem_zero (block.base[temp.used:], amount_to_zero)
309+ sanitizer.address_poison (block.base[temp.used:block.capacity])
302310 block.used = temp.used
303311 arena.total_used -= amount_to_zero
304312 }
0 commit comments