1 //===-- memprof_internal.h -------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This file is a part of MemProfiler, a memory profiler.
11 // MemProf-private header which defines various general utilities.
12 //===----------------------------------------------------------------------===//
13 #ifndef MEMPROF_INTERNAL_H
14 #define MEMPROF_INTERNAL_H
16 #include "memprof_flags.h"
17 #include "memprof_interface_internal.h"
18 #include "sanitizer_common/sanitizer_common.h"
19 #include "sanitizer_common/sanitizer_internal_defs.h"
20 #include "sanitizer_common/sanitizer_libc.h"
21 #include "sanitizer_common/sanitizer_stacktrace.h"
23 #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
24 #error "The MemProfiler run-time should not be instrumented by MemProfiler"
27 // Build-time configuration options.
29 // If set, memprof will intercept C++ exception api call(s).
30 #ifndef MEMPROF_HAS_EXCEPTIONS
31 #define MEMPROF_HAS_EXCEPTIONS 1
34 #ifndef MEMPROF_DYNAMIC
36 #define MEMPROF_DYNAMIC 1
38 #define MEMPROF_DYNAMIC 0
42 // All internal functions in memprof reside inside the __memprof namespace
43 // to avoid namespace collisions with the user programs.
44 // Separate namespace also makes it simpler to distinguish the memprof
45 // run-time functions from the instrumented user code in a profile.
49 using __sanitizer::StackTrace
;
51 void MemprofInitFromRtl();
54 void PrintAddressSpaceLayout();
56 // memprof_shadow_setup.cpp
57 void InitializeShadowMemory();
59 // memprof_malloc_linux.cpp
60 void ReplaceSystemMalloc();
63 uptr
FindDynamicShadowStart();
64 void *MemprofDoesNotSupportStaticLinkage();
67 MemprofThread
*CreateMainThread();
69 // Wrapper for TLS/TSD.
70 void TSDInit(void (*destructor
)(void *tsd
));
72 void TSDSet(void *tsd
);
73 void PlatformTSDDtor(void *tsd
);
75 void *MemprofDlSymNext(const char *sym
);
77 extern int memprof_inited
;
78 extern int memprof_timestamp_inited
;
79 // Used to avoid infinite recursion in __memprof_init().
80 extern bool memprof_init_is_running
;
81 extern void (*death_callback
)(void);
82 extern long memprof_init_timestamp_s
;
84 } // namespace __memprof
86 #endif // MEMPROF_INTERNAL_H