11dd4c606SKostya Serebryany //===-- interception_linux.h ------------------------------------*- C++ -*-===// 21dd4c606SKostya Serebryany // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 61dd4c606SKostya Serebryany // 71dd4c606SKostya Serebryany //===----------------------------------------------------------------------===// 81dd4c606SKostya Serebryany // 91dd4c606SKostya Serebryany // This file is a part of AddressSanitizer, an address sanity checker. 101dd4c606SKostya Serebryany // 111dd4c606SKostya Serebryany // Linux-specific interception methods. 121dd4c606SKostya Serebryany //===----------------------------------------------------------------------===// 131dd4c606SKostya Serebryany 14271018d2SKamil Rytarowski #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ 1553065c54SDavid Carlier SANITIZER_SOLARIS 161dd4c606SKostya Serebryany 171dd4c606SKostya Serebryany #if !defined(INCLUDED_FROM_INTERCEPTION_LIB) 181dd4c606SKostya Serebryany # error "interception_linux.h should be included from interception library only" 191dd4c606SKostya Serebryany #endif 201dd4c606SKostya Serebryany 211dd4c606SKostya Serebryany #ifndef INTERCEPTION_LINUX_H 221dd4c606SKostya Serebryany #define INTERCEPTION_LINUX_H 231dd4c606SKostya Serebryany 241dd4c606SKostya Serebryany namespace __interception { 2591c166cbSJulian Lettner bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, 2691c166cbSJulian Lettner uptr wrapper); 2791c166cbSJulian Lettner bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, 2891c166cbSJulian Lettner uptr func, uptr wrapper); 291dd4c606SKostya Serebryany } // namespace __interception 301dd4c606SKostya Serebryany 3104f2bf0fSKostya Serebryany #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) \ 3291c166cbSJulian Lettner ::__interception::InterceptFunction( \ 3391c166cbSJulian Lettner #func, \ 3491c166cbSJulian Lettner (::__interception::uptr *) & REAL(func), \ 355642c3feSReid Kleckner (::__interception::uptr) & (func), \ 365642c3feSReid Kleckner (::__interception::uptr) & WRAP(func)) 371dd4c606SKostya Serebryany 38*7afdc89cSFangrui Song // dlvsym is a GNU extension supported by some other platforms. 39*7afdc89cSFangrui Song #if SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD 4004f2bf0fSKostya Serebryany #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 4191c166cbSJulian Lettner ::__interception::InterceptFunction( \ 4291c166cbSJulian Lettner #func, symver, \ 4391c166cbSJulian Lettner (::__interception::uptr *) & REAL(func), \ 4491c166cbSJulian Lettner (::__interception::uptr) & (func), \ 4591c166cbSJulian Lettner (::__interception::uptr) & WRAP(func)) 46edecc383SAlexey Samsonov #else 4704f2bf0fSKostya Serebryany #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 4804f2bf0fSKostya Serebryany INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) 49*7afdc89cSFangrui Song #endif // SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD 503a6c7ceaSDmitry Vyukov 511dd4c606SKostya Serebryany #endif // INTERCEPTION_LINUX_H 52271018d2SKamil Rytarowski #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || 5353065c54SDavid Carlier // SANITIZER_SOLARIS 54