xref: /aosp_15_r20/external/compiler-rt/lib/sanitizer_common/sanitizer_mac.h (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===-- sanitizer_mac.h -----------------------------------------*- C++ -*-===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot //                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is distributed under the University of Illinois Open Source
6*7c3d14c8STreehugger Robot // License. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // This file is shared between various sanitizers' runtime libraries and
11*7c3d14c8STreehugger Robot // provides definitions for OSX-specific functions.
12*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
13*7c3d14c8STreehugger Robot #ifndef SANITIZER_MAC_H
14*7c3d14c8STreehugger Robot #define SANITIZER_MAC_H
15*7c3d14c8STreehugger Robot 
16*7c3d14c8STreehugger Robot #include "sanitizer_common.h"
17*7c3d14c8STreehugger Robot #include "sanitizer_platform.h"
18*7c3d14c8STreehugger Robot #if SANITIZER_MAC
19*7c3d14c8STreehugger Robot #include "sanitizer_posix.h"
20*7c3d14c8STreehugger Robot 
21*7c3d14c8STreehugger Robot namespace __sanitizer {
22*7c3d14c8STreehugger Robot 
23*7c3d14c8STreehugger Robot enum MacosVersion {
24*7c3d14c8STreehugger Robot   MACOS_VERSION_UNINITIALIZED = 0,
25*7c3d14c8STreehugger Robot   MACOS_VERSION_UNKNOWN,
26*7c3d14c8STreehugger Robot   MACOS_VERSION_LEOPARD,
27*7c3d14c8STreehugger Robot   MACOS_VERSION_SNOW_LEOPARD,
28*7c3d14c8STreehugger Robot   MACOS_VERSION_LION,
29*7c3d14c8STreehugger Robot   MACOS_VERSION_MOUNTAIN_LION,
30*7c3d14c8STreehugger Robot   MACOS_VERSION_MAVERICKS,
31*7c3d14c8STreehugger Robot   MACOS_VERSION_YOSEMITE,
32*7c3d14c8STreehugger Robot   MACOS_VERSION_UNKNOWN_NEWER
33*7c3d14c8STreehugger Robot };
34*7c3d14c8STreehugger Robot 
35*7c3d14c8STreehugger Robot MacosVersion GetMacosVersion();
36*7c3d14c8STreehugger Robot 
37*7c3d14c8STreehugger Robot char **GetEnviron();
38*7c3d14c8STreehugger Robot 
39*7c3d14c8STreehugger Robot }  // namespace __sanitizer
40*7c3d14c8STreehugger Robot 
41*7c3d14c8STreehugger Robot extern "C" {
42*7c3d14c8STreehugger Robot static char __crashreporter_info_buff__[kErrorMessageBufferSize] = {};
43*7c3d14c8STreehugger Robot static const char *__crashreporter_info__ __attribute__((__used__)) =
44*7c3d14c8STreehugger Robot   &__crashreporter_info_buff__[0];
45*7c3d14c8STreehugger Robot asm(".desc ___crashreporter_info__, 0x10");
46*7c3d14c8STreehugger Robot } // extern "C"
47*7c3d14c8STreehugger Robot static BlockingMutex crashreporter_info_mutex(LINKER_INITIALIZED);
48*7c3d14c8STreehugger Robot 
CRAppendCrashLogMessage(const char * msg)49*7c3d14c8STreehugger Robot INLINE void CRAppendCrashLogMessage(const char *msg) {
50*7c3d14c8STreehugger Robot   BlockingMutexLock l(&crashreporter_info_mutex);
51*7c3d14c8STreehugger Robot   internal_strlcat(__crashreporter_info_buff__, msg,
52*7c3d14c8STreehugger Robot                    sizeof(__crashreporter_info_buff__)); }
53*7c3d14c8STreehugger Robot 
54*7c3d14c8STreehugger Robot #endif  // SANITIZER_MAC
55*7c3d14c8STreehugger Robot #endif  // SANITIZER_MAC_H
56