[sanitizer] fix a bug that has crept into the sanitizer allocator and caused SEGV on allocations between 1Mb and 2Mb, improve the test
llvm-svn: 170274
This commit is contained in:
parent
b16ccde7a4
commit
c8208c5258
|
|
@ -297,7 +297,7 @@ class SizeClassAllocator64 {
|
|||
uptr beg_idx = region->allocated_user;
|
||||
uptr end_idx = beg_idx + kPopulateSize;
|
||||
uptr region_beg = kSpaceBeg + kRegionSize * class_id;
|
||||
if (end_idx > region->mapped_user) {
|
||||
if (Max(end_idx, beg_idx + size) > region->mapped_user) {
|
||||
// Do the mmap for the user memory.
|
||||
CHECK_GT(region->mapped_user + kUserMapSize, end_idx);
|
||||
MapWithCallback(region_beg + region->mapped_user, kUserMapSize);
|
||||
|
|
|
|||
|
|
@ -96,12 +96,15 @@ void TestSizeClassAllocator() {
|
|||
uptr size = sizes[s];
|
||||
if (!a->CanAllocate(size, 1)) continue;
|
||||
// printf("s = %ld\n", size);
|
||||
uptr n_iter = std::max((uptr)2, 1000000 / size);
|
||||
uptr n_iter = std::max((uptr)6, 1000000 / size);
|
||||
for (uptr i = 0; i < n_iter; i++) {
|
||||
void *x = a->Allocate(size, 1);
|
||||
char *x = (char*)a->Allocate(size, 1);
|
||||
x[0] = 0;
|
||||
x[size - 1] = 0;
|
||||
x[size / 2] = 0;
|
||||
allocated.push_back(x);
|
||||
CHECK_EQ(x, a->GetBlockBegin(x));
|
||||
CHECK_EQ(x, a->GetBlockBegin((char*)x + size - 1));
|
||||
CHECK_EQ(x, a->GetBlockBegin(x + size - 1));
|
||||
CHECK(a->PointerIsMine(x));
|
||||
CHECK_GE(a->GetActuallyAllocatedSize(x), size);
|
||||
uptr class_id = a->GetSizeClass(x);
|
||||
|
|
|
|||
Loading…
Reference in New Issue