Home | History | Annotate | Line # | Download | only in interception
      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