Loading...
--- libmalloc/libmalloc-116/src/bitarray.h
+++ libmalloc/libmalloc-657.60.21/src/bitarray.h
@@ -24,39 +24,42 @@
#ifndef __BITARRAY_H
#define __BITARRAY_H
-typedef uint64_t *bitarray_t; // array of bits, assumed to be mostly 0
+#include <malloc/_ptrcheck.h>
+__ptrcheck_abi_assume_single()
+
+typedef uint64_t * __unsafe_indexable bitarray_t; // array of bits, assumed to be mostly 0
typedef uint32_t index_t; // we limit the number of bits to be a 32-bit quantity
/* A bitarray uses a summarization to be able to quickly say what's the first bit that is set to 1;
All together each of the entry points will do a very small number of memory access (exact number depends on log_size) */
-extern size_t bitarray_size(unsigned log_size);
+MALLOC_NOEXPORT extern size_t bitarray_size(unsigned log_size);
// For a bitarray with 1<<log_size bits, returns the number of bytes needed to contain the whole bitarray
-extern bitarray_t bitarray_create(unsigned log_size);
+MALLOC_NOEXPORT extern bitarray_t bitarray_create(unsigned log_size);
// creates a bitarray with 1<<log_size bits, all initialized to 0.
// Use free() to free bitarray
-extern bool bitarray_get(bitarray_t bits, unsigned log_size, index_t index);
+MALLOC_NOEXPORT extern bool bitarray_get(bitarray_t bits, unsigned log_size, index_t index);
-extern bool bitarray_set(bitarray_t bits, unsigned log_size, index_t index);
+MALLOC_NOEXPORT extern bool bitarray_set(bitarray_t bits, unsigned log_size, index_t index);
// Set a bit in bitarray
-extern bool bitarray_zap(bitarray_t bits, unsigned log_size, index_t index);
+MALLOC_NOEXPORT extern bool bitarray_zap(bitarray_t bits, unsigned log_size, index_t index);
// Clears a bit in bitarray
-extern index_t bitarray_first_set(const bitarray_t bits, unsigned log_size);
+MALLOC_NOEXPORT extern index_t bitarray_first_set(const bitarray_t bits, unsigned log_size);
// Returns the index first bit that's 1, plus 1, or 0 if all the bits are zero
-extern bool bitarray_zap_first_set(bitarray_t bits, unsigned log_size, index_t *index);
+MALLOC_NOEXPORT extern bool bitarray_zap_first_set(bitarray_t bits, unsigned log_size, index_t *index);
// finds the first bit set, and if found, zaps it and sets index
-extern unsigned bitarray_zap_first_set_multiple(bitarray_t bits, unsigned log_size, unsigned max, index_t *indices);
+MALLOC_NOEXPORT extern unsigned bitarray_zap_first_set_multiple(bitarray_t bits, unsigned log_size, unsigned max, index_t *indices);
// finds all the bits set, up to max, and zaps each and sets the index for each
// returns number zapped
static MALLOC_INLINE MALLOC_ALWAYS_INLINE void
-BITARRAY_SET(uint32_t *bits, msize_t index)
+BITARRAY_SET(uint32_t * __unsafe_indexable bits, msize_t index)
{
// index >> 5 identifies the uint32_t to manipulate in the conceptually contiguous bits array
// (index >> 5) << 1 identifies the uint32_t allowing for the actual interleaving
@@ -64,13 +67,13 @@
}
static MALLOC_INLINE MALLOC_ALWAYS_INLINE void
-BITARRAY_CLR(uint32_t *bits, msize_t index)
+BITARRAY_CLR(uint32_t * __unsafe_indexable bits, msize_t index)
{
bits[(index >> 5) << 1] &= ~(1 << (index & 31));
}
static MALLOC_INLINE MALLOC_ALWAYS_INLINE boolean_t
-BITARRAY_BIT(uint32_t *bits, msize_t index)
+BITARRAY_BIT(uint32_t * __unsafe_indexable bits, msize_t index)
{
return ((bits[(index >> 5) << 1]) >> (index & 31)) & 1;
}