]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_mac.h
zfs: merge openzfs/zfs@3de7aeb68 (zfs-2.1-release) into stable/13
[FreeBSD/FreeBSD.git] / contrib / llvm-project / compiler-rt / lib / sanitizer_common / sanitizer_mac.h
1 //===-- sanitizer_mac.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 shared between various sanitizers' runtime libraries and
10 // provides definitions for OSX-specific functions.
11 //===----------------------------------------------------------------------===//
12 #ifndef SANITIZER_MAC_H
13 #define SANITIZER_MAC_H
14
15 #include "sanitizer_common.h"
16 #include "sanitizer_platform.h"
17 #if SANITIZER_MAC
18 #include "sanitizer_posix.h"
19
20 namespace __sanitizer {
21
22 struct MemoryMappingLayoutData {
23   int current_image;
24   u32 current_magic;
25   u32 current_filetype;
26   ModuleArch current_arch;
27   u8 current_uuid[kModuleUUIDSize];
28   int current_load_cmd_count;
29   const char *current_load_cmd_addr;
30   bool current_instrumented;
31 };
32
33 template <typename VersionType>
34 struct VersionBase {
35   u16 major;
36   u16 minor;
37
38   VersionBase(u16 major, u16 minor) : major(major), minor(minor) {}
39
40   bool operator==(const VersionType &other) const {
41     return major == other.major && minor == other.minor;
42   }
43   bool operator>=(const VersionType &other) const {
44     return major > other.major ||
45            (major == other.major && minor >= other.minor);
46   }
47 };
48
49 struct MacosVersion : VersionBase<MacosVersion> {
50   MacosVersion(u16 major, u16 minor) : VersionBase(major, minor) {}
51 };
52
53 struct DarwinKernelVersion : VersionBase<DarwinKernelVersion> {
54   DarwinKernelVersion(u16 major, u16 minor) : VersionBase(major, minor) {}
55 };
56
57 MacosVersion GetMacosAlignedVersion();
58 DarwinKernelVersion GetDarwinKernelVersion();
59
60 char **GetEnviron();
61
62 void RestrictMemoryToMaxAddress(uptr max_address);
63
64 }  // namespace __sanitizer
65
66 extern "C" {
67 static char __crashreporter_info_buff__[__sanitizer::kErrorMessageBufferSize] =
68   {};
69 static const char *__crashreporter_info__ __attribute__((__used__)) =
70   &__crashreporter_info_buff__[0];
71 asm(".desc ___crashreporter_info__, 0x10");
72 } // extern "C"
73
74 namespace __sanitizer {
75 static BlockingMutex crashreporter_info_mutex(LINKER_INITIALIZED);
76
77 INLINE void CRAppendCrashLogMessage(const char *msg) {
78   BlockingMutexLock l(&crashreporter_info_mutex);
79   internal_strlcat(__crashreporter_info_buff__, msg,
80                    sizeof(__crashreporter_info_buff__)); }
81 }  // namespace __sanitizer
82
83 #endif  // SANITIZER_MAC
84 #endif  // SANITIZER_MAC_H