1ae1fc9baSNico Weber //===-- lsan_malloc_mac.cpp -----------------------------------------------===// 2ae1fc9baSNico Weber // 3ae1fc9baSNico Weber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ae1fc9baSNico Weber // See https://llvm.org/LICENSE.txt for license information. 5ae1fc9baSNico Weber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ae1fc9baSNico Weber // 7ae1fc9baSNico Weber //===----------------------------------------------------------------------===// 8ae1fc9baSNico Weber // 9ae1fc9baSNico Weber // This file is a part of LeakSanitizer (LSan), a memory leak detector. 10ae1fc9baSNico Weber // 11ae1fc9baSNico Weber // Mac-specific malloc interception. 12ae1fc9baSNico Weber //===----------------------------------------------------------------------===// 13ae1fc9baSNico Weber 14ae1fc9baSNico Weber #include "sanitizer_common/sanitizer_platform.h" 15*8246b2e1SMariusz Borsa #if SANITIZER_APPLE 16ae1fc9baSNico Weber 17ae1fc9baSNico Weber #include "lsan.h" 18ae1fc9baSNico Weber #include "lsan_allocator.h" 19ae1fc9baSNico Weber #include "lsan_thread.h" 20ae1fc9baSNico Weber 21ae1fc9baSNico Weber using namespace __lsan; 22ae1fc9baSNico Weber #define COMMON_MALLOC_ZONE_NAME "lsan" 23ae1fc9baSNico Weber #define COMMON_MALLOC_ENTER() ENSURE_LSAN_INITED 24ae1fc9baSNico Weber #define COMMON_MALLOC_SANITIZER_INITIALIZED lsan_inited 25ae1fc9baSNico Weber #define COMMON_MALLOC_FORCE_LOCK() 26ae1fc9baSNico Weber #define COMMON_MALLOC_FORCE_UNLOCK() 27ae1fc9baSNico Weber #define COMMON_MALLOC_MEMALIGN(alignment, size) \ 28ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 29ae1fc9baSNico Weber void *p = lsan_memalign(alignment, size, stack) 30ae1fc9baSNico Weber #define COMMON_MALLOC_MALLOC(size) \ 31ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 32ae1fc9baSNico Weber void *p = lsan_malloc(size, stack) 33ae1fc9baSNico Weber #define COMMON_MALLOC_REALLOC(ptr, size) \ 34ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 35ae1fc9baSNico Weber void *p = lsan_realloc(ptr, size, stack) 36ae1fc9baSNico Weber #define COMMON_MALLOC_CALLOC(count, size) \ 37ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 38ae1fc9baSNico Weber void *p = lsan_calloc(count, size, stack) 39ae1fc9baSNico Weber #define COMMON_MALLOC_POSIX_MEMALIGN(memptr, alignment, size) \ 40ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 41ae1fc9baSNico Weber int res = lsan_posix_memalign(memptr, alignment, size, stack) 42ae1fc9baSNico Weber #define COMMON_MALLOC_VALLOC(size) \ 43ae1fc9baSNico Weber GET_STACK_TRACE_MALLOC; \ 44ae1fc9baSNico Weber void *p = lsan_valloc(size, stack) 45ae1fc9baSNico Weber #define COMMON_MALLOC_FREE(ptr) \ 46ae1fc9baSNico Weber lsan_free(ptr) 47ae1fc9baSNico Weber #define COMMON_MALLOC_SIZE(ptr) \ 48ae1fc9baSNico Weber uptr size = lsan_mz_size(ptr) 49ae1fc9baSNico Weber #define COMMON_MALLOC_FILL_STATS(zone, stats) 50ae1fc9baSNico Weber #define COMMON_MALLOC_REPORT_UNKNOWN_REALLOC(ptr, zone_ptr, zone_name) \ 51ae1fc9baSNico Weber (void)zone_name; \ 52ae1fc9baSNico Weber Report("mz_realloc(%p) -- attempting to realloc unallocated memory.\n", ptr); 53ae1fc9baSNico Weber #define COMMON_MALLOC_NAMESPACE __lsan 54ae1fc9baSNico Weber #define COMMON_MALLOC_HAS_ZONE_ENUMERATOR 0 55ae1fc9baSNico Weber #define COMMON_MALLOC_HAS_EXTRA_INTROSPECTION_INIT 0 56ae1fc9baSNico Weber 57ae1fc9baSNico Weber #include "sanitizer_common/sanitizer_malloc_mac.inc" 58ae1fc9baSNico Weber 59*8246b2e1SMariusz Borsa #endif // SANITIZER_APPLE 60