forked from OSchip/llvm-project
[msan] Don't hardcode 4kiB page size in msan_test.cc.
This breaks the valloc test on PowerPC, which has 64kiB pages. Since getting page size portably is nontrivial, and there's already a function for that in __sanitizer, just use it. Unfortunately, sanitizer_common.h conflicts with the interface headers inclucded by msan_test.cc (and a few of its own macros), so we have to declare it manually. Differential Revision: http://reviews.llvm.org/D19227 llvm-svn: 266688
This commit is contained in:
parent
e64e7459aa
commit
c5d2ff8099
|
@ -115,7 +115,14 @@ void *mempcpy(void *dest, const void *src, size_t n);
|
||||||
# define SUPERUSER_GROUP "root"
|
# define SUPERUSER_GROUP "root"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const size_t kPageSize = 4096;
|
// We cannot include sanitizer_common.h (it conflicts with public interface
|
||||||
|
// headers), so just pull this function directly.
|
||||||
|
|
||||||
|
namespace __sanitizer {
|
||||||
|
uintptr_t GetPageSizeCached();
|
||||||
|
}
|
||||||
|
using __sanitizer::GetPageSizeCached;
|
||||||
|
|
||||||
const size_t kMaxPathLength = 4096;
|
const size_t kMaxPathLength = 4096;
|
||||||
|
|
||||||
typedef unsigned char U1;
|
typedef unsigned char U1;
|
||||||
|
@ -3225,28 +3232,30 @@ TEST(MemorySanitizer, posix_memalign) {
|
||||||
#if !defined(__FreeBSD__)
|
#if !defined(__FreeBSD__)
|
||||||
TEST(MemorySanitizer, memalign) {
|
TEST(MemorySanitizer, memalign) {
|
||||||
void *p = memalign(4096, 13);
|
void *p = memalign(4096, 13);
|
||||||
EXPECT_EQ(0U, (uintptr_t)p % kPageSize);
|
EXPECT_EQ(0U, (uintptr_t)p % 4096);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST(MemorySanitizer, valloc) {
|
TEST(MemorySanitizer, valloc) {
|
||||||
void *a = valloc(100);
|
void *a = valloc(100);
|
||||||
EXPECT_EQ(0U, (uintptr_t)a % kPageSize);
|
uintptr_t PageSize = GetPageSizeCached();
|
||||||
|
EXPECT_EQ(0U, (uintptr_t)a % PageSize);
|
||||||
free(a);
|
free(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
// There's no pvalloc() on FreeBSD.
|
// There's no pvalloc() on FreeBSD.
|
||||||
#if !defined(__FreeBSD__)
|
#if !defined(__FreeBSD__)
|
||||||
TEST(MemorySanitizer, pvalloc) {
|
TEST(MemorySanitizer, pvalloc) {
|
||||||
void *p = pvalloc(kPageSize + 100);
|
uintptr_t PageSize = GetPageSizeCached();
|
||||||
EXPECT_EQ(0U, (uintptr_t)p % kPageSize);
|
void *p = pvalloc(PageSize + 100);
|
||||||
EXPECT_EQ(2 * kPageSize, __sanitizer_get_allocated_size(p));
|
EXPECT_EQ(0U, (uintptr_t)p % PageSize);
|
||||||
|
EXPECT_EQ(2 * PageSize, __sanitizer_get_allocated_size(p));
|
||||||
free(p);
|
free(p);
|
||||||
|
|
||||||
p = pvalloc(0); // pvalloc(0) should allocate at least one page.
|
p = pvalloc(0); // pvalloc(0) should allocate at least one page.
|
||||||
EXPECT_EQ(0U, (uintptr_t)p % kPageSize);
|
EXPECT_EQ(0U, (uintptr_t)p % PageSize);
|
||||||
EXPECT_EQ(kPageSize, __sanitizer_get_allocated_size(p));
|
EXPECT_EQ(PageSize, __sanitizer_get_allocated_size(p));
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue