| 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 | 
 |  |