1 | //===-- memprof_interceptors.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 | // This file is a part of MemProfiler, a memory profiler. |
10 | // |
11 | // MemProf-private header for memprof_interceptors.cpp |
12 | //===----------------------------------------------------------------------===// |
13 | #ifndef MEMPROF_INTERCEPTORS_H |
14 | #define MEMPROF_INTERCEPTORS_H |
15 | |
16 | #include "interception/interception.h" |
17 | #include "memprof_interceptors_memintrinsics.h" |
18 | #include "memprof_internal.h" |
19 | #include "sanitizer_common/sanitizer_platform_interceptors.h" |
20 | |
21 | namespace __memprof { |
22 | |
23 | void InitializeMemprofInterceptors(); |
24 | void InitializePlatformInterceptors(); |
25 | |
26 | #define ENSURE_MEMPROF_INITED() \ |
27 | do { \ |
28 | CHECK(!memprof_init_is_running); \ |
29 | if (UNLIKELY(!memprof_inited)) { \ |
30 | MemprofInitFromRtl(); \ |
31 | } \ |
32 | } while (0) |
33 | |
34 | } // namespace __memprof |
35 | |
36 | DECLARE_REAL(int, memcmp, const void *a1, const void *a2, uptr size) |
37 | DECLARE_REAL(char *, strchr, const char *str, int c) |
38 | DECLARE_REAL(SIZE_T, strlen, const char *s) |
39 | DECLARE_REAL(char *, strncpy, char *to, const char *from, uptr size) |
40 | DECLARE_REAL(uptr, strnlen, const char *s, uptr maxlen) |
41 | DECLARE_REAL(char *, strstr, const char *s1, const char *s2) |
42 | |
43 | #define MEMPROF_INTERCEPT_FUNC(name) \ |
44 | do { \ |
45 | if (!INTERCEPT_FUNCTION(name)) \ |
46 | VReport(1, "MemProfiler: failed to intercept '%s'\n'", #name); \ |
47 | } while (0) |
48 | #define MEMPROF_INTERCEPT_FUNC_VER(name, ver) \ |
49 | do { \ |
50 | if (!INTERCEPT_FUNCTION_VER(name, ver)) \ |
51 | VReport(1, "MemProfiler: failed to intercept '%s@@%s'\n", #name, ver); \ |
52 | } while (0) |
53 | #define MEMPROF_INTERCEPT_FUNC_VER_UNVERSIONED_FALLBACK(name, ver) \ |
54 | do { \ |
55 | if (!INTERCEPT_FUNCTION_VER(name, ver) && !INTERCEPT_FUNCTION(name)) \ |
56 | VReport(1, "MemProfiler: failed to intercept '%s@@%s' or '%s'\n", #name, \ |
57 | ver, #name); \ |
58 | } while (0) |
59 | |
60 | #define MEMPROF_INTERCEPTOR_ENTER(ctx, func) \ |
61 | ctx = 0; \ |
62 | (void)ctx; |
63 | |
64 | #define COMMON_INTERCEPT_FUNCTION(name) MEMPROF_INTERCEPT_FUNC(name) |
65 | |
66 | #endif // MEMPROF_INTERCEPTORS_H |
67 | |