//===-- Convenient sanitizer macros -----------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_LIBC_SRC_SUPPORT_MACROS_SANITIZER_H #define LLVM_LIBC_SRC_SUPPORT_MACROS_SANITIZER_H #include "src/__support/macros/config.h" //LIBC_HAS_FEATURE //----------------------------------------------------------------------------- // Properties to check the presence or absence or sanitizers //----------------------------------------------------------------------------- // MemorySanitizer (MSan) is a detector of uninitialized reads. It consists of // a compiler instrumentation module and a run-time library. The // MEMORY_SANITIZER macro is deprecated but we will continue to honor it for // now. #ifdef LIBC_HAVE_MEMORY_SANITIZER #error "LIBC_HAVE_MEMORY_SANITIZER cannot be directly set." #elif defined(MEMORY_SANITIZER) || defined(__SANITIZE_MEMORY__) || \ (LIBC_HAS_FEATURE(memory_sanitizer) && !defined(__native_client__)) #define LIBC_HAVE_MEMORY_SANITIZER #endif // AddressSanitizer (ASan) is a fast memory error detector. The // ADDRESS_SANITIZER macro is deprecated but we will continue to honor it for // now. #ifdef LIBC_HAVE_ADDRESS_SANITIZER #error "LIBC_HAVE_ADDRESS_SANITIZER cannot be directly set." #elif defined(ADDRESS_SANITIZER) || defined(__SANITIZE_ADDRESS__) || \ LIBC_HAS_FEATURE(address_sanitizer) #define LIBC_HAVE_ADDRESS_SANITIZER #endif // HWAddressSanitizer (HWASan) is a fast, low memory overhead error detector. #ifdef LIBC_HAVE_HWADDRESS_SANITIZER #error "LIBC_HAVE_HWADDRESS_SANITIZER cannot be directly set." #elif LIBC_HAS_FEATURE(hwaddress_sanitizer) #define LIBC_HAVE_HWADDRESS_SANITIZER #endif //----------------------------------------------------------------------------- // Functions to unpoison memory //----------------------------------------------------------------------------- #ifdef LIBC_HAVE_MEMORY_SANITIZER #include #define MSAN_UNPOISON(addr, size) __msan_unpoison(addr, size) #else #define MSAN_UNPOISON(ptr, size) #endif #ifdef LIBC_HAVE_ADDRESS_SANITIZER #include #define ASAN_POISON_MEMORY_REGION(addr, size) \ __asan_poison_memory_region((addr), (size)) #define ASAN_UNPOISON_MEMORY_REGION(addr, size) \ __asan_unpoison_memory_region((addr), (size)) #else #define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) #define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size)) #endif #endif // LLVM_LIBC_SRC_SUPPORT_MACROS_SANITIZER_H