From 3d9814bf8bfa964d730631e4d5ca66a5779df170 Mon Sep 17 00:00:00 2001 From: Andrei Safronov Date: Wed, 23 Mar 2022 21:07:26 +0300 Subject: [PATCH] newlib: implement __atomic_load/__atomic_store functions --- components/newlib/stdatomic.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/components/newlib/stdatomic.c b/components/newlib/stdatomic.c index 716801990d..f4b2bca371 100644 --- a/components/newlib/stdatomic.c +++ b/components/newlib/stdatomic.c @@ -9,6 +9,7 @@ #include "sdkconfig.h" #include #include +#include #include "soc/soc_caps.h" #include "freertos/FreeRTOS.h" @@ -494,3 +495,18 @@ ATOMIC_LOAD(8, long long unsigned int) ATOMIC_STORE(8, long long unsigned int) #endif // !HAS_ATOMICS_64 + +// Clang generates calls to the __atomic_load/__atomic_store functions for object size more then 4 bytes +void CLANG_ATOMIC_SUFFIX( __atomic_load ) (int size, void *src, void *dest, int model) { + unsigned state = _ATOMIC_ENTER_CRITICAL(); + memcpy(dest, src, size); + _ATOMIC_EXIT_CRITICAL(state); +} +CLANG_DECLARE_ALIAS( __atomic_load ) + +void CLANG_ATOMIC_SUFFIX( __atomic_store ) (int size, void *dest, void *src, int model) { + unsigned state = _ATOMIC_ENTER_CRITICAL(); + memcpy(dest, src, size); + _ATOMIC_EXIT_CRITICAL(state); +} +CLANG_DECLARE_ALIAS( __atomic_store)