From 112d7a435ba93c4a1716eeb9b16644276a58c83e Mon Sep 17 00:00:00 2001 From: Kostya Kortchinsky Date: Fri, 9 Mar 2018 20:17:12 +0000 Subject: [PATCH] [sanitizer] Revert rCRT327145 Summary: It breaks the Chromium toolchain due to: ``` lib/sanitizer_common/sanitizer_allocator_primary32.h:269:34: error: requested alignment is not an integer constant struct ALIGNED(kCacheLineSize) SizeClassInfo { ``` Reviewers: alekseyshl, thakis Reviewed By: thakis Subscribers: kubamracek, delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D44320 llvm-svn: 327167 --- .../lib/sanitizer_common/sanitizer_allocator_primary32.h | 8 +++++--- .../lib/sanitizer_common/sanitizer_allocator_primary64.h | 13 ++++++------- compiler-rt/lib/sanitizer_common/sanitizer_common.h | 6 ++---- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h index dae2c45..4e87bd7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h @@ -266,12 +266,14 @@ class SizeClassAllocator32 { static const uptr kRegionSize = 1 << kRegionSizeLog; static const uptr kNumPossibleRegions = kSpaceSize / kRegionSize; - struct ALIGNED(kCacheLineSize) SizeClassInfo { + struct SizeClassInfo { SpinMutex mutex; IntrusiveList free_list; u32 rand_state; + char padding[kCacheLineSize - 2 * sizeof(uptr) - + sizeof(IntrusiveList)]; }; - COMPILER_CHECK(sizeof(SizeClassInfo) % kCacheLineSize == 0); + COMPILER_CHECK(sizeof(SizeClassInfo) == kCacheLineSize); uptr ComputeRegionId(uptr mem) { const uptr res = mem >> kRegionSizeLog; @@ -297,7 +299,7 @@ class SizeClassAllocator32 { } SizeClassInfo *GetSizeClassInfo(uptr class_id) { - DCHECK_LT(class_id, kNumClasses); + CHECK_LT(class_id, kNumClasses); return &size_class_info_array[class_id]; } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h index b0042f1..651a64b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h @@ -80,8 +80,6 @@ class SizeClassAllocator64 { } SetReleaseToOSIntervalMs(release_to_os_interval_ms); MapWithCallbackOrDie(SpaceEnd(), AdditionalSize()); - // Check that the RegionInfo array is aligned on the CacheLine size. - DCHECK_EQ(SpaceEnd() & (kCacheLineSize - 1), 0); } s32 ReleaseToOSIntervalMs() const { @@ -304,7 +302,7 @@ class SizeClassAllocator64 { static uptr AdditionalSize() { return RoundUpTo(sizeof(RegionInfo) * kNumClassesRounded, - GetPageSizeCached()); + GetPageSizeCached()); } typedef SizeClassMap SizeClassMapT; @@ -586,7 +584,7 @@ class SizeClassAllocator64 { u64 last_released_bytes; }; - struct ALIGNED(kCacheLineSize) RegionInfo { + struct RegionInfo { BlockingMutex mutex; uptr num_freed_chunks; // Number of elements in the freearray. uptr mapped_free_array; // Bytes mapped for freearray. @@ -599,11 +597,12 @@ class SizeClassAllocator64 { Stats stats; ReleaseToOsInfo rtoi; }; - COMPILER_CHECK(sizeof(RegionInfo) % kCacheLineSize == 0); + COMPILER_CHECK(sizeof(RegionInfo) >= kCacheLineSize); RegionInfo *GetRegionInfo(uptr class_id) const { - DCHECK_LT(class_id, kNumClasses); - RegionInfo *regions = reinterpret_cast(SpaceEnd()); + CHECK_LT(class_id, kNumClasses); + RegionInfo *regions = + reinterpret_cast(SpaceBeg() + kSpaceSize); return ®ions[class_id]; } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index 8ee36b2..d06d74e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -40,12 +40,10 @@ const uptr kWordSize = SANITIZER_WORDSIZE / 8; const uptr kWordSizeInBits = 8 * kWordSize; #if defined(__powerpc__) || defined(__powerpc64__) - constexpr uptr kCacheLineSize = 128; + const uptr kCacheLineSize = 128; #else - constexpr uptr kCacheLineSize = 64; + const uptr kCacheLineSize = 64; #endif -// Check that the CacheLine size is a power-of-two. -COMPILER_CHECK((kCacheLineSize & (kCacheLineSize - 1)) == 0); const uptr kMaxPathLength = 4096; -- 2.7.4