From 7436d95c9c5d8f36d59c5f72d2212e980a4ea07b Mon Sep 17 00:00:00 2001 From: Kostya Serebryany Date: Tue, 4 Dec 2012 14:39:51 +0000 Subject: [PATCH] [tsan] test the allocator with CompactSizeClassMap llvm-svn: 169270 --- .../lib/sanitizer_common/sanitizer_allocator64.h | 5 +++-- .../tests/sanitizer_allocator64_test.cc | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h index 6870744..7686796 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h @@ -161,8 +161,9 @@ class SizeClassAllocator64 { COMPILER_CHECK(sizeof(RegionInfo) == kCacheLineSize); static uptr AdditionalSize() { - uptr res = sizeof(RegionInfo) * kNumClasses; - CHECK_EQ(res % GetPageSizeCached(), 0); + uptr PageSize = GetPageSizeCached(); + uptr res = Max(sizeof(RegionInfo) * kNumClasses, PageSize); + CHECK_EQ(res % PageSize, 0); return res; } diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc b/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc index 68b730d..eccf70b 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc @@ -17,9 +17,11 @@ static const uptr kAllocatorSpace = 0x700000000000ULL; static const uptr kAllocatorSize = 0x010000000000ULL; // 1T. -typedef DefaultSizeClassMap SCMap; -typedef - SizeClassAllocator64 Allocator64; +typedef SizeClassAllocator64< + kAllocatorSpace, kAllocatorSize, 16, DefaultSizeClassMap> Allocator64; + +typedef SizeClassAllocator64< + kAllocatorSpace, kAllocatorSize, 16, CompactSizeClassMap> Allocator64Compact; template void TestSizeClassMap() { @@ -74,6 +76,7 @@ void TestSizeClassAllocator() { // Allocate a bunch of chunks. for (uptr s = 0; s < sizeof(sizes) /sizeof(sizes[0]); s++) { uptr size = sizes[s]; + if (!a.CanAllocate(size, 1)) continue; // printf("s = %ld\n", size); uptr n_iter = std::max((uptr)2, 1000000 / size); for (uptr i = 0; i < n_iter; i++) { @@ -82,7 +85,7 @@ void TestSizeClassAllocator() { CHECK(a.PointerIsMine(x)); CHECK_GE(a.GetActuallyAllocatedSize(x), size); uptr class_id = a.GetSizeClass(x); - CHECK_EQ(class_id, SCMap::ClassID(size)); + CHECK_EQ(class_id, Allocator::SizeClassMapT::ClassID(size)); uptr *metadata = reinterpret_cast(a.GetMetaData(x)); metadata[0] = reinterpret_cast(x) + 1; metadata[1] = 0xABCD; @@ -110,6 +113,10 @@ TEST(SanitizerCommon, SizeClassAllocator64) { TestSizeClassAllocator(); } +TEST(SanitizerCommon, SizeClassAllocator64Compact) { + TestSizeClassAllocator(); +} + template void SizeClassAllocator64MetadataStress() { Allocator a; @@ -139,6 +146,10 @@ TEST(SanitizerCommon, SizeClassAllocator64MetadataStress) { SizeClassAllocator64MetadataStress(); } +TEST(SanitizerCommon, SizeClassAllocator64CompactMetadataStress) { + SizeClassAllocator64MetadataStress(); +} + template void FailInAssertionOnOOM() { Allocator a; @@ -256,7 +267,6 @@ void TestCombinedAllocator() { a.TestOnlyUnmap(); } - TEST(SanitizerCommon, CombinedAllocator) { TestCombinedAllocator