Eliminate pointer_cast()
Since we anticipate address_t not carrying provenance on CHERI, but rather being vaddr_t there, it doesn't make sense to offer conversion back to a provenance-carrying pointer. Thankfully, there is not much to be done here: the uses were few and could be replaced with the vocabulary of other pointer operations in ds/address.h
This commit is contained in:
@@ -42,16 +42,6 @@ namespace snmalloc
|
||||
return reinterpret_cast<address_t>(ptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cast from an address back to a pointer of the specified type. All uses of
|
||||
* this will eventually need auditing for CHERI compatibility.
|
||||
*/
|
||||
template<typename T>
|
||||
inline T* pointer_cast(address_t address)
|
||||
{
|
||||
return reinterpret_cast<T*>(address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if a pointer is aligned to a given size, which must be a power of
|
||||
* two.
|
||||
@@ -81,7 +71,8 @@ namespace snmalloc
|
||||
#if __has_builtin(__builtin_align_down)
|
||||
return static_cast<T*>(__builtin_align_down(p, alignment));
|
||||
#else
|
||||
return pointer_cast<T>(bits::align_down(address_cast(p), alignment));
|
||||
return reinterpret_cast<T*>(
|
||||
bits::align_down(reinterpret_cast<uintptr_t>(p), alignment));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -102,11 +93,29 @@ namespace snmalloc
|
||||
#if __has_builtin(__builtin_align_up)
|
||||
return static_cast<T*>(__builtin_align_up(p, alignment));
|
||||
#else
|
||||
return pointer_cast<T>(bits::align_up(address_cast(p), alignment));
|
||||
return reinterpret_cast<T*>(
|
||||
bits::align_up(reinterpret_cast<uintptr_t>(p), alignment));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Align a pointer down to a dynamically specified granularity, which must be
|
||||
* a power of two.
|
||||
*/
|
||||
template<typename T = void>
|
||||
SNMALLOC_FAST_PATH T* pointer_align_down(void* p, size_t alignment)
|
||||
{
|
||||
SNMALLOC_ASSERT(alignment > 0);
|
||||
SNMALLOC_ASSERT(bits::next_pow2(alignment) == alignment);
|
||||
#if __has_builtin(__builtin_align_down)
|
||||
return static_cast<T*>(__builtin_align_down(p, alignment));
|
||||
#else
|
||||
return reinterpret_cast<T*>(
|
||||
bits::align_down(reinterpret_cast<uintptr_t>(p), alignment));
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Align a pointer up to a dynamically specified granularity, which must
|
||||
* be a power of two.
|
||||
@@ -119,7 +128,8 @@ namespace snmalloc
|
||||
#if __has_builtin(__builtin_align_up)
|
||||
return static_cast<T*>(__builtin_align_up(p, alignment));
|
||||
#else
|
||||
return pointer_cast<T>(bits::align_up(address_cast(p), alignment));
|
||||
return reinterpret_cast<T*>(
|
||||
bits::align_up(reinterpret_cast<uintptr_t>(p), alignment));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user