107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===-- interception_linux.h ------------------------------------*- C++ -*-===//
207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//
307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//                     The LLVM Compiler Infrastructure
407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//
507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// This file is distributed under the University of Illinois Open Source
607bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// License. See LICENSE.TXT for details.
707bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//
807bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===----------------------------------------------------------------------===//
907bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//
1007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// This file is a part of AddressSanitizer, an address sanity checker.
1107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//
1207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// Windows-specific interception methods.
1307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov//===----------------------------------------------------------------------===//
1407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
1507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#ifdef _WIN32
1607bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
1707bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#if !defined(INCLUDED_FROM_INTERCEPTION_LIB)
1807bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov# error "interception_win.h should be included from interception library only"
1907bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif
2007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
2107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#ifndef INTERCEPTION_WIN_H
2207bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#define INTERCEPTION_WIN_H
2307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
2407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanovnamespace __interception {
2507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov// returns true if a function with the given name was found.
26bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonovbool GetRealFunctionAddress(const char *func_name, uptr *func_addr);
272716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov
282716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov// returns true if the old function existed, false on failure.
29bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonovbool OverrideFunction(uptr old_func, uptr new_func, uptr *orig_old_func);
3007bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov}  // namespace __interception
3107bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
322716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#if defined(_DLL)
332716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov# define INTERCEPT_FUNCTION_WIN(func) \
34bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov    ::__interception::GetRealFunctionAddress( \
35bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov        #func, (::__interception::uptr*)&REAL(func))
362716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#else
372716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov# define INTERCEPT_FUNCTION_WIN(func) \
38bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov    ::__interception::OverrideFunction( \
39bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov        (::__interception::uptr)func, \
40bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov        (::__interception::uptr)WRAP(func), \
41bfa11b66d2d9e677be00164d44bcc0c9c6bc8f82Alexey Samsonov        (::__interception::uptr*)&REAL(func))
422716a61d085a8fdf13a099822720e320414cc4dcTimur Iskhodzhanov#endif
4307bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov
4407bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif  // INTERCEPTION_WIN_H
4507bb9f1e3600195119aec1aae1aa48a6ed2f5febTimur Iskhodzhanov#endif  // _WIN32
46