diff options
| author | Vitaly Buka <vitalybuka@google.com> | 2021-05-23 14:12:49 -0700 |
|---|---|---|
| committer | Vitaly Buka <vitalybuka@google.com> | 2021-05-23 14:21:35 -0700 |
| commit | 93d1e5822ed64abd777eb94ea9899e96c4c39fbe (patch) | |
| tree | 681ebc37e209889bf012dc56543a6fde3c85dc9f | |
| parent | c2f819af73c54a8cf923e5a25099ca95dbe76312 (diff) | |
[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.
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/secondary.h | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h index ea5d6808aec9..77db873375a8 100644 --- a/compiler-rt/lib/scudo/standalone/secondary.h +++ b/compiler-rt/lib/scudo/standalone/secondary.h @@ -28,7 +28,10 @@ namespace scudo { namespace LargeBlock { -struct Header { +struct alignas(Max<uptr>(archSupportsMemoryTagging() + ? archMemoryTagGranuleSize() + : 1, + 1U << SCUDO_MIN_ALIGNMENT_LOG)) Header { LargeBlock::Header *Prev; LargeBlock::Header *Next; uptr CommitBase; @@ -38,9 +41,12 @@ struct Header { [[no_unique_address]] MapPlatformData Data; }; -constexpr uptr getHeaderSize() { - return roundUpTo(sizeof(Header), 1U << SCUDO_MIN_ALIGNMENT_LOG); -} +static_assert(sizeof(Header) % (1U << SCUDO_MIN_ALIGNMENT_LOG) == 0, ""); +static_assert(!archSupportsMemoryTagging() || + sizeof(Header) % archMemoryTagGranuleSize() == 0, + ""); + +constexpr uptr getHeaderSize() { return sizeof(Header); } template <typename Config> static uptr addHeaderTag(uptr Ptr) { if (allocatorSupportsMemoryTagging<Config>()) @@ -49,8 +55,7 @@ template <typename Config> static uptr addHeaderTag(uptr Ptr) { } template <typename Config> static Header *getHeader(uptr Ptr) { - return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr) - - getHeaderSize()); + return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr)) - 1; } template <typename Config> static Header *getHeader(const void *Ptr) { |
