diff options
author | Kostya Serebryany <kcc@google.com> | 2012-12-04 14:39:51 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2012-12-04 14:39:51 +0000 |
commit | 7436d95c9c5d8f36d59c5f72d2212e980a4ea07b (patch) | |
tree | 1d5385588ac0e543ef3dc04d7b4e7b4a9936a4e5 | |
parent | 0ffc0d4ff304f62c327ecd84081c5637cd4f6d0e (diff) | |
download | bcm5719-llvm-7436d95c9c5d8f36d59c5f72d2212e980a4ea07b.tar.gz bcm5719-llvm-7436d95c9c5d8f36d59c5f72d2212e980a4ea07b.zip |
[tsan] test the allocator with CompactSizeClassMap
llvm-svn: 169270
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h | 5 | ||||
-rw-r--r-- | compiler-rt/lib/sanitizer_common/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 68707448b62..768679661f4 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 68b730df4cc..eccf70b6207 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<kAllocatorSpace, kAllocatorSize, 16, SCMap> Allocator64; +typedef SizeClassAllocator64< + kAllocatorSpace, kAllocatorSize, 16, DefaultSizeClassMap> Allocator64; + +typedef SizeClassAllocator64< + kAllocatorSpace, kAllocatorSize, 16, CompactSizeClassMap> Allocator64Compact; template <class SizeClassMap> 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<uptr*>(a.GetMetaData(x)); metadata[0] = reinterpret_cast<uptr>(x) + 1; metadata[1] = 0xABCD; @@ -110,6 +113,10 @@ TEST(SanitizerCommon, SizeClassAllocator64) { TestSizeClassAllocator<Allocator64>(); } +TEST(SanitizerCommon, SizeClassAllocator64Compact) { + TestSizeClassAllocator<Allocator64Compact>(); +} + template <class Allocator> void SizeClassAllocator64MetadataStress() { Allocator a; @@ -139,6 +146,10 @@ TEST(SanitizerCommon, SizeClassAllocator64MetadataStress) { SizeClassAllocator64MetadataStress<Allocator64>(); } +TEST(SanitizerCommon, SizeClassAllocator64CompactMetadataStress) { + SizeClassAllocator64MetadataStress<Allocator64Compact>(); +} + template<class Allocator> void FailInAssertionOnOOM() { Allocator a; @@ -256,7 +267,6 @@ void TestCombinedAllocator() { a.TestOnlyUnmap(); } - TEST(SanitizerCommon, CombinedAllocator) { TestCombinedAllocator<Allocator64, LargeMmapAllocator, |