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