From 95fcb946487f6a8ab346c635c66644acc0ee8dd2 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Fri, 20 Jun 2014 18:29:15 +0200 Subject: [PATCH] Add explicit_bzero(3). --- libc/Makefile | 1 + libc/include/string.h | 1 + libc/string/explicit_bzero.cpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 libc/string/explicit_bzero.cpp diff --git a/libc/Makefile b/libc/Makefile index daa68ab3..b891d061 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -184,6 +184,7 @@ stdlib/strtoull.o \ stdlib/strtoul.o \ stdlib/wcstombs.o \ stdlib/wctomb.o \ +string/explicit_bzero.o \ string/ffsll.o \ string/ffsl.o \ string/ffs.o \ diff --git a/libc/include/string.h b/libc/include/string.h index 3bd814cb..5fbff141 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -124,6 +124,7 @@ size_t strxfrm_l(char* __restrict, const char* __restrict, size_t, locale_t); /* Functions copied from elsewhere. */ #if __USE_SORTIX +void explicit_bzero(void*, size_t); int ffsl(long int); void* memrchr(const void*, int, size_t); /* TODO: strcasecmp_l */ diff --git a/libc/string/explicit_bzero.cpp b/libc/string/explicit_bzero.cpp new file mode 100644 index 00000000..a603e027 --- /dev/null +++ b/libc/string/explicit_bzero.cpp @@ -0,0 +1,34 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2014. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + string/explicit_bzero.cpp + Initializes a region of memory to a byte value in a manner that is not + optimized away by the compiler. + +*******************************************************************************/ + +#include + +// TODO: Employ special compiler support to ensure this is not optimized away. +extern "C" void explicit_bzero(void* dest_ptr, size_t size) +{ + volatile unsigned char* dest = (volatile unsigned char*) dest_ptr; + for ( size_t i = 0; i < size; i++ ) + dest[i] = 0; +}