1*84d9c625SLionel Sambuc /* $NetBSD: explicit_memset.c,v 1.3 2013/08/28 17:47:07 riastradh Exp $ */ 2*84d9c625SLionel Sambuc 3*84d9c625SLionel Sambuc #if !defined(_KERNEL) && !defined(_STANDALONE) 4*84d9c625SLionel Sambuc #include "namespace.h" 5*84d9c625SLionel Sambuc #include <string.h> 6*84d9c625SLionel Sambuc #ifdef __weak_alias 7*84d9c625SLionel Sambuc __weak_alias(explicit_memset,_explicit_memset) 8*84d9c625SLionel Sambuc #endif 9*84d9c625SLionel Sambuc #define explicit_memset_impl __explicit_memset_impl 10*84d9c625SLionel Sambuc #else 11*84d9c625SLionel Sambuc #include <lib/libkern/libkern.h> 12*84d9c625SLionel Sambuc #endif 13*84d9c625SLionel Sambuc 14*84d9c625SLionel Sambuc /* 15*84d9c625SLionel Sambuc * The use of a volatile pointer guarantees that the compiler 16*84d9c625SLionel Sambuc * will not optimise the call away. 17*84d9c625SLionel Sambuc */ 18*84d9c625SLionel Sambuc void *(* volatile explicit_memset_impl)(void *, int, size_t) = memset; 19*84d9c625SLionel Sambuc 20*84d9c625SLionel Sambuc void * 21*84d9c625SLionel Sambuc explicit_memset(void *b, int c, size_t len) 22*84d9c625SLionel Sambuc { 23*84d9c625SLionel Sambuc 24*84d9c625SLionel Sambuc return (*explicit_memset_impl)(b, c, len); 25*84d9c625SLionel Sambuc } 26