12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===-- sanitizer_mac.h -----------------------------------------*- C++ -*-===//
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//                     The LLVM Compiler Infrastructure
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is distributed under the University of Illinois Open Source
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// License. See LICENSE.TXT for details.
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is shared between various sanitizers' runtime libraries and
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// provides definitions for OSX-specific functions.
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#ifndef SANITIZER_MAC_H
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#define SANITIZER_MAC_H
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
16799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include "sanitizer_common.h"
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "sanitizer_platform.h"
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if SANITIZER_MAC
19259f7063e3e4c4b94dded1e90ab0a943d0fa737bPirama Arumuga Nainar#include "sanitizer_posix.h"
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesnamespace __sanitizer {
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesenum MacosVersion {
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_UNINITIALIZED = 0,
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_UNKNOWN,
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_LEOPARD,
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_SNOW_LEOPARD,
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_LION,
292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  MACOS_VERSION_MOUNTAIN_LION,
306d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  MACOS_VERSION_MAVERICKS,
316d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  MACOS_VERSION_YOSEMITE,
3286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines  MACOS_VERSION_UNKNOWN_NEWER
332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines};
342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesMacosVersion GetMacosVersion();
362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
37799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarchar **GetEnviron();
38799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}  // namespace __sanitizer
402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
41799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarextern "C" {
42799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarstatic char __crashreporter_info_buff__[kErrorMessageBufferSize] = {};
43799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarstatic const char *__crashreporter_info__ __attribute__((__used__)) =
44799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar  &__crashreporter_info_buff__[0];
45799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarasm(".desc ___crashreporter_info__, 0x10");
46799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar} // extern "C"
47c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainarstatic BlockingMutex crashreporter_info_mutex(LINKER_INITIALIZED);
48799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
49c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga NainarINLINE void CRAppendCrashLogMessage(const char *msg) {
50c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  BlockingMutexLock l(&crashreporter_info_mutex);
51c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  internal_strlcat(__crashreporter_info_buff__, msg,
52799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar                   sizeof(__crashreporter_info_buff__)); }
53799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_MAC
552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif  // SANITIZER_MAC_H
56