1135642Scognet/* $NetBSD: explicit_memset.c,v 1.3 2013/08/28 17:47:07 riastradh Exp $ */
2135642Scognet
3139735Simp/*
4135642Scognet * Written by Matthias Drochner <drochner@NetBSD.org>.
5135642Scognet * Public domain.
6135642Scognet */
7135642Scognet
8135642Scognet#if !defined(_KERNEL) && !defined(_STANDALONE)
9135642Scognet#include "namespace.h"
10135642Scognet#include <string.h>
11135642Scognet#ifdef __weak_alias
12135642Scognet__weak_alias(explicit_memset,_explicit_memset)
13135642Scognet#endif
14135642Scognet#define explicit_memset_impl __explicit_memset_impl
15135642Scognet#else
16135642Scognet#include <lib/libkern/libkern.h>
17135642Scognet#endif
18135642Scognet
19135642Scognet/*
20135642Scognet * The use of a volatile pointer guarantees that the compiler
21135642Scognet * will not optimise the call away.
22135642Scognet */
23135642Scognetvoid *(* volatile explicit_memset_impl)(void *, int, size_t) = memset;
24135642Scognet
25135642Scognetvoid *
26135642Scognetexplicit_memset(void *b, int c, size_t len)
27135642Scognet{
28135642Scognet
29135642Scognet	return (*explicit_memset_impl)(b, c, len);
30135642Scognet}
31135642Scognet