brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · b0e4ac7 Raw
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