1// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
6#define RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
7
8#include "platform/globals.h"
9
10// Allow the use of ASan (AddressSanitizer). This is needed as ASan needs to be
11// told about areas where the VM does the equivalent of a long-jump.
12#if defined(__has_feature)
13#if __has_feature(address_sanitizer)
14#define USING_ADDRESS_SANITIZER
15#endif
16#endif
17
18#if defined(USING_ADDRESS_SANITIZER)
19extern "C" void __asan_unpoison_memory_region(void*, size_t);
20#define NO_SANITIZE_ADDRESS __attribute__((no_sanitize("address")))
21#define ASAN_UNPOISON(ptr, len) __asan_unpoison_memory_region(ptr, len)
22#else // defined(USING_ADDRESS_SANITIZER)
23#define NO_SANITIZE_ADDRESS
24#define ASAN_UNPOISON(ptr, len) \
25 do { \
26 } while (false && (ptr) == 0 && (len) == 0)
27#endif // defined(USING_ADDRESS_SANITIZER)
28
29#endif // RUNTIME_PLATFORM_ADDRESS_SANITIZER_H_
30