summaryrefslogtreecommitdiff
path: root/lib/msan/msan_interceptors.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-09-02 09:24:53 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-09-02 09:24:53 +0000
commit97160a83ae2dad479cd93a3cb1dfbc06958f69a1 (patch)
tree7b2b5111640ac9e0858e29bea662c9ad461c55dd /lib/msan/msan_interceptors.cc
parentdcf154d08f770f7b683ebe58c80603029a773c68 (diff)
downloadcompiler-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.cc28
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);