1// Copyright 2017 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#pragma once
6
7#include <zircon/compiler.h>
8#include <zircon/sanitizer.h>
9
10// NOTE: userboot includes memcpy, memmove, and memset source files
11// directly, so it needs to be able to handle their #include's of this
12// header.
13
14#if __has_feature(address_sanitizer)
15
16// In the sanitized build, the __asan_mem* names provided by the
17// sanitizer runtime must have weak definitions in libc to satisfy
18// its own references before the sanitizer runtime is loaded.
19#define __asan_weak_alias(name) \
20    __typeof(name) __asan_##name __attribute__((weak, alias(#name)));
21
22#include <sanitizer/asan_interface.h>
23
24void __asan_early_init(void) __attribute__((visibility("hidden")));
25
26#else  // !__has_feature(address_sanitizer)
27
28#define __asan_weak_alias(name) // Do nothing in unsanitized build.
29
30#endif  // __has_feature(address_sanitizer)
31