[asan/msan] add GetBlockBegin to the 32-bit allocator (+test)
llvm-svn: 169499
This commit is contained in:
parent
b69d3da00b
commit
9f84eecc9e
|
@ -354,7 +354,7 @@ class SizeClassAllocator32 {
|
|||
u32 offset = mem - beg;
|
||||
uptr n = offset / (u32)size; // 32-bit division
|
||||
uptr meta = (beg + kRegionSize) - (n + 1) * kMetadataSize;
|
||||
return (void*)meta;
|
||||
return reinterpret_cast<void*>(meta);
|
||||
}
|
||||
|
||||
bool PointerIsMine(void *p) {
|
||||
|
@ -365,6 +365,17 @@ class SizeClassAllocator32 {
|
|||
return possible_regions_[ComputeRegionId(reinterpret_cast<uptr>(p))] - 1;
|
||||
}
|
||||
|
||||
void *GetBlockBegin(void *p) {
|
||||
CHECK(PointerIsMine(p));
|
||||
uptr mem = reinterpret_cast<uptr>(p);
|
||||
uptr beg = ComputeRegionBeg(mem);
|
||||
uptr size = SizeClassMap::Size(GetSizeClass(p));
|
||||
u32 offset = mem - beg;
|
||||
u32 n = offset / (u32)size; // 32-bit division
|
||||
uptr res = beg + (n * (u32)size);
|
||||
return reinterpret_cast<void*>(res);
|
||||
}
|
||||
|
||||
uptr GetActuallyAllocatedSize(void *p) {
|
||||
CHECK(PointerIsMine(p));
|
||||
return SizeClassMap::Size(GetSizeClass(p));
|
||||
|
|
|
@ -96,6 +96,8 @@ void TestSizeClassAllocator() {
|
|||
for (uptr i = 0; i < n_iter; i++) {
|
||||
void *x = a->Allocate(size, 1);
|
||||
allocated.push_back(x);
|
||||
CHECK_EQ(x, a->GetBlockBegin(x));
|
||||
CHECK_EQ(x, a->GetBlockBegin((char*)x + size - 1));
|
||||
CHECK(a->PointerIsMine(x));
|
||||
CHECK_GE(a->GetActuallyAllocatedSize(x), size);
|
||||
uptr class_id = a->GetSizeClass(x);
|
||||
|
|
Loading…
Reference in New Issue