[compiler-rt] r333788 - [asan, myriad] Implement aligned local pool allocation
Walter Lee via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 1 14:29:06 PDT 2018
Author: waltl
Date: Fri Jun 1 14:29:05 2018
New Revision: 333788
URL: http://llvm.org/viewvc/llvm-project?rev=333788&view=rev
Log:
[asan, myriad] Implement aligned local pool allocation
Extend the local pool allocation support to posix_memalign.
Differential Revision: https://reviews.llvm.org/D47642
Modified:
compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
Modified: compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_malloc_linux.cc?rev=333788&r1=333787&r2=333788&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_malloc_linux.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_malloc_linux.cc Fri Jun 1 14:29:05 2018
@@ -18,6 +18,8 @@
#if SANITIZER_FREEBSD || SANITIZER_FUCHSIA || SANITIZER_LINUX || \
SANITIZER_NETBSD || SANITIZER_RTEMS || SANITIZER_SOLARIS
+#include "sanitizer_common/sanitizer_allocator_checks.h"
+#include "sanitizer_common/sanitizer_errno.h"
#include "sanitizer_common/sanitizer_tls_get_addr.h"
#include "asan_allocator.h"
#include "asan_interceptors.h"
@@ -44,6 +46,27 @@ static void *AllocateFromLocalPool(uptr
return mem;
}
+static int PosixMemalignFromLocalPool(void **memptr, uptr alignment,
+ uptr size_in_bytes) {
+ if (UNLIKELY(!CheckPosixMemalignAlignment(alignment)))
+ return errno_EINVAL;
+
+ CHECK(alignment >= kWordSize);
+
+ uptr addr = (uptr)&alloc_memory_for_dlsym[allocated_for_dlsym];
+ uptr aligned_addr = RoundUpTo(addr, alignment);
+ uptr aligned_size = RoundUpTo(size_in_bytes, kWordSize);
+
+ uptr *end_mem = (uptr*)(aligned_addr + aligned_size);
+ uptr allocated = end_mem - alloc_memory_for_dlsym;
+ if (allocated >= kDlsymAllocPoolSize)
+ return errno_ENOMEM;
+
+ allocated_for_dlsym = allocated;
+ *memptr = (void*)aligned_addr;
+ return 0;
+}
+
// On RTEMS, we use the local pool to handle memory allocation before
// the ASan run-time has been initialized.
static INLINE bool EarlyMalloc() {
@@ -166,8 +189,9 @@ INTERCEPTOR(int, mallopt, int cmd, int v
#endif // SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO
INTERCEPTOR(int, posix_memalign, void **memptr, uptr alignment, uptr size) {
+ if (UNLIKELY(UseLocalPool()))
+ return PosixMemalignFromLocalPool(memptr, alignment, size);
GET_STACK_TRACE_MALLOC;
- // Printf("posix_memalign: %zx %zu\n", alignment, size);
return asan_posix_memalign(memptr, alignment, size, &stack);
}
More information about the llvm-commits
mailing list