TPDE
Loading...
Searching...
No Matches
AddressSanitizer.hpp
1// SPDX-FileCopyrightText: 2025 Contributors to TPDE <https://tpde.org>
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3#pragma once
4
5#include <cstddef>
6
7#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
8 #define TPDE_ASAN_BUILD
9extern "C" void __asan_poison_memory_region(void const volatile *p,
10 size_t size);
11extern "C" void __asan_unpoison_memory_region(void const volatile *p,
12 size_t size);
13#endif
14
15namespace tpde::util {
16
17#if defined(TPDE_ASAN_BUILD)
18constexpr const bool address_sanitizer_active = true;
19#else
20constexpr const bool address_sanitizer_active = false;
21#endif
22
23[[gnu::always_inline]] static inline void
24 poison_memory_region([[maybe_unused]] void const volatile *p,
25 [[maybe_unused]] size_t size) {
26#if defined(TPDE_ASAN_BUILD)
27 __asan_poison_memory_region(p, size);
28#endif
29}
30
31[[gnu::always_inline]] static inline void
32 unpoison_memory_region([[maybe_unused]] void const volatile *p,
33 [[maybe_unused]] size_t size) {
34#if defined(TPDE_ASAN_BUILD)
35 __asan_unpoison_memory_region(p, size);
36#endif
37}
38
39} // namespace tpde::util