Ivan Maidanski [Tue, 5 Dec 2017 09:03:51 +0000 (12:03 +0300)]
Use built-in atomics for load/store/CAS for Clang by default (Aarch64)
* src/atomic_ops/sysdeps/gcc/aarch64.h [!AO_PREFER_BUILTIN_ATOMICS]
(AO_double_load, AO_double_load_acquire, AO_double_store,
AO_double_store_release, AO_double_compare_and_swap,
AO_double_compare_and_swap_acquire, AO_double_compare_and_swap_release,
AO_double_compare_and_swap_full): Do not define (using asm) if
AO_THREAD_SANITIZER or if Clang (unless AO_AARCH64_ASM_LOAD_STORE_CAS).
Ivan Maidanski [Tue, 5 Dec 2017 08:27:47 +0000 (11:27 +0300)]
Do not disallow to define double_load using built-in atomics (Aarch64)
(fix commit 03a0465)
Clang 3.8 (and later) and GCC have the correct implementation of
double-word atomic load (containing STXP instruction) for Aarch64.
* src/atomic_ops/sysdeps/gcc/aarch64.h [AO_PREFER_BUILTIN_ATOMICS]
(AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire): Do not
define for GCC and if AO_CLANG_PREREQ(3, 8).
Ivan Maidanski [Tue, 5 Dec 2017 07:41:39 +0000 (10:41 +0300)]
Do not define AO_GCC_FORCE_HAVE_CAS for Clang 3.8+ (Aarch64)
(fix commit 83fca68)
Clang now defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n macros (so,
the workaround is not needed anymore).
* src/atomic_ops/sysdeps/gcc/aarch64.h (AO_GCC_FORCE_HAVE_CAS,
AO_GCC_HAVE_double_SYNC_CAS): Do not define if AO_CLANG_PREREQ(3, 8)
(unless __APPLE_CC__).
Ivan Maidanski [Tue, 28 Nov 2017 19:11:15 +0000 (22:11 +0300)]
Define AO_TS_SET to true (1) if GCC atomic_test_and_set is used
(fix commit 3315a03)
According to GCC manual about the built-in functions for memory model
aware atomic operations, __atomic_test_and_set returns bool value;
bool true is encoded as 1.
* src/atomic_ops/sysdeps/test_and_set_t_is_char.h [AO_PREFER_GENERALIZED
|| !__GCC_ATOMIC_TEST_AND_SET_TRUEVAL] (AO_TS_SET_TRUEVAL): Define to 1
(instead of 0xff).
Ivan Maidanski [Tue, 28 Nov 2017 08:06:36 +0000 (11:06 +0300)]
Eliminate data race in cons() of test_malloc
(fix commit c058d9d)
The data race has not affected the functionality of the test but this
commit allows to avoid no_sanitize attribute for the function.
* tests/test_malloc.c (cons): Remove AO_ATTR_NO_SANITIZE_THREAD
attribute; Do not reset extra (use "%" operator to get my_extra value).
* tests/test_malloc.c [AO_HAVE_fetch_and_add1] (cons): Change type of
extra to AO_t, add volatile qualifier; use AO_fetch_and_add1 instead of
"++" operator to update extra.
* src/atomic_ops/sysdeps/gcc/x86.h [!AO_USE_SYNC_CAS_BUILTIN]
(AO_char_fetch_compare_and_swap_full): Replace "r"(new_val) to
"q"(new_val) in __asm__("cmpxchgb").
Ivan Maidanski [Mon, 24 Jul 2017 09:56:47 +0000 (12:56 +0300)]
Workaround 'unused result' code defects in list_atomic.template
* tests/list_atomic.template: Include stdlib.h (needed for exit()
prototype).
* tests/list_atomic.template [AO_HAVE_XSIZE_loadXX]
(XSIZE_list_atomicXX): Cast AO_XSIZE_loadXX() result to void.
* tests/list_atomic.template [AO_HAVE_XSIZE_fetch_and_addXX]: Cast
AO_XSIZE_fetch_and_addXX() result to void.
* tests/list_atomic.template [AO_HAVE_XSIZE_fetch_and_add1XX]
(XSIZE_list_atomicXX): Cast AO_XSIZE_fetch_and_add1XX() result to void.
* tests/list_atomic.template [AO_HAVE_XSIZE_fetch_and_sub1XX]
(XSIZE_list_atomicXX): Cast AO_XSIZE_fetch_and_sub1XX() result to void.
* tests/list_atomic.template [AO_HAVE_test_and_setXX]
(XSIZE_list_atomicXX): Cast AO_test_and_setXX() result to void.
* tests/list_atomic.template [AO_HAVE_XSIZE_compare_and_swapXX]
(XSIZE_list_atomicXX): Call exit(1) if AO_XSIZE_compare_and_swapXX
failed.
* tests/list_atomic.template [AO_HAVE_XSIZE_fetch_compare_and_swapXX]
(XSIZE_list_atomicXX): Call exit(1) if AO_XSIZE_fetch_compare_and_swapXX
failed.
Ivan Maidanski [Thu, 15 Jun 2017 22:14:13 +0000 (01:14 +0300)]
Add bdwgc mailing list online archive link to README
* README.md (Feedback, Contribution, Questions and Notifications):
Update information about accessing the mailing list archive (add link
to that at Narkive site).
Ivan Maidanski [Fri, 2 Jun 2017 04:44:15 +0000 (07:44 +0300)]
Update README about bugs reporting and new releases notification
* README.md (Download): Move (and update) information about bug reporting
to another section.
* README.md (Feedback, Contribution, Questions and Notifications): New
section.
* configure.ac (AC_INIT): Change URI for reporting bugs.
Ivan Maidanski [Thu, 11 May 2017 08:21:01 +0000 (11:21 +0300)]
Eliminate 'value shift followed by expansion' false code defect warning
* src/atomic_ops.c [AO_USE_NANOSLEEP] (AO_pause): Use "L" suffix for
shifted immediate value (1) to match the type of ts.tv_nsec.
* src/atomic_ops.c [!AO_USE_NANOSLEEP && AO_USE_WIN32_PTHREADS]
(AO_pause): Cast shifted immediate value (1) to DWORD to match Sleep
argument type.
* src/atomic_ops.c [!AO_USE_NANOSLEEP && !AO_USE_WIN32_PTHREADS]
(AO_pause): Store computed usec value to an intermediate int variable
(before storing it to tv.tv_usec) so that to avoid widening conversion
of shifted immediate int value (1); add comment.
Ivan Maidanski [Fri, 21 Apr 2017 07:10:58 +0000 (10:10 +0300)]
Workaround 'resource leak' false positives in AO_malloc, add_elements
* src/atomic_ops_stack.c [AO_HAVE_compare_double_and_swap_double
&& LINT2] (AO_noop_sink): New global volatile variable.
* src/atomic_ops_stack.c [AO_HAVE_compare_double_and_swap_double
&& LINT2] (AO_stack_push_release): Store element value to AO_noop_sink;
add comment.
* tests/test_atomic_include.template [AO_HAVE_storeXX && LINT2
&& AO_PREFER_GENERALIZED] (test_atomicXX): Initialize x local variable
(before AO_storeXX which can be defined using CAS); update comment.
* tests/test_atomic_include.template [AO_HAVE_short_storeXX && LINT2
&& AO_PREFER_GENERALIZED] (test_atomicXX): Initialize s local variable.
* tests/test_atomic_include.template [AO_HAVE_char_storeXX && LINT2
&& AO_PREFER_GENERALIZED] (test_atomicXX): Initialize b local variable.
* tests/test_atomic_include.template [AO_HAVE_int_storeXX && LINT2
&& AO_PREFER_GENERALIZED] (test_atomicXX): Initialize zz local variable.
* src/atomic_ops_stack.c [AO_USE_ALMOST_LOCK_FREE]
(AO_stack_pop_explicit_aux_acquire): Replace AO_load to AO_load_acquire
when loaded value is compared to first; add comment.
Ivan Maidanski [Sat, 15 Apr 2017 06:56:36 +0000 (09:56 +0300)]
Use CLANG/GNUC_PREREQ macros in gcc/powerpc.h
* src/atomic_ops/sysdeps/gcc/powerpc.h: Use AO_GNUC_PREREQ() instead
of direct use of __GNUC[_MINOR]__; use AO_CLANG_PREREQ() instead of
direct use __clang_major__ and __clang_minor__.
Ivan Maidanski [Fri, 5 Aug 2016 19:03:12 +0000 (22:03 +0300)]
Use GCC atomic intrinsics for PowerPC 32/64 (GCC 4.8+ and clang 3.8+)
(Cherry-pick commit 8e62b6f from 'ppc-gcc-atomics' branch.)
* src/atomic_ops/sysdeps/gcc/powerpc.h: Include generic.h and do not
include all_aligned_atomic_load_store.h, test_and_set_t_is_ao_t.h if
GCC 4.8+ or clang 3.8+ unless AO_DISABLE_GCC_ATOMICS.
* src/atomic_ops/sysdeps/gcc/powerpc.h (AO_nop_full, AO_lwsync,
AO_nop_write, AO_nop_read, AO_load_acquire, AO_store_release,
AO_test_and_set, AO_test_and_set_release, AO_test_and_set_full,
AO_compare_and_swap, AO_compare_and_swap_acquire,
AO_compare_and_swap_release, AO_compare_and_swap_full,
AO_fetch_compare_and_swap, AO_fetch_compare_and_swap_acquire,
AO_fetch_compare_and_swap_release, AO_fetch_compare_and_swap_full,
AO_fetch_and_add, AO_fetch_and_add_acquire, AO_fetch_and_add_release,
AO_fetch_and_add_full, AO_T_IS_INT): Do not define if generic.h is
included.