cpu/esp32: add memset that cannot be optimized out

Adds a memset function `system_secure_memset` which cannot be optimized out by the compiler. It uses the libsodium approach of weak symbols. Function system_secure_memset calls the standard memset. Calling an empty function declared with weak attribute after the memset call, prevents the compiler to optimize it out. The overhead is only one function call.
This commit is contained in:
Gunar Schorcht 2019-01-17 13:50:56 +01:00
parent 519b9ebc33
commit 2215f29883
2 changed files with 19 additions and 0 deletions

View File

@ -23,6 +23,7 @@
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include "esp_common.h"
@ -61,6 +62,9 @@ void system_wdt_stop (void);
/** reset the system watchdog timer */
void system_wdt_feed (void);
/** memset version that the compiler should not be allowed to optimize this */
void *system_secure_memset(void *s, int c, size_t n);
#ifdef __cplusplus
}
#endif

View File

@ -595,3 +595,18 @@ void system_wdt_start (void)
TIMERG0.wdt_wprotect = 0; /* enable write protection */
xt_ints_on(BIT(CPU_INUM_WDT));
}
__attribute__((weak)) void
_system_prevent_memset_lto(void *const s, int c, const size_t n)
{
(void) s;
(void) c;
(void) n;
}
void *system_secure_memset(void *s, int c, size_t n)
{
memset(s, c, n);
_system_prevent_memset_lto(s, c, n);
return s;
}