Path: blob/main/contrib/llvm-project/libc/src/__support/macros/sanitizer.h
213799 views
//===-- Convenient sanitizer macros -----------------------------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H9#define LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H1011#include "src/__support/macros/config.h" //LIBC_HAS_FEATURE1213//-----------------------------------------------------------------------------14// Functions to unpoison memory15//-----------------------------------------------------------------------------1617#if LIBC_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)18#define LIBC_HAS_ADDRESS_SANITIZER19#endif2021#if LIBC_HAS_FEATURE(memory_sanitizer)22#define LIBC_HAS_MEMORY_SANITIZER23#endif2425#if LIBC_HAS_FEATURE(undefined_behavior_sanitizer)26#define LIBC_HAS_UNDEFINED_BEHAVIOR_SANITIZER27#endif2829#if defined(LIBC_HAS_ADDRESS_SANITIZER) || \30defined(LIBC_HAS_MEMORY_SANITIZER) || \31defined(LIBC_HAS_UNDEFINED_BEHAVIOR_SANITIZER)32#define LIBC_HAS_SANITIZER33#endif3435#ifdef LIBC_HAS_MEMORY_SANITIZER36// Only perform MSAN unpoison in non-constexpr context.37#include <sanitizer/msan_interface.h>38#define MSAN_UNPOISON(addr, size) \39do { \40if (!__builtin_is_constant_evaluated()) \41__msan_unpoison(addr, size); \42} while (0)43#else44#define MSAN_UNPOISON(ptr, size)45#endif4647#ifdef LIBC_HAS_ADDRESS_SANITIZER48#include <sanitizer/asan_interface.h>49#define ASAN_POISON_MEMORY_REGION(addr, size) \50__asan_poison_memory_region((addr), (size))51#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \52__asan_unpoison_memory_region((addr), (size))53#else54#define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))55#define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))56#endif5758#endif // LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H596061