1 //===-- nsan_allocator.h ----------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef NSAN_ALLOCATOR_H 10 #define NSAN_ALLOCATOR_H 11 12 #include "sanitizer_common/sanitizer_common.h" 13 14 namespace __nsan { 15 16 struct NsanThreadLocalMallocStorage { 17 // Allocator cache contains atomic_uint64_t which must be 8-byte aligned. 18 alignas(8) uptr allocator_cache[96 * (512 * 8 + 16)]; // Opaque. 19 void Init(); 20 void CommitBack(); 21 22 private: 23 // These objects are allocated via mmap() and are zero-initialized. NsanThreadLocalMallocStorageNsanThreadLocalMallocStorage24 NsanThreadLocalMallocStorage() {} 25 }; 26 27 void NsanAllocatorInit(); 28 void NsanDeallocate(void *ptr); 29 30 void *nsan_malloc(uptr size); 31 void *nsan_calloc(uptr nmemb, uptr size); 32 void *nsan_realloc(void *ptr, uptr size); 33 void *nsan_reallocarray(void *ptr, uptr nmemb, uptr size); 34 void *nsan_valloc(uptr size); 35 void *nsan_pvalloc(uptr size); 36 void *nsan_aligned_alloc(uptr alignment, uptr size); 37 void *nsan_memalign(uptr alignment, uptr size); 38 int nsan_posix_memalign(void **memptr, uptr alignment, uptr size); 39 40 } // namespace __nsan 41 #endif // NSAN_ALLOCATOR_H 42