diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-09-02 09:24:53 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-09-02 09:24:53 +0000 |
commit | 97160a83ae2dad479cd93a3cb1dfbc06958f69a1 (patch) | |
tree | 7b2b5111640ac9e0858e29bea662c9ad461c55dd /lib/msan/msan_interceptors.cc | |
parent | dcf154d08f770f7b683ebe58c80603029a773c68 (diff) | |
download | compiler-rt-97160a83ae2dad479cd93a3cb1dfbc06958f69a1.tar.gz compiler-rt-97160a83ae2dad479cd93a3cb1dfbc06958f69a1.tar.bz2 compiler-rt-97160a83ae2dad479cd93a3cb1dfbc06958f69a1.tar.xz |
[msan] Intercept memalign, valloc, pvalloc.
PR17039
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@189750 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan/msan_interceptors.cc')
-rw-r--r-- | lib/msan/msan_interceptors.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 52c1913c..88c9f86e 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -139,6 +139,31 @@ INTERCEPTOR(int, posix_memalign, void **memptr, SIZE_T alignment, SIZE_T size) { return 0; } +INTERCEPTOR(void *, memalign, SIZE_T boundary, SIZE_T size) { + GET_MALLOC_STACK_TRACE; + CHECK_EQ(boundary & (boundary - 1), 0); + void *ptr = MsanReallocate(&stack, 0, size, boundary, false); + return ptr; +} + +INTERCEPTOR(void *, valloc, SIZE_T size) { + GET_MALLOC_STACK_TRACE; + void *ptr = MsanReallocate(&stack, 0, size, GetPageSizeCached(), false); + return ptr; +} + +INTERCEPTOR(void *, pvalloc, SIZE_T size) { + GET_MALLOC_STACK_TRACE; + uptr PageSize = GetPageSizeCached(); + size = RoundUpTo(size, PageSize); + if (size == 0) { + // pvalloc(0) should allocate one page. + size = PageSize; + } + void *ptr = MsanReallocate(&stack, 0, size, PageSize, false); + return ptr; +} + INTERCEPTOR(void, free, void *ptr) { ENSURE_MSAN_INITED(); if (ptr == 0) return; @@ -1188,6 +1213,9 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(mmap); INTERCEPT_FUNCTION(mmap64); INTERCEPT_FUNCTION(posix_memalign); + INTERCEPT_FUNCTION(memalign); + INTERCEPT_FUNCTION(valloc); + INTERCEPT_FUNCTION(pvalloc); INTERCEPT_FUNCTION(malloc); INTERCEPT_FUNCTION(calloc); INTERCEPT_FUNCTION(realloc); |