13cab2bb3Spatrick //===-- interception_linux.h ------------------------------------*- C++ -*-===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // 93cab2bb3Spatrick // This file is a part of AddressSanitizer, an address sanity checker. 103cab2bb3Spatrick // 113cab2bb3Spatrick // Linux-specific interception methods. 123cab2bb3Spatrick //===----------------------------------------------------------------------===// 133cab2bb3Spatrick 143cab2bb3Spatrick #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || \ 15*5e1c9963Sgnezdo SANITIZER_OPENBSD || SANITIZER_SOLARIS 163cab2bb3Spatrick 173cab2bb3Spatrick #if !defined(INCLUDED_FROM_INTERCEPTION_LIB) 183cab2bb3Spatrick # error "interception_linux.h should be included from interception library only" 193cab2bb3Spatrick #endif 203cab2bb3Spatrick 213cab2bb3Spatrick #ifndef INTERCEPTION_LINUX_H 223cab2bb3Spatrick #define INTERCEPTION_LINUX_H 233cab2bb3Spatrick 243cab2bb3Spatrick namespace __interception { 253cab2bb3Spatrick bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, 263cab2bb3Spatrick uptr wrapper); 273cab2bb3Spatrick bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, 283cab2bb3Spatrick uptr func, uptr wrapper); 293cab2bb3Spatrick } // namespace __interception 303cab2bb3Spatrick 313cab2bb3Spatrick #define INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) \ 323cab2bb3Spatrick ::__interception::InterceptFunction( \ 333cab2bb3Spatrick #func, \ 343cab2bb3Spatrick (::__interception::uptr *) & REAL(func), \ 353cab2bb3Spatrick (::__interception::uptr) & (func), \ 363cab2bb3Spatrick (::__interception::uptr) & WRAP(func)) 373cab2bb3Spatrick 38d89ec533Spatrick // dlvsym is a GNU extension supported by some other platforms. 39d89ec533Spatrick #if SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD 403cab2bb3Spatrick #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 413cab2bb3Spatrick ::__interception::InterceptFunction( \ 423cab2bb3Spatrick #func, symver, \ 433cab2bb3Spatrick (::__interception::uptr *) & REAL(func), \ 443cab2bb3Spatrick (::__interception::uptr) & (func), \ 453cab2bb3Spatrick (::__interception::uptr) & WRAP(func)) 463cab2bb3Spatrick #else 473cab2bb3Spatrick #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 483cab2bb3Spatrick INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) 49d89ec533Spatrick #endif // SANITIZER_GLIBC || SANITIZER_FREEBSD || SANITIZER_NETBSD 503cab2bb3Spatrick 513cab2bb3Spatrick #endif // INTERCEPTION_LINUX_H 523cab2bb3Spatrick #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || 53d89ec533Spatrick // SANITIZER_SOLARIS 54