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