1 1.1 kamil //===-- interception_linux.h ------------------------------------*- C++ -*-===// 2 1.1 kamil // 3 1.1 kamil // The LLVM Compiler Infrastructure 4 1.1 kamil // 5 1.1 kamil // This file is distributed under the University of Illinois Open Source 6 1.1 kamil // License. See LICENSE.TXT for details. 7 1.1 kamil // 8 1.1 kamil //===----------------------------------------------------------------------===// 9 1.1 kamil // 10 1.1 kamil // This file is a part of AddressSanitizer, an address sanity checker. 11 1.1 kamil // 12 1.1 kamil // Linux-specific interception methods. 13 1.1 kamil //===----------------------------------------------------------------------===// 14 1.1 kamil 15 1.1 kamil #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ 16 1.1 kamil SANITIZER_OPENBSD || SANITIZER_SOLARIS 17 1.1 kamil 18 1.1 kamil #if !defined(INCLUDED_FROM_INTERCEPTION_LIB) 19 1.1 kamil # error "interception_linux.h should be included from interception library only" 20 1.1 kamil #endif 21 1.1 kamil 22 1.1 kamil #ifndef INTERCEPTION_LINUX_H 23 1.1 kamil #define INTERCEPTION_LINUX_H 24 1.1 kamil 25 1.1 kamil namespace __interception { 26 1.1 kamil // returns true if a function with the given name was found. 27 1.1 kamil bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, 28 1.1 kamil uptr real, uptr wrapper); 29 1.1 kamil void *GetFuncAddrVer(const char *func_name, const char *ver); 30 1.1 kamil } // namespace __interception 31 1.1 kamil 32 1.1 kamil #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) \ 33 1.1 kamil ::__interception::GetRealFunctionAddress( \ 34 1.1 kamil #func, (::__interception::uptr *)&__interception::PTR_TO_REAL(func), \ 35 1.1 kamil (::__interception::uptr) & (func), \ 36 1.1 kamil (::__interception::uptr) & WRAP(func)) 37 1.1 kamil 38 1.1 kamil // Android, Solaris and OpenBSD do not have dlvsym 39 1.1 kamil #if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD 40 1.1 kamil #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 41 1.1 kamil (::__interception::real_##func = (func##_type)( \ 42 1.1 kamil unsigned long)::__interception::GetFuncAddrVer(#func, symver)) 43 1.1 kamil #else 44 1.1 kamil #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 45 1.1 kamil INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) 46 1.1 kamil #endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS 47 1.1 kamil 48 1.1 kamil #endif // INTERCEPTION_LINUX_H 49 1.1 kamil #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || 50 1.1 kamil // SANITIZER_OPENBSD || SANITIZER_SOLARIS 51