Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/libc/src/__support/macros/sanitizer.h
213799 views
1
//===-- Convenient sanitizer macros -----------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H
10
#define LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H
11
12
#include "src/__support/macros/config.h" //LIBC_HAS_FEATURE
13
14
//-----------------------------------------------------------------------------
15
// Functions to unpoison memory
16
//-----------------------------------------------------------------------------
17
18
#if LIBC_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
19
#define LIBC_HAS_ADDRESS_SANITIZER
20
#endif
21
22
#if LIBC_HAS_FEATURE(memory_sanitizer)
23
#define LIBC_HAS_MEMORY_SANITIZER
24
#endif
25
26
#if LIBC_HAS_FEATURE(undefined_behavior_sanitizer)
27
#define LIBC_HAS_UNDEFINED_BEHAVIOR_SANITIZER
28
#endif
29
30
#if defined(LIBC_HAS_ADDRESS_SANITIZER) || \
31
defined(LIBC_HAS_MEMORY_SANITIZER) || \
32
defined(LIBC_HAS_UNDEFINED_BEHAVIOR_SANITIZER)
33
#define LIBC_HAS_SANITIZER
34
#endif
35
36
#ifdef LIBC_HAS_MEMORY_SANITIZER
37
// Only perform MSAN unpoison in non-constexpr context.
38
#include <sanitizer/msan_interface.h>
39
#define MSAN_UNPOISON(addr, size) \
40
do { \
41
if (!__builtin_is_constant_evaluated()) \
42
__msan_unpoison(addr, size); \
43
} while (0)
44
#else
45
#define MSAN_UNPOISON(ptr, size)
46
#endif
47
48
#ifdef LIBC_HAS_ADDRESS_SANITIZER
49
#include <sanitizer/asan_interface.h>
50
#define ASAN_POISON_MEMORY_REGION(addr, size) \
51
__asan_poison_memory_region((addr), (size))
52
#define ASAN_UNPOISON_MEMORY_REGION(addr, size) \
53
__asan_unpoison_memory_region((addr), (size))
54
#else
55
#define ASAN_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))
56
#define ASAN_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))
57
#endif
58
59
#endif // LLVM_LIBC_SRC___SUPPORT_MACROS_SANITIZER_H
60
61