forked from OSchip/llvm-project
[NFC][scudo] Enforce header size alignment
As-is it should not change struct size, but it will help to keep correct size if more fields added.
This commit is contained in:
parent
c2f819af73
commit
93d1e5822e
|
@ -28,7 +28,10 @@ namespace scudo {
|
||||||
|
|
||||||
namespace LargeBlock {
|
namespace LargeBlock {
|
||||||
|
|
||||||
struct Header {
|
struct alignas(Max<uptr>(archSupportsMemoryTagging()
|
||||||
|
? archMemoryTagGranuleSize()
|
||||||
|
: 1,
|
||||||
|
1U << SCUDO_MIN_ALIGNMENT_LOG)) Header {
|
||||||
LargeBlock::Header *Prev;
|
LargeBlock::Header *Prev;
|
||||||
LargeBlock::Header *Next;
|
LargeBlock::Header *Next;
|
||||||
uptr CommitBase;
|
uptr CommitBase;
|
||||||
|
@ -38,9 +41,12 @@ struct Header {
|
||||||
[[no_unique_address]] MapPlatformData Data;
|
[[no_unique_address]] MapPlatformData Data;
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr uptr getHeaderSize() {
|
static_assert(sizeof(Header) % (1U << SCUDO_MIN_ALIGNMENT_LOG) == 0, "");
|
||||||
return roundUpTo(sizeof(Header), 1U << SCUDO_MIN_ALIGNMENT_LOG);
|
static_assert(!archSupportsMemoryTagging() ||
|
||||||
}
|
sizeof(Header) % archMemoryTagGranuleSize() == 0,
|
||||||
|
"");
|
||||||
|
|
||||||
|
constexpr uptr getHeaderSize() { return sizeof(Header); }
|
||||||
|
|
||||||
template <typename Config> static uptr addHeaderTag(uptr Ptr) {
|
template <typename Config> static uptr addHeaderTag(uptr Ptr) {
|
||||||
if (allocatorSupportsMemoryTagging<Config>())
|
if (allocatorSupportsMemoryTagging<Config>())
|
||||||
|
@ -49,8 +55,7 @@ template <typename Config> static uptr addHeaderTag(uptr Ptr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Config> static Header *getHeader(uptr Ptr) {
|
template <typename Config> static Header *getHeader(uptr Ptr) {
|
||||||
return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr) -
|
return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr)) - 1;
|
||||||
getHeaderSize());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Config> static Header *getHeader(const void *Ptr) {
|
template <typename Config> static Header *getHeader(const void *Ptr) {
|
||||||
|
|
Loading…
Reference in New Issue