5#ifndef V8_BASE_SANITIZER_ASAN_H_
6#define V8_BASE_SANITIZER_ASAN_H_
14#ifdef V8_USE_ADDRESS_SANITIZER
16#include <sanitizer/asan_interface.h>
18#if !defined(ASAN_POISON_MEMORY_REGION) || !defined(ASAN_UNPOISON_MEMORY_REGION)
20 "ASAN_POISON_MEMORY_REGION and ASAN_UNPOISON_MEMORY_REGION must be defined"
23#define DISABLE_ASAN __attribute__((no_sanitize_address))
29#define ASAN_CHECK_WHOLE_MEMORY_REGION_IS_POISONED(start, size) \
31 for (size_t i = 0; i < size; i++) { \
32 CHECK(__asan_address_is_poisoned(reinterpret_cast<const char*>(start) + \
43 __asan_region_is_poisoned(const_cast<void*>(addr_),
size_)) {
64#define ASAN_POISON_MEMORY_REGION(start, size) \
65 static_assert(std::is_pointer<decltype(start)>::value, \
66 "static type violation"); \
67 static_assert(std::is_convertible<decltype(size), size_t>::value, \
68 "static type violation"); \
71#define ASAN_UNPOISON_MEMORY_REGION(start, size) \
72 ASAN_POISON_MEMORY_REGION(start, size)
74#define ASAN_CHECK_WHOLE_MEMORY_REGION_IS_POISONED(start, size) \
75 ASAN_POISON_MEMORY_REGION(start, size)
84#ifdef V8_USE_HWADDRESS_SANITIZER
86#define DISABLE_HWASAN __attribute__((no_sanitize("hwaddress")))
#define ASAN_UNPOISON_MEMORY_REGION(start, size)
#define ASAN_POISON_MEMORY_REGION(start, size)
AsanUnpoisonScope(const void *, size_t)