interception_mac.h revision 238901
1130803Smarcel//===-- interception_mac.h --------------------------------------*- C++ -*-===// 2130803Smarcel// 3130803Smarcel// The LLVM Compiler Infrastructure 4130803Smarcel// 5130803Smarcel// This file is distributed under the University of Illinois Open Source 6130803Smarcel// License. See LICENSE.TXT for details. 7130803Smarcel// 8130803Smarcel//===----------------------------------------------------------------------===// 9130803Smarcel// 10130803Smarcel// This file is a part of AddressSanitizer, an address sanity checker. 11130803Smarcel// 12130803Smarcel// Mac-specific interception methods. 13130803Smarcel//===----------------------------------------------------------------------===// 14130803Smarcel 15130803Smarcel#ifdef __APPLE__ 16130803Smarcel 17130803Smarcel#if !defined(INCLUDED_FROM_INTERCEPTION_LIB) 18130803Smarcel# error "interception_mac.h should be included from interception.h only" 19130803Smarcel#endif 20130803Smarcel 21130803Smarcel#ifndef INTERCEPTION_MAC_H 22130803Smarcel#define INTERCEPTION_MAC_H 23130803Smarcel 24130803Smarcel#include <mach/mach_error.h> 25130803Smarcel#include <stddef.h> 26130803Smarcel 27130803Smarcel// Allocate memory for the escape island. This cannot be moved to 28130803Smarcel// mach_override, because each user of interceptors may specify its 29130803Smarcel// own memory range for escape islands. 30130803Smarcelextern "C" { 31130803Smarcelmach_error_t __interception_allocate_island(void **ptr, size_t unused_size, 32130803Smarcel void *unused_hint); 33130803Smarcelmach_error_t __interception_deallocate_island(void *ptr); 34130803Smarcel} // extern "C" 35130803Smarcel 36130803Smarcelnamespace __interception { 37130803Smarcel// returns true if the old function existed. 38130803Smarcelbool OverrideFunction(void *old_func, void *new_func, void **orig_old_func); 39130803Smarcel} // namespace __interception 40130803Smarcel 41130803Smarcel# define OVERRIDE_FUNCTION_MAC(old_func, new_func) \ 42130803Smarcel ::__interception::OverrideFunction((void*)old_func, (void*)new_func, \ 43130803Smarcel (void**)&REAL(old_func)) 44130803Smarcel# define INTERCEPT_FUNCTION_MAC(func) OVERRIDE_FUNCTION_MAC(func, WRAP(func)) 45130803Smarcel 46130803Smarcel#endif // INTERCEPTION_MAC_H 47130803Smarcel#endif // __APPLE__ 48130803Smarcel