45 lines
1.4 KiB
Diff
45 lines
1.4 KiB
Diff
|
From f17ee493475793be52b364b0ad7cd7042bc27ffe Mon Sep 17 00:00:00 2001
|
||
|
From: chao an <anchao@lixiang.com>
|
||
|
Date: Sat, 29 Jun 2024 09:40:26 +0800
|
||
|
Subject: [PATCH] libmetal/atomic: enable 64-bit atomic by toolchain builtin
|
||
|
flags
|
||
|
|
||
|
Fix compile error:
|
||
|
arm-none-eabi-ld: (remoteproc_virtio.o): in function `metal_io_read':
|
||
|
metal/io.h:252: undefined reference to `__atomic_load_8'
|
||
|
arm-none-eabi-ld: (remoteproc_virtio.o): in function `metal_io_write':
|
||
|
metal/io.h:290: undefined reference to `__atomic_store_8'
|
||
|
|
||
|
Not all 32-bit architectures support 64bit atomic, gcc/clang
|
||
|
toolchains have built-in properties to indicate whether support atomic64:
|
||
|
|
||
|
| $ arm-none-eabi-gcc -march=armv7e-m -dM -E - < /dev/null | grep SYNC
|
||
|
| #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
|
||
|
| #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
|
||
|
| #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
|
||
|
|
||
|
Signed-off-by: chao an <anchao@lixiang.com>
|
||
|
---
|
||
|
openamp/libmetal/lib/io.h | 5 +++--
|
||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/lib/io.h libmetal/lib/io.h
|
||
|
index ba416dd505..8cd03e41db 100644
|
||
|
--- a/lib/io.h
|
||
|
+++ libmetal/lib/io.h
|
||
|
@@ -30,8 +30,9 @@ extern "C" {
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
-#ifdef __MICROBLAZE__
|
||
|
-#define NO_ATOMIC_64_SUPPORT
|
||
|
+#if defined(__MICROBLAZE__) || \
|
||
|
+ (defined(__GNUC__) && !defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8))
|
||
|
+# define NO_ATOMIC_64_SUPPORT
|
||
|
#endif
|
||
|
|
||
|
struct metal_io_region;
|
||
|
--
|
||
|
2.34.1
|
||
|
|