1 | /* ---------------------------------------------------------------------------- |
2 | Copyright (c) 2018-2021, Microsoft Research, Daan Leijen |
3 | This is free software; you can redistribute it and/or modify it under the |
4 | terms of the MIT license. A copy of the license can be found in the file |
5 | "LICENSE" at the root of this distribution. |
6 | -----------------------------------------------------------------------------*/ |
7 | #pragma once |
8 | #ifndef MIMALLOC_TRACK_H |
9 | #define MIMALLOC_TRACK_H |
10 | |
11 | // ------------------------------------------------------ |
12 | // Track memory ranges with macros for tools like Valgrind |
13 | // or other memory checkers. |
14 | // ------------------------------------------------------ |
15 | |
16 | #if MI_VALGRIND |
17 | |
18 | #define MI_TRACK_ENABLED 1 |
19 | |
20 | #include <valgrind/valgrind.h> |
21 | #include <valgrind/memcheck.h> |
22 | |
23 | #define mi_track_malloc(p,size,zero) VALGRIND_MALLOCLIKE_BLOCK(p,size,MI_PADDING_SIZE /*red zone*/,zero) |
24 | #define mi_track_resize(p,oldsize,newsize) VALGRIND_RESIZEINPLACE_BLOCK(p,oldsize,newsize,MI_PADDING_SIZE /*red zone*/) |
25 | #define mi_track_free(p) VALGRIND_FREELIKE_BLOCK(p,MI_PADDING_SIZE /*red zone*/) |
26 | #define mi_track_mem_defined(p,size) VALGRIND_MAKE_MEM_DEFINED(p,size) |
27 | #define mi_track_mem_undefined(p,size) VALGRIND_MAKE_MEM_UNDEFINED(p,size) |
28 | #define mi_track_mem_noaccess(p,size) VALGRIND_MAKE_MEM_NOACCESS(p,size) |
29 | |
30 | #else |
31 | |
32 | #define MI_TRACK_ENABLED 0 |
33 | |
34 | #define mi_track_malloc(p,size,zero) |
35 | #define mi_track_resize(p,oldsize,newsize) |
36 | #define mi_track_free(p) |
37 | #define mi_track_mem_defined(p,size) |
38 | #define mi_track_mem_undefined(p,size) |
39 | #define mi_track_mem_noaccess(p,size) |
40 | |
41 | #endif |
42 | |
43 | #endif |
44 | |