Replace the legacy __sync built-in functions with __atomic ones
authorAndroid Tools Maintainers <android-tools-devel@lists.alioth.debian.org>
Tue, 22 Mar 2022 22:50:07 +0000 (22:50 +0000)
committerPeter Michael Green <plugwash@raspbian.org>
Tue, 22 Mar 2022 22:50:07 +0000 (22:50 +0000)
Last-Update: 2016-10-04
Forwarded: not-needed

libunwind uses the built-in __sync_* functions which are deprecated by GCC and
should be replaced by __atomic_* ones. See the official manuals [1].

The legacy __sync functions do not require to specify the memory order but
__atomic ones do, so we choose the strongest one: __ATOMIC_SEQ_CST.

We do this because __sync_fetch_and_add() is not supported on armel.

[1]: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html

Gbp-Pq: Topic external/libunwind
Gbp-Pq: Name legacy_built-in_sync_functions.patch

external/libunwind/include/libunwind_i.h

index 1eb7b80305279321657ed26efcca70c536aa6769..c06912a65768b3f221615f74149756c19b657625 100644 (file)
@@ -155,8 +155,8 @@ cmpxchg_ptr (void *addr, void *old, void *new)
   u.vp = addr;
   return __sync_bool_compare_and_swap(u.vlp, (long) old, (long) new);
 }
-# define fetch_and_add1(_ptr)          __sync_fetch_and_add(_ptr, 1)
-# define fetch_and_add(_ptr, value)    __sync_fetch_and_add(_ptr, value)
+# define fetch_and_add1(_ptr) __atomic_fetch_add(_ptr, 1, __ATOMIC_SEQ_CST)
+# define fetch_and_add(_ptr, value) __atomic_fetch_add(_ptr, value, __ATOMIC_SEQ_CST)
 # define HAVE_CMPXCHG
 # define HAVE_FETCH_AND_ADD
 #endif