Home | History | Annotate | Line # | Download | only in sanitizer_common
      1 //===-- sanitizer_mac.h -----------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file is shared between various sanitizers' runtime libraries and
     11 // provides definitions for OSX-specific functions.
     12 //===----------------------------------------------------------------------===//
     13 #ifndef SANITIZER_MAC_H
     14 #define SANITIZER_MAC_H
     15 
     16 #include "sanitizer_common.h"
     17 #include "sanitizer_platform.h"
     18 #if SANITIZER_MAC
     19 #include "sanitizer_posix.h"
     20 
     21 namespace __sanitizer {
     22 
     23 struct MemoryMappingLayoutData {
     24   int current_image;
     25   u32 current_magic;
     26   u32 current_filetype;
     27   ModuleArch current_arch;
     28   u8 current_uuid[kModuleUUIDSize];
     29   int current_load_cmd_count;
     30   const char *current_load_cmd_addr;
     31   bool current_instrumented;
     32 };
     33 
     34 enum MacosVersion {
     35   MACOS_VERSION_UNINITIALIZED = 0,
     36   MACOS_VERSION_UNKNOWN,
     37   MACOS_VERSION_LEOPARD,
     38   MACOS_VERSION_SNOW_LEOPARD,
     39   MACOS_VERSION_LION,
     40   MACOS_VERSION_MOUNTAIN_LION,
     41   MACOS_VERSION_MAVERICKS,
     42   MACOS_VERSION_YOSEMITE,
     43   MACOS_VERSION_EL_CAPITAN,
     44   MACOS_VERSION_SIERRA,
     45   MACOS_VERSION_HIGH_SIERRA,
     46   MACOS_VERSION_HIGH_SIERRA_DOT_RELEASE_4,
     47   MACOS_VERSION_MOJAVE,
     48   MACOS_VERSION_UNKNOWN_NEWER
     49 };
     50 
     51 MacosVersion GetMacosVersion();
     52 
     53 char **GetEnviron();
     54 
     55 void RestrictMemoryToMaxAddress(uptr max_address);
     56 
     57 }  // namespace __sanitizer
     58 
     59 extern "C" {
     60 static char __crashreporter_info_buff__[__sanitizer::kErrorMessageBufferSize] =
     61   {};
     62 static const char *__crashreporter_info__ __attribute__((__used__)) =
     63   &__crashreporter_info_buff__[0];
     64 asm(".desc ___crashreporter_info__, 0x10");
     65 } // extern "C"
     66 
     67 namespace __sanitizer {
     68 static BlockingMutex crashreporter_info_mutex(LINKER_INITIALIZED);
     69 
     70 INLINE void CRAppendCrashLogMessage(const char *msg) {
     71   BlockingMutexLock l(&crashreporter_info_mutex);
     72   internal_strlcat(__crashreporter_info_buff__, msg,
     73                    sizeof(__crashreporter_info_buff__)); }
     74 }  // namespace __sanitizer
     75 
     76 #endif  // SANITIZER_MAC
     77 #endif  // SANITIZER_MAC_H
     78