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:
parent
519b9ebc33
commit
2215f29883
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user