1*0a6a1f1dSLionel Sambuc /* $NetBSD: explicit_memset.c,v 1.4 2014/06/24 16:39:39 drochner Exp $ */
2*0a6a1f1dSLionel Sambuc
3*0a6a1f1dSLionel Sambuc /*
4*0a6a1f1dSLionel Sambuc * Written by Matthias Drochner <drochner@NetBSD.org>.
5*0a6a1f1dSLionel Sambuc * Public domain.
6*0a6a1f1dSLionel Sambuc */
784d9c625SLionel Sambuc
884d9c625SLionel Sambuc #if !defined(_KERNEL) && !defined(_STANDALONE)
984d9c625SLionel Sambuc #include "namespace.h"
1084d9c625SLionel Sambuc #include <string.h>
1184d9c625SLionel Sambuc #ifdef __weak_alias
1284d9c625SLionel Sambuc __weak_alias(explicit_memset,_explicit_memset)
1384d9c625SLionel Sambuc #endif
1484d9c625SLionel Sambuc #define explicit_memset_impl __explicit_memset_impl
1584d9c625SLionel Sambuc #else
1684d9c625SLionel Sambuc #include <lib/libkern/libkern.h>
1784d9c625SLionel Sambuc #endif
1884d9c625SLionel Sambuc
1984d9c625SLionel Sambuc /*
2084d9c625SLionel Sambuc * The use of a volatile pointer guarantees that the compiler
2184d9c625SLionel Sambuc * will not optimise the call away.
2284d9c625SLionel Sambuc */
2384d9c625SLionel Sambuc void *(* volatile explicit_memset_impl)(void *, int, size_t) = memset;
2484d9c625SLionel Sambuc
2584d9c625SLionel Sambuc void *
explicit_memset(void * b,int c,size_t len)2684d9c625SLionel Sambuc explicit_memset(void *b, int c, size_t len)
2784d9c625SLionel Sambuc {
2884d9c625SLionel Sambuc
2984d9c625SLionel Sambuc return (*explicit_memset_impl)(b, c, len);
3084d9c625SLionel Sambuc }
31