1*e8d8bef9SDimitry Andric //===-- memprof_interceptors.h ---------------------------------*- C++ -*-===// 2*e8d8bef9SDimitry Andric // 3*e8d8bef9SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*e8d8bef9SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*e8d8bef9SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*e8d8bef9SDimitry Andric // 7*e8d8bef9SDimitry Andric //===----------------------------------------------------------------------===// 8*e8d8bef9SDimitry Andric // 9*e8d8bef9SDimitry Andric // This file is a part of MemProfiler, a memory profiler. 10*e8d8bef9SDimitry Andric // 11*e8d8bef9SDimitry Andric // MemProf-private header for memprof_interceptors.cpp 12*e8d8bef9SDimitry Andric //===----------------------------------------------------------------------===// 13*e8d8bef9SDimitry Andric #ifndef MEMPROF_INTERCEPTORS_H 14*e8d8bef9SDimitry Andric #define MEMPROF_INTERCEPTORS_H 15*e8d8bef9SDimitry Andric 16*e8d8bef9SDimitry Andric #include "interception/interception.h" 17*e8d8bef9SDimitry Andric #include "memprof_interceptors_memintrinsics.h" 18*e8d8bef9SDimitry Andric #include "memprof_internal.h" 19*e8d8bef9SDimitry Andric #include "sanitizer_common/sanitizer_platform_interceptors.h" 20*e8d8bef9SDimitry Andric 21*e8d8bef9SDimitry Andric namespace __memprof { 22*e8d8bef9SDimitry Andric 23*e8d8bef9SDimitry Andric void InitializeMemprofInterceptors(); 24*e8d8bef9SDimitry Andric void InitializePlatformInterceptors(); 25*e8d8bef9SDimitry Andric 26*e8d8bef9SDimitry Andric #define ENSURE_MEMPROF_INITED() \ 27*e8d8bef9SDimitry Andric do { \ 28*e8d8bef9SDimitry Andric CHECK(!memprof_init_is_running); \ 29*e8d8bef9SDimitry Andric if (UNLIKELY(!memprof_inited)) { \ 30*e8d8bef9SDimitry Andric MemprofInitFromRtl(); \ 31*e8d8bef9SDimitry Andric } \ 32*e8d8bef9SDimitry Andric } while (0) 33*e8d8bef9SDimitry Andric 34*e8d8bef9SDimitry Andric } // namespace __memprof 35*e8d8bef9SDimitry Andric 36*e8d8bef9SDimitry Andric DECLARE_REAL(int, memcmp, const void *a1, const void *a2, uptr size) 37*e8d8bef9SDimitry Andric DECLARE_REAL(char *, strchr, const char *str, int c) 38*e8d8bef9SDimitry Andric DECLARE_REAL(SIZE_T, strlen, const char *s) 39*e8d8bef9SDimitry Andric DECLARE_REAL(char *, strncpy, char *to, const char *from, uptr size) 40*e8d8bef9SDimitry Andric DECLARE_REAL(uptr, strnlen, const char *s, uptr maxlen) 41*e8d8bef9SDimitry Andric DECLARE_REAL(char *, strstr, const char *s1, const char *s2) 42*e8d8bef9SDimitry Andric 43*e8d8bef9SDimitry Andric #define MEMPROF_INTERCEPT_FUNC(name) \ 44*e8d8bef9SDimitry Andric do { \ 45*e8d8bef9SDimitry Andric if (!INTERCEPT_FUNCTION(name)) \ 46*e8d8bef9SDimitry Andric VReport(1, "MemProfiler: failed to intercept '%s'\n'", #name); \ 47*e8d8bef9SDimitry Andric } while (0) 48*e8d8bef9SDimitry Andric #define MEMPROF_INTERCEPT_FUNC_VER(name, ver) \ 49*e8d8bef9SDimitry Andric do { \ 50*e8d8bef9SDimitry Andric if (!INTERCEPT_FUNCTION_VER(name, ver)) \ 51*e8d8bef9SDimitry Andric VReport(1, "MemProfiler: failed to intercept '%s@@%s'\n", #name, #ver); \ 52*e8d8bef9SDimitry Andric } while (0) 53*e8d8bef9SDimitry Andric 54*e8d8bef9SDimitry Andric #endif // MEMPROF_INTERCEPTORS_H 55