summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2012-12-04 14:39:51 +0000
committerKostya Serebryany <kcc@google.com>2012-12-04 14:39:51 +0000
commit7436d95c9c5d8f36d59c5f72d2212e980a4ea07b (patch)
tree1d5385588ac0e543ef3dc04d7b4e7b4a9936a4e5
parent0ffc0d4ff304f62c327ecd84081c5637cd4f6d0e (diff)
downloadbcm5719-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.h5
-rw-r--r--compiler-rt/lib/sanitizer_common/tests/sanitizer_allocator64_test.cc20
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,
OpenPOWER on IntegriCloud