| //===-- memprof_internal.h -------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is a part of MemProfiler, a memory profiler. |
| // |
| // MemProf-private header which defines various general utilities. |
| //===----------------------------------------------------------------------===// |
| #ifndef MEMPROF_INTERNAL_H |
| #define MEMPROF_INTERNAL_H |
| |
| #include "memprof_flags.h" |
| #include "memprof_interface_internal.h" |
| #include "sanitizer_common/sanitizer_common.h" |
| #include "sanitizer_common/sanitizer_internal_defs.h" |
| #include "sanitizer_common/sanitizer_libc.h" |
| #include "sanitizer_common/sanitizer_stacktrace.h" |
| |
| #if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) |
| #error "The MemProfiler run-time should not be instrumented by MemProfiler" |
| #endif |
| |
| // Build-time configuration options. |
| |
| // If set, memprof will intercept C++ exception api call(s). |
| #ifndef MEMPROF_HAS_EXCEPTIONS |
| #define MEMPROF_HAS_EXCEPTIONS 1 |
| #endif |
| |
| #ifndef MEMPROF_DYNAMIC |
| #ifdef PIC |
| #define MEMPROF_DYNAMIC 1 |
| #else |
| #define MEMPROF_DYNAMIC 0 |
| #endif |
| #endif |
| |
| // All internal functions in memprof reside inside the __memprof namespace |
| // to avoid namespace collisions with the user programs. |
| // Separate namespace also makes it simpler to distinguish the memprof |
| // run-time functions from the instrumented user code in a profile. |
| namespace __memprof { |
| |
| class MemprofThread; |
| using __sanitizer::StackTrace; |
| |
| void MemprofInitFromRtl(); |
| |
| // memprof_rtl.cpp |
| void PrintAddressSpaceLayout(); |
| |
| // memprof_shadow_setup.cpp |
| void InitializeShadowMemory(); |
| |
| // memprof_malloc_linux.cpp |
| void ReplaceSystemMalloc(); |
| |
| // memprof_linux.cpp |
| uptr FindDynamicShadowStart(); |
| void *MemprofDoesNotSupportStaticLinkage(); |
| |
| // memprof_thread.cpp |
| MemprofThread *CreateMainThread(); |
| |
| // Wrapper for TLS/TSD. |
| void TSDInit(void (*destructor)(void *tsd)); |
| void *TSDGet(); |
| void TSDSet(void *tsd); |
| void PlatformTSDDtor(void *tsd); |
| |
| void *MemprofDlSymNext(const char *sym); |
| |
| extern int memprof_inited; |
| extern int memprof_timestamp_inited; |
| extern int memprof_init_done; |
| // Used to avoid infinite recursion in __memprof_init(). |
| extern bool memprof_init_is_running; |
| extern void (*death_callback)(void); |
| extern long memprof_init_timestamp_s; |
| |
| } // namespace __memprof |
| |
| #endif // MEMPROF_INTERNAL_H |