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>
This commit is contained in:
parent
ec150b21d9
commit
ab51eae836
|
@ -0,0 +1,44 @@
|
|||
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
|
||||
|
|
@ -40,6 +40,8 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libmetal)
|
|||
${CMAKE_CURRENT_LIST_DIR}/0002-libmetal-nuttx-io.c-align-access-when-read-write-siz.patch
|
||||
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} <
|
||||
${CMAKE_CURRENT_LIST_DIR}/0003-libmetal-nuttx-io.c-Fix-void-pointer-arithmetic-in-a.patch
|
||||
&& patch -p0 -d ${CMAKE_CURRENT_LIST_DIR} <
|
||||
${CMAKE_CURRENT_LIST_DIR}/0004-libmetal-atomic-enable-64-bit-atomic-by-toolchain-bu.patch
|
||||
DOWNLOAD_NO_PROGRESS true
|
||||
TIMEOUT 30)
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ libmetal.zip:
|
|||
$(Q) patch -p0 < 0001-libmetal-add-metal_list_for_each_safe-support.patch
|
||||
$(Q) patch -p0 < 0002-libmetal-nuttx-io.c-align-access-when-read-write-siz.patch
|
||||
$(Q) patch -p0 < 0003-libmetal-nuttx-io.c-Fix-void-pointer-arithmetic-in-a.patch
|
||||
$(Q) patch -p0 < 0004-libmetal-atomic-enable-64-bit-atomic-by-toolchain-bu.patch
|
||||
|
||||
.libmetal_headers: libmetal.zip
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue