83 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file is shared between various sanitizers' runtime libraries and10// provides definitions for OSX-specific functions.11//===----------------------------------------------------------------------===//12#ifndef SANITIZER_APPLE_H13#define SANITIZER_APPLE_H14 15#include "sanitizer_common.h"16#include "sanitizer_platform.h"17#if SANITIZER_APPLE18#include "sanitizer_posix.h"19 20namespace __sanitizer {21 22struct 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 33template <typename VersionType>34struct 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 ||42 (major == other.major && minor >= other.minor);43 }44 bool operator<(const VersionType &other) const { return !(*this >= other); }45};46 47template <typename VersionType>48bool operator==(const VersionBase<VersionType> &self,49 const VersionBase<VersionType> &other) {50 return self.major == other.major && self.minor == other.minor;51}52 53struct MacosVersion : VersionBase<MacosVersion> {54 MacosVersion(u16 major, u16 minor) : VersionBase(major, minor) {}55};56 57struct DarwinKernelVersion : VersionBase<DarwinKernelVersion> {58 DarwinKernelVersion(u16 major, u16 minor) : VersionBase(major, minor) {}59};60 61MacosVersion GetMacosAlignedVersion();62DarwinKernelVersion GetDarwinKernelVersion();63 64char **GetEnviron();65 66void RestrictMemoryToMaxAddress(uptr max_address);67 68using ThreadEventCallback = void (*)(uptr thread);69using ThreadCreateEventCallback = void (*)(uptr thread, bool gcd_worker);70struct ThreadEventCallbacks {71 ThreadCreateEventCallback create;72 ThreadEventCallback start;73 ThreadEventCallback terminate;74 ThreadEventCallback destroy;75};76 77void InstallPthreadIntrospectionHook(const ThreadEventCallbacks &callbacks);78 79} // namespace __sanitizer80 81#endif // SANITIZER_APPLE82#endif // SANITIZER_APPLE_H83