platform/upstream/libatomic_ops.git
7 years agoWorkaround 'resource leak' false positives in AO_malloc, add_elements
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.

7 years agoWorkaround 'uninitialized memory use' code analyzer false warning (tests)
Ivan Maidanski [Wed, 19 Apr 2017 21:44:43 +0000 (00:44 +0300)]
Workaround 'uninitialized memory use' code analyzer false warning (tests)

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

7 years agoTravis CI: Test also by Coverity Scan
Ivan Maidanski [Wed, 19 Apr 2017 20:40:44 +0000 (23:40 +0300)]
Travis CI: Test also by Coverity Scan

7 years agoAdd Coverity Scan (static code analysis status) badge to README
Ivan Maidanski [Wed, 19 Apr 2017 20:32:11 +0000 (23:32 +0300)]
Add Coverity Scan (static code analysis status) badge to README

7 years agoWorkaround test_stack failure on AIX/ppc
Fabrizio Fabbri [Fri, 7 Apr 2017 13:56:04 +0000 (09:56 -0400)]
Workaround test_stack failure on AIX/ppc

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

7 years agoUse CLANG/GNUC_PREREQ macros in gcc/powerpc.h
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__.

7 years agoUse GCC atomic intrinsics for PowerPC 32/64 (GCC 4.8+ and clang 3.8+)
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.

7 years agoUpdate ChangeLog file
Ivan Maidanski [Tue, 4 Apr 2017 20:03:59 +0000 (23:03 +0300)]
Update ChangeLog file

7 years agoUpdate ChangeLog file (v7.2 - v7.4 changes only)
Ivan Maidanski [Tue, 4 Apr 2017 08:35:50 +0000 (11:35 +0300)]
Update ChangeLog file (v7.2 - v7.4 changes only)

7 years agoChangeLog: remove trailing dots
Ivan Maidanski [Tue, 4 Apr 2017 08:18:14 +0000 (11:18 +0300)]
ChangeLog: remove trailing dots

7 years agoTravis CI: Test also with mingw-w64 cross-compiler
Ivan Maidanski [Mon, 3 Apr 2017 06:04:11 +0000 (09:04 +0300)]
Travis CI: Test also with mingw-w64 cross-compiler

7 years agoTravis CI: Set MAKEFILE_TARGET in 'matrix:include'
Ivan Maidanski [Mon, 3 Apr 2017 05:56:42 +0000 (08:56 +0300)]
Travis CI: Set MAKEFILE_TARGET in 'matrix:include'
(refactor commit 859f874a)

7 years agoTravis CI: Replace multiple CONF_x with a single CONF_OPTIONS variable
Ivan Maidanski [Tue, 28 Mar 2017 08:19:57 +0000 (11:19 +0300)]
Travis CI: Replace multiple CONF_x with a single CONF_OPTIONS variable
(code refactoring)

7 years agoRevert 'Fix store-load ordering in AO_stack_pop_explicit_aux_acquire'
Ivan Maidanski [Mon, 27 Mar 2017 07:17:28 +0000 (10:17 +0300)]
Revert 'Fix store-load ordering in AO_stack_pop_explicit_aux_acquire'

This reverts commit 85dd735949d712fa5db4bde0f0fc74f15a624222.

As reported in issue #15, adding AO_nop_full to
AO_stack_pop_explicit_aux_acquire does not solve test_stack failure
on Power7.

7 years agoTravis CI: Run cppcheck once per build configuration
Ivan Maidanski [Fri, 24 Mar 2017 16:20:12 +0000 (19:20 +0300)]
Travis CI: Run cppcheck once per build configuration
(refactoring of commit ff3885c)

7 years agoTravis CI: Move optional -D arguments of CSA to CFLAGS_EXTRA
Ivan Maidanski [Fri, 24 Mar 2017 16:02:18 +0000 (19:02 +0300)]
Travis CI: Move optional -D arguments of CSA to CFLAGS_EXTRA
(refactoring of commit 4393a96)

7 years agoTravis CI: Use inline format for some 'env' attributes
Ivan Maidanski [Fri, 24 Mar 2017 15:46:06 +0000 (18:46 +0300)]
Travis CI: Use inline format for some 'env' attributes

7 years agoTravis CI: Test also Intel x32 builds (Linux)
Ivan Maidanski [Thu, 23 Mar 2017 18:08:18 +0000 (21:08 +0300)]
Travis CI: Test also Intel x32 builds (Linux)

7 years agoTravis CI: Test also 32-bit, 64-bit builds with clang-4.0, gcc-5 (Linux)
Ivan Maidanski [Thu, 23 Mar 2017 18:02:46 +0000 (21:02 +0300)]
Travis CI: Test also 32-bit, 64-bit builds with clang-4.0, gcc-5 (Linux)

7 years agoTravis CI: Use inline format for 'packages' and 'sources'
Ivan Maidanski [Thu, 23 Mar 2017 17:57:48 +0000 (20:57 +0300)]
Travis CI: Use inline format for 'packages' and 'sources'
(refactoring of commit 6098194)

7 years agoTravis CI: Test also with -D _FORTIFY_SOURCE, -std=c11, -std=c89
Ivan Maidanski [Thu, 23 Mar 2017 07:37:59 +0000 (10:37 +0300)]
Travis CI: Test also with -D _FORTIFY_SOURCE, -std=c11, -std=c89

7 years agoTravis CI: Use -march=native for MSan/UBSan, musl-gcc, no atomic-intrinsics
Ivan Maidanski [Thu, 23 Mar 2017 07:29:45 +0000 (10:29 +0300)]
Travis CI: Use -march=native for MSan/UBSan, musl-gcc, no atomic-intrinsics

7 years agoTravis CI: Use CSA v4.0 (clang-4.0)
Ivan Maidanski [Thu, 23 Mar 2017 07:27:16 +0000 (10:27 +0300)]
Travis CI: Use CSA v4.0 (clang-4.0)

7 years agoTravis CI: Use inline format of 'addons' and 'env'
Ivan Maidanski [Thu, 23 Mar 2017 07:23:10 +0000 (10:23 +0300)]
Travis CI: Use inline format of 'addons' and 'env'
(code refactoring of commits d808080, 0f3f282)

7 years agoEliminate 'implicit declaration of close' warning in 'strict ANSI' mode
Ivan Maidanski [Thu, 23 Mar 2017 06:52:55 +0000 (09:52 +0300)]
Eliminate 'implicit declaration of close' warning in 'strict ANSI' mode

* src/atomic_ops_malloc.c [HAVE_MMAP && !USE_MMAP_ANON]: Include
unistd.h (to declare "close" function).

7 years agoFix block_all_signals compilation in 'strict ANSI' mode
Ivan Maidanski [Thu, 23 Mar 2017 06:41:37 +0000 (09:41 +0300)]
Fix block_all_signals compilation in 'strict ANSI' mode

* src/atomic_ops.c [(__linux__ || __GLIBC__ || __GNU__)
&& !AO_USE_NO_SIGNALS] (_GNU_SOURCE): Define (before including system
headers).

7 years agoTravis CI: Also test with musl-gcc (Linux)
Ivan Maidanski [Tue, 21 Mar 2017 09:01:26 +0000 (12:01 +0300)]
Travis CI: Also test with musl-gcc (Linux)

7 years agoTravis CI: Do not specify compiler for OS X builds
Ivan Maidanski [Mon, 20 Mar 2017 22:43:09 +0000 (01:43 +0300)]
Travis CI: Do not specify compiler for OS X builds

7 years agoTravis CI: Run CSA in a standalone test configuration
Ivan Maidanski [Mon, 20 Mar 2017 22:29:34 +0000 (01:29 +0300)]
Travis CI: Run CSA in a standalone test configuration

7 years agoTravis CI: Specify test configurations using 'matrix:include'
Ivan Maidanski [Mon, 20 Mar 2017 22:22:20 +0000 (01:22 +0300)]
Travis CI: Specify test configurations using 'matrix:include'
(code refactoring)

Also, require "sudo" only where needed.

7 years agoFix AO_SIZE_MAX definition (Linux/musl-gcc)
Ivan Maidanski [Wed, 15 Mar 2017 08:27:48 +0000 (11:27 +0300)]
Fix AO_SIZE_MAX definition (Linux/musl-gcc)
(fix commit b1365bd)

* src/atomic_ops_malloc.c [SIZE_MAX && !CPPCHECK] (AO_SIZE_MAX): Cast
SIZE_MAX to size_t explicitly (to workaround incorrect definition
of SIZE_MAX - e.g. it is defined as ~0ULL in musl-tools which is not
correct for a 32-bit target).

7 years agoRefine configure messages when checking for compiler options
Ivan Maidanski [Wed, 15 Mar 2017 08:22:26 +0000 (11:22 +0300)]
Refine configure messages when checking for compiler options

* configure.ac (AC_MSG_CHECKING, AC_MSG_RESULT): Refine message when
checking for a compiler option support (replace "gcc" with "compiler"),
and when reporting PIC option required; put string in [].
* configure.ac (AC_MSG_RESULT): Do not put string in quotes.

7 years agoTravis CI: Put a space after '-D', '-U' for cppcheck, clang, gcc
Ivan Maidanski [Fri, 10 Mar 2017 08:22:09 +0000 (11:22 +0300)]
Travis CI: Put a space after '-D', '-U' for cppcheck, clang, gcc
(refactoring of commits 4393a96, 797e428, ff3885c, 76825c7, 106bab9)

7 years agoWorkaround 'obsolescent ftime called' cppcheck style warning (POSIX)
Ivan Maidanski [Thu, 9 Mar 2017 04:53:32 +0000 (07:53 +0300)]
Workaround 'obsolescent ftime called' cppcheck style warning (POSIX)

* tests/test_stack.c [!NO_TIMES && (USE_WINTHREADS
|| AO_USE_WIN32_PTHREADS)] (get_msecs): Use gettimeofday-based
implementation if CPPCHECK.

7 years agoWorkaround 'shifting 32-bit value by 32 bits undefined' cppcheck warning
Ivan Maidanski [Thu, 9 Mar 2017 04:30:35 +0000 (07:30 +0300)]
Workaround 'shifting 32-bit value by 32 bits undefined' cppcheck warning

* src/atomic_ops_malloc.c [__SIZEOF_SIZE_T__==8] (msb): Ignore by
CPPCHECK.

7 years agoDefine CLANG/GNUC_PREREQ macros to check gcc/clang minimum version
Ivan Maidanski [Mon, 6 Mar 2017 04:32:19 +0000 (07:32 +0300)]
Define CLANG/GNUC_PREREQ macros to check gcc/clang minimum version
(code refactoring)

* src/atomic_ops.h (AO_GNUC_PREREQ, AO_CLANG_PREREQ): New internal
macro.
* src/atomic_ops.h (AO_EXPECT_FALSE): Use AO_GNUC_PREREQ() instead of
direct use of __GNUC[_MINOR]__.
* src/atomic_ops.h [__x86_64__] (AO_USE_SYNC_CAS_BUILTIN): Likewise.
* src/atomic_ops/sysdeps/gcc/arm.h (AO_GCC_ATOMIC_TEST_AND_SET):
Likewise.
* src/atomic_ops/sysdeps/gcc/mips.h: Likewise.
* src/atomic_ops/sysdeps/gcc/tile.h: Likewise.
* src/atomic_ops/sysdeps/gcc/x86.h (AO_GCC_ATOMIC_TEST_AND_SET):
Likewise.
* src/atomic_ops/sysdeps/standard_ao_double_t.h (pragma GCC,
double_ptr_storage): Likewise.
* src/atomic_ops.h [!AO_ATTR_NO_SANITIZE_MEMORY]
(AO_ATTR_NO_SANITIZE_MEMORY): Use AO_CLANG_PREREQ() instead of direct
use __clang_major__ and __clang_minor__.
* src/atomic_ops/sysdeps/gcc/arm.h (AO_GCC_ATOMIC_TEST_AND_SET,
AO_ARM_HAVE_LDREXD): Likewise.
* src/atomic_ops/sysdeps/gcc/mips.h: Likewise.
* src/atomic_ops/sysdeps/gcc/tile.h: Likewise.
* src/atomic_ops/sysdeps/gcc/x86.h (AO_GCC_ATOMIC_TEST_AND_SET,
AO_SKIPATOMIC_double_load): Likewise.
* src/atomic_ops/sysdeps/standard_ao_double_t.h (pragma GCC): Likewise.

7 years agoFix missing .exe for test filenames in Makefile (MinGW)
Ivan Maidanski [Wed, 1 Mar 2017 22:50:24 +0000 (01:50 +0300)]
Fix missing .exe for test filenames in Makefile (MinGW)
(fix commits ad82960, 13a17dd, ecd43ca)

* tests/Makefile.am (TESTS, check-without-test-driver): Add $(EXEEXT)
suffix to each item (test).
* tests/Makefile.am (TEST_OBJS): Reorder items (to match the that of
TESTS).
* tests/Makefile.am (check_PROGRAMS): Specify all items explicitly (so
that to have all items without the suffix as before this change).

7 years agoTravis CI: Test also with kernel.org gcc-4.2, gcc-4.6 cross-compilers
Ivan Maidanski [Mon, 27 Feb 2017 18:17:42 +0000 (21:17 +0300)]
Travis CI: Test also with  gcc-4.2, gcc-4.6 cross-compilers
(avr32, cris, sh4, tilegx)

7 years agoAllow alternate CC (CROSS_CC) for AC_TRY_COMPILE (configure)
Ivan Maidanski [Mon, 27 Feb 2017 17:58:28 +0000 (20:58 +0300)]
Allow alternate CC (CROSS_CC) for AC_TRY_COMPILE (configure)

* configure.ac [GCC && CROSS_CC] (CC): Assign to CROSS_CC temporarily
(for AC_TRY_COMPILE); restore original value after last AC_TRY_COMPILE.

7 years agoTravis CI: Test also with other kernel.org gcc-4.9 cross-compilers
Ivan Maidanski [Wed, 22 Feb 2017 21:44:46 +0000 (00:44 +0300)]
Travis CI: Test also with other  gcc-4.9 cross-compilers
(aarch64, alpha, hppa, ia64, m68k, mips[64], powerpc[64], s390x, sparc[64])

7 years agoTravis CI: Move CROSS_ prefix from NOLIBC_ARCH_ABI to GCC_VER variable
Ivan Maidanski [Wed, 22 Feb 2017 20:53:05 +0000 (23:53 +0300)]
Travis CI: Move CROSS_ prefix from NOLIBC_ARCH_ABI to GCC_VER variable
(code refactoring of commit a596be3)

7 years agoTravis CI: Reformat 'env' section (describe each configuration in a line)
Ivan Maidanski [Wed, 22 Feb 2017 15:37:50 +0000 (18:37 +0300)]
Travis CI: Reformat 'env' section (describe each configuration in a line)
(fix commits 641030c, ff3885c)

7 years agoTravis CI: Also test with ARM cross-compiler
Ivan Maidanski [Wed, 22 Feb 2017 06:55:09 +0000 (09:55 +0300)]
Travis CI: Also test with ARM cross-compiler

7 years agoTravis CI: Move cppcheck to parent (home) folder
Ivan Maidanski [Wed, 22 Feb 2017 06:45:48 +0000 (09:45 +0300)]
Travis CI: Move cppcheck to parent (home) folder
(fix commit ff3885c)

7 years agoFix 'Cannot implement CAS_full on this architecture' build error (cris)
Ivan Maidanski [Tue, 21 Feb 2017 21:05:11 +0000 (00:05 +0300)]
Fix 'Cannot implement CAS_full on this architecture' build error (cris)

* src/atomic_ops.h [__cris__ || CRIS] (AO_CAN_EMUL_CAS): Define.
* src/atomic_ops/sysdeps/gcc/cris.h: Add TODO to implement CAS.

7 years agoEliminate 'missing braces around initializer' gcc warning (hppa)
Ivan Maidanski [Tue, 21 Feb 2017 20:38:47 +0000 (23:38 +0300)]
Eliminate 'missing braces around initializer' gcc warning (hppa)

* src/atomic_ops/sysdeps/gcc/hppa.h (AO_TS_INITIALIZER): Add extra
outermost {} braces.

7 years agoUpdate shared libraries version info to differentiate against v7.4.x
Ivan Maidanski [Tue, 21 Feb 2017 08:43:42 +0000 (11:43 +0300)]
Update shared libraries version info to differentiate against v7.4.x

Version info "current" and "age" numbers are incremented, "revision"
number is reset to zero (indicating that programs using the previous
libraries version may use the new version as drop-in replacement).
Thus, version info is 2:0:1 now (both for libatomic_ops.so and
libatomic_ops_gpl.so).

* src/Makefile.am (LIBATOMIC_OPS_VER_INFO, LIBATOMIC_OPS_GPL_VER_INFO):
Change version info from 1:3:0 (used for libatomic_ops v7.4.x releases)
to 2:0:1.

7 years agoFix 'unknown attribute no_sanitize' compiler warning (clang prior to v3.8)
Ivan Maidanski [Mon, 20 Feb 2017 20:30:55 +0000 (23:30 +0300)]
Fix 'unknown attribute no_sanitize' compiler warning (clang prior to v3.8)

* src/atomic_ops.h [!AO_ATTR_NO_SANITIZE_MEMORY && AO_MEMORY_SANITIZER]
(AO_ATTR_NO_SANITIZE_MEMORY): Do not define to no_sanitize attribute
unless clang-3.8+ (or not clang).
* tests/test_atomic_include.template [AO_HAVE_storeXX
&& AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX):
Initialize x local variable (before AO_storeXX which can be defined
using CAS); add comment.
* tests/test_atomic_include.template [AO_HAVE_short_storeXX
&& AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX):
Initialize s local variable.
* tests/test_atomic_include.template [AO_HAVE_char_storeXX
&& AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX):
Initialize b local variable.
* tests/test_atomic_include.template [AO_HAVE_int_storeXX
&& AO_MEMORY_SANITIZER && AO_PREFER_GENERALIZED] (test_atomicXX):
Initialize zz local variable.

7 years agoEliminate 'condition sizeof(long)>4 is always true' cppcheck style warning
Ivan Maidanski [Mon, 20 Feb 2017 19:16:54 +0000 (22:16 +0300)]
Eliminate 'condition sizeof(long)>4 is always true' cppcheck style warning

* src/atomic_ops_malloc.c (msb): Cast (s >> 32) to unsigned int type
before assigning the result to v; check __SIZEOF_SIZE_T__ value (if
defined) to decide whether (s >> 32) is needed; move condition
(sizeof(size_t) > 4) to SIZEOF_SIZE_T_GT_4 macro (to eliminate cppcheck
false report that the condition is always true).

7 years agoFix typo in comments in gcc/arm.h
Ivan Maidanski [Mon, 20 Feb 2017 08:19:54 +0000 (11:19 +0300)]
Fix typo in comments in gcc/arm.h

* src/atomic_ops/sysdeps/gcc/arm.h [!AO_GENERALIZE_ASM_BOOL_CAS]
(AO_compare_and_swap): Fix typo ("succeeded") and add "then" in comment.
* src/atomic_ops/sysdeps/gcc/arm.h [AO_ARM_HAVE_LDREXD]
(AO_double_compare_and_swap): Likewise.

7 years agoWorkaround 'AM_EXTRA_RECURSIVE_TARGETS not found in library' autoconf error
Ivan Maidanski [Mon, 20 Feb 2017 08:10:07 +0000 (11:10 +0300)]
Workaround 'AM_EXTRA_RECURSIVE_TARGETS not found in library' autoconf error
(fix commit 3b7e732)

* Makefile.am (.PHONY): Add check-nolink, check-nolink-local targets.
* Makefile.am (check-nolink): New target (which invokes existing
check-nolink-local in this Makefile and in tests/Makefile).
* configure.ac (AM_EXTRA_RECURSIVE_TARGETS): Remove (this directive
is not supported by autoconf-1.12 and earlier).

7 years agoTravis CI: Run 'make check-without-test-driver' for build with MSan/UBsan
Ivan Maidanski [Sat, 18 Feb 2017 14:46:17 +0000 (17:46 +0300)]
Travis CI: Run 'make check-without-test-driver' for build with MSan/UBsan
(fix commit 8277cbf)

7 years agoTravis CI: Use 'make all' to generate list_atomic.c, test_atomic_include.h
Ivan Maidanski [Sat, 18 Feb 2017 14:35:28 +0000 (17:35 +0300)]
Travis CI: Use 'make all' to generate list_atomic.c, test_atomic_include.h
(fix commits 4393a96, ff3885c)

7 years agoTravis CI: Do not output config.h if CSA_CHECK or CPPCHECK
Ivan Maidanski [Sat, 18 Feb 2017 14:20:05 +0000 (17:20 +0300)]
Travis CI: Do not output config.h if CSA_CHECK or CPPCHECK
(fix commit e6249bb)

7 years agoAdd Makefile target to run all tests without test-driver
Ivan Maidanski [Sat, 18 Feb 2017 07:23:33 +0000 (10:23 +0300)]
Add Makefile target to run all tests without test-driver

This could be used to catch errors reported by MemorySanitizer
(the traditional "make check" shows the tests with MSan errors as
skipped, so it does not lead to a non-zero exit code of make itself).

* tests/Makefile.am (check-without-test-driver): New phony target (to
compile, link and execute all tests not using test-driver).

7 years agoAdd Makefile target (check-nolink) to compile all source without linking
Ivan Maidanski [Sat, 18 Feb 2017 06:21:58 +0000 (09:21 +0300)]
Add Makefile target (check-nolink) to compile all source without linking

Note: it is assumed --enable-shared is not passed to configure.

* Makefile.am (check-nolink-local): New Makefile phony target (just
redirects to "all").
* configure.ac: Define check-nolink by AM_EXTRA_RECURSIVE_TARGETS.
* tests/Makefile.am (TEST_OBJS): New variable (with a list of the test
.o files).
* tests/Makefile.am (check-nolink-local): New Makefile phony target
(forces all tests to be compiled but not linked).

7 years agoRefine documentation in Makefile.msft how to run all tests (MS VC)
Ivan Maidanski [Fri, 17 Feb 2017 20:48:23 +0000 (23:48 +0300)]
Refine documentation in Makefile.msft how to run all tests (MS VC)

* src/Makefile.msft: Refine comment about all tests execution
("make check" is redundant, it is enough to run only "make" to
auto-generate list_atomic.c and test_atomic_include.h).

7 years agoMove libraries version info to the beginning of Makefile.am
Ivan Maidanski [Fri, 17 Feb 2017 20:27:19 +0000 (23:27 +0300)]
Move libraries version info to the beginning of Makefile.am
(code refactoring)

* src/Makefile.am (LIBATOMIC_OPS_VER_INFO, LIBATOMIC_OPS_GPL_VER_INFO):
New variable; add comment about the version update rule.
* src/Makefile.am (libatomic_ops_la_LDFLAGS,
libatomic_ops_gpl_la_LDFLAGS): Use LIBATOMIC_OPS_[GPL_]VER_INFO
instead direct hard-coding of version info.

7 years agoTravis CI: Also test with Memory and Unexpected Behavior sanitizers
Ivan Maidanski [Fri, 17 Feb 2017 08:51:30 +0000 (11:51 +0300)]
Travis CI: Also test with Memory and Unexpected Behavior sanitizers

Note: Currently an error found by MSan/UBSan does not cause Travis build
to fail, the log should be examined manually for the absence of
"MemorySanitizer" and "runtime error" character sequences (the error
messages are shown in red).

7 years agoTravis CI: Fix indent of CFLAGS_EXTRA assignment if SANITIZE set
Ivan Maidanski [Thu, 16 Feb 2017 21:44:14 +0000 (00:44 +0300)]
Travis CI: Fix indent of CFLAGS_EXTRA assignment if SANITIZE set
(fix commit fc43ce4)

7 years agoTravis CI: Output config.h content
Ivan Maidanski [Thu, 16 Feb 2017 21:36:33 +0000 (00:36 +0300)]
Travis CI: Output config.h content

7 years agoTravis CI: Also test --disable-atomic-intrinsics
Ivan Maidanski [Thu, 16 Feb 2017 18:34:45 +0000 (21:34 +0300)]
Travis CI: Also test --disable-atomic-intrinsics

7 years agoTravis CI: Test also with AddressSanitizer (ASan)
Ivan Maidanski [Thu, 16 Feb 2017 07:16:30 +0000 (10:16 +0300)]
Travis CI: Test also with AddressSanitizer (ASan)

7 years agoWorkaround MSan warning about uninitialized data read by generalized store
Ivan Maidanski [Thu, 16 Feb 2017 06:43:25 +0000 (09:43 +0300)]
Workaround MSan warning about uninitialized data read by generalized store

* src/atomic_ops.h [__has_feature(memory_sanitizer)]
(AO_MEMORY_SANITIZER): Define.
* src/atomic_ops.h [AO_MEMORY_SANITIZER] (AO_ATTR_NO_SANITIZE_MEMORY):
Likewise.
* src/atomic_ops/generalize-small.h: Regenerate.
* src/atomic_ops/generalize-small.template
[AO_HAVE_XSIZE_compare_and_swap_write && !AO_HAVE_XSIZE_store_write]
(AO_XSIZE_store_write): Add AO_ATTR_NO_SANITIZE_MEMORY attribute.
* src/atomic_ops/generalize-small.template
[AO_HAVE_XSIZE_compare_and_swap && !AO_HAVE_XSIZE_store]
(AO_XSIZE_store): Likewise.
* src/atomic_ops/generalize-small.template
[AO_HAVE_XSIZE_compare_and_swap_release && !AO_HAVE_XSIZE_store_release]
(AO_XSIZE_store_release): Likewise.
* src/atomic_ops/generalize-small.template
[AO_HAVE_XSIZE_compare_and_swap_full && !AO_HAVE_XSIZE_store_full]
(AO_XSIZE_store_full): Likewise.

7 years ago.gitignore: Ignore *.sancov (generated by ASan)
Ivan Maidanski [Wed, 15 Feb 2017 21:41:00 +0000 (00:41 +0300)]
.gitignore: Ignore *.sancov (generated by ASan)

7 years agoTravis CI: Add source check by cppcheck
Ivan Maidanski [Mon, 13 Feb 2017 21:54:35 +0000 (00:54 +0300)]
Travis CI: Add source check by cppcheck

7 years agoTravis CI: Pass -D DEBUG_RUN_ONE_TEST to CFLAGS during test coverage check
Ivan Maidanski [Mon, 13 Feb 2017 21:39:50 +0000 (00:39 +0300)]
Travis CI: Pass -D DEBUG_RUN_ONE_TEST to CFLAGS during test coverage check

7 years agoTravis CI: Add source check by Clang Static Analyzer
Ivan Maidanski [Mon, 13 Feb 2017 21:34:07 +0000 (00:34 +0300)]
Travis CI: Add source check by Clang Static Analyzer

7 years agoTravis CI: Also test --enable-shared
Ivan Maidanski [Mon, 13 Feb 2017 21:26:19 +0000 (00:26 +0300)]
Travis CI: Also test --enable-shared

7 years agoUpdate ChangeLog file
Ivan Maidanski [Mon, 6 Feb 2017 15:17:39 +0000 (18:17 +0300)]
Update ChangeLog file

7 years agoUpdate ChangeLog file (v7.2 - v7.4 changes only)
Ivan Maidanski [Mon, 6 Feb 2017 14:49:02 +0000 (17:49 +0300)]
Update ChangeLog file (v7.2 - v7.4 changes only)

7 years agoTravis CI: Test the default config without assertions
Ivan Maidanski [Sat, 4 Feb 2017 06:58:06 +0000 (09:58 +0300)]
Travis CI: Test the default config without assertions

7 years agoTest store/CAS emulation explicitly
Ivan Maidanski [Fri, 3 Feb 2017 16:19:32 +0000 (19:19 +0300)]
Test store/CAS emulation explicitly

* tests/Makefile.am (test_atomic_generalized_CPPFLAGS): Add
-D AO_TEST_EMULATION.
* tests/test_atomic.c [(!_MSC_VER && !__MINGW32__ && !__BORLANDC__
|| AO_USE_NO_SIGNALS || AO_USE_WIN32_PTHREADS) && AO_TEST_EMULATION]
(AO_store_full_emulation, AO_fetch_compare_and_swap_emulation): Declare
prototype.
* tests/test_atomic.c [(!_MSC_VER && !__MINGW32__ && !__BORLANDC__
|| AO_USE_NO_SIGNALS || AO_USE_WIN32_PTHREADS) && AO_TEST_EMULATION
&& AO_HAVE_double_t] (AO_compare_double_and_swap_double_emulation):
Likewise.
* tests/test_atomic.c (test_atomic_emulation): New function (or a macro
defined to empty if AO_*_emulation primitives are unavailable).
* tests/test_atomic.c (main): Call test_atomic_emulation().

7 years agoFix 'undefined reference to __atomic_load/store_16' error (clang-3.4/x64)
Ivan Maidanski [Thu, 2 Feb 2017 15:31:53 +0000 (18:31 +0300)]
Fix 'undefined reference to __atomic_load/store_16' error (clang-3.4/x64)

* src/atomic_ops/sysdeps/gcc/x86.h [AO_GCC_ATOMIC_TEST_AND_SET
&& __x86_64__ && !__ILP32__ && __clang_major__==3 && __clang_minor__==4
&& !AO_PREFER_BUILTIN_ATOMICS]
(AO_SKIPATOMIC_double_compare_and_swap_ANY, AO_SKIPATOMIC_double_load,
AO_SKIPATOMIC_double_load_acquire, AO_SKIPATOMIC_double_store,
AO_SKIPATOMIC_double_store_release): Define; update comment.

7 years agoTravis CI: Remove -D AO_TRACE_MALLOC from CFLAGS as the log is too long
Ivan Maidanski [Wed, 1 Feb 2017 20:52:09 +0000 (23:52 +0300)]
Travis CI: Remove -D AO_TRACE_MALLOC from CFLAGS as the log is too long
(fix commit bb94b84)

7 years agoTravis CI: Refactoring (define CFLAGS_EXTRA_M, CONF_* variables)
Ivan Maidanski [Wed, 1 Feb 2017 20:19:37 +0000 (23:19 +0300)]
Travis CI: Refactoring (define CFLAGS_EXTRA_M, CONF_* variables)

7 years ago.gitignore: Ignore coverage.info (generated by lcov)
Ivan Maidanski [Tue, 31 Jan 2017 20:48:32 +0000 (23:48 +0300)]
.gitignore: Ignore coverage.info (generated by lcov)

7 years agoTravis CI: Use also 'tests' folder for coverage reporting
Ivan Maidanski [Tue, 31 Jan 2017 20:43:27 +0000 (23:43 +0300)]
Travis CI: Use also 'tests' folder for coverage reporting
(fix commit 88ee70d)

7 years agoAdd Coveralls (test coverage status) badge to README
Ivan Maidanski [Tue, 31 Jan 2017 20:07:14 +0000 (23:07 +0300)]
Add Coveralls (test coverage status) badge to README

7 years agoTravis CI: Fix output test_atomic*.log content
Ivan Maidanski [Tue, 31 Jan 2017 19:28:44 +0000 (22:28 +0300)]
Travis CI: Fix output test_atomic*.log content
(fix commit 8b287a7)

7 years agoTravis CI: Report test coverage for Linux/x64 (native CPU)
Ivan Maidanski [Tue, 31 Jan 2017 19:13:44 +0000 (22:13 +0300)]
Travis CI: Report test coverage for Linux/x64 (native CPU)

7 years agoTravis CI: Output test_atomic*.log content
Ivan Maidanski [Tue, 31 Jan 2017 18:46:57 +0000 (21:46 +0300)]
Travis CI: Output test_atomic*.log content

7 years agoFix a typo in comment belonging to double_ptr_storage
Ivan Maidanski [Tue, 31 Jan 2017 07:56:23 +0000 (10:56 +0300)]
Fix a typo in comment belonging to double_ptr_storage
(fix commit 7633154)

* src/atomic_ops/sysdeps/standard_ao_double_t.h [!__ILP32__ && !__clang__
&& (__x86_64__ && AO_GCC_ATOMIC_TEST_AND_SET || __aarch64__)]
(double_ptr_storage): Fix typo in comment ("pedantic").

7 years agoFix test_atomic fail caused by AO_double_t misaligned load (Linux/i686)
Ivan Maidanski [Tue, 31 Jan 2017 07:29:44 +0000 (10:29 +0300)]
Fix test_atomic fail caused by AO_double_t misaligned load (Linux/i686)

* src/atomic_ops/sysdeps/standard_ao_double_t.h [__i386__ && __GNUC__]
(double_ptr_storage): Add aligned(8) attribute (so that AO_double_t
global/static variables to have proper (double-word) alignment).

7 years agoTravis CI: Exclude osx/gcc builds
Ivan Maidanski [Fri, 27 Jan 2017 21:36:09 +0000 (00:36 +0300)]
Travis CI: Exclude osx/gcc builds
(gcc is an alias to clang on OS X)

7 years agoTravis CI: Fix CFLAGS_EXTRA value with 2 options
Ivan Maidanski [Fri, 27 Jan 2017 21:29:16 +0000 (00:29 +0300)]
Travis CI: Fix CFLAGS_EXTRA value with 2 options
(fix commit e294a77)

7 years agoTravis CI: compile both for x86 and x64
Ivan Maidanski [Fri, 27 Jan 2017 17:20:31 +0000 (20:20 +0300)]
Travis CI: compile both for x86 and x64

7 years agoUse generalized double-wide load/store if AO_PREFER_GENERALIZED (gcc/x86)
Ivan Maidanski [Fri, 27 Jan 2017 16:46:07 +0000 (19:46 +0300)]
Use generalized double-wide load/store if AO_PREFER_GENERALIZED (gcc/x86)

* src/atomic_ops/sysdeps/gcc/x86.h [!__x86_64__ || __ILP32__]: Do not
include double_atomic_load_store.h if AO_PREFER_GENERALIZED.

7 years agoUse generalized load/store if AO_PREFER_GENERALIZED (gcc/generic)
Ivan Maidanski [Fri, 27 Jan 2017 16:35:20 +0000 (19:35 +0300)]
Use generalized load/store if AO_PREFER_GENERALIZED (gcc/generic)

Note: AO_PREFER_GENERALIZED macro is for testing generalize.h mainly.

* src/atomic_ops/sysdeps/gcc/generic-small.template (AO_XSIZE_load,
AO_XSIZE_load_acquire, AO_XSIZE_store, AO_XSIZE_store_release): Do not
define if AO_GCC_HAVE_XSIZE_SYNC_CAS and AO_PREFER_GENERALIZED.
* src/atomic_ops/sysdeps/gcc/generic-small.h: Regenerate.
* src/atomic_ops/sysdeps/gcc/generic.h [AO_HAVE_DOUBLE_PTR_STORAGE]
(AO_GCC_HAVE_double_SYNC_CAS): Move the definition upper to be before
AO_double_load.
* src/atomic_ops/sysdeps/gcc/generic.h [AO_HAVE_DOUBLE_PTR_STORAGE]
(AO_double_load, AO_double_load_acquire, AO_double_store,
AO_double_store_release): Do not define if AO_GCC_HAVE_double_SYNC_CAS
and AO_PREFER_GENERALIZED.

7 years agoAppveyor CI: Test double-wide CAS in debug builds (x86/x64)
Ivan Maidanski [Fri, 27 Jan 2017 16:11:22 +0000 (19:11 +0300)]
Appveyor CI: Test double-wide CAS in debug builds (x86/x64)

7 years agoSupport CFLAGS_EXTRA to pass extra user-defined compiler flags (MS VC)
Ivan Maidanski [Fri, 27 Jan 2017 16:05:17 +0000 (19:05 +0300)]
Support CFLAGS_EXTRA to pass extra user-defined compiler flags (MS VC)

* src/Makefile.msft: Remove commented out variable assignments.
* src/Makefile.msft (CFLAGS_EXTRA): New variable (empty by default).
* src/Makefile.msft (CFLAGS): Append CFLAGS_EXTRA value.

7 years ago.gitignore: Ignore test_atomic_generalized
Ivan Maidanski [Fri, 27 Jan 2017 06:47:03 +0000 (09:47 +0300)]
.gitignore: Ignore test_atomic_generalized

7 years agoAdd test_atomic_generalized to Makefile and Makefile.msft
Ivan Maidanski [Fri, 27 Jan 2017 06:37:15 +0000 (09:37 +0300)]
Add test_atomic_generalized to Makefile and Makefile.msft

* src/Makefile.msft (test_atomic_generalized): New target (same as
test_atomic but with -D AO_PREFER_GENERALIZED).
* src/Makefile.msft (check): Add dependency on test_atomic_generalized;
run test_atomic_generalized.
* tests/Makefile.am (TESTS): Add test_atomic_generalized.
* tests/Makefile.am [HAVE_PTHREAD_H] (TEST): Add test_atomic_pthreads
instead of specifying all tests.
* tests/Makefile.am (test_atomic_generalized_SOURCES,
test_atomic_generalized_LDADD): Define (same as for test_atomic).
* tests/Makefile.am (test_atomic_generalized_CPPFLAGS): Define
specifying -D AO_PREFER_GENERALIZED.

7 years agoAppveyor CI: run test_malloc/stack
Ivan Maidanski [Thu, 26 Jan 2017 20:10:57 +0000 (23:10 +0300)]
Appveyor CI: run test_malloc/stack

7 years agoEnable limited testing in Makefile.msft without Cygwin
Ivan Maidanski [Thu, 26 Jan 2017 20:07:57 +0000 (23:07 +0300)]
Enable limited testing in Makefile.msft without Cygwin

New target "check-noautogen" is introduced in Makefile.msft to build and
run only test_malloc and test_stack (which do not need test code
auto-generation by sed).

* src/Makefile.msft: Refine comment about tests execution; add comment
about "check-noautogen" target.
* src/Makefile.msft (check): Add dependency on check-noautogen;
move test_malloc and test_stack to check-noautogen.
* src/Makefile.msft (check-noautogen): New target (executes test_malloc
and test_stack only).

7 years agoTravis CI: compile for host CPU (to test double-wide primitives)
Ivan Maidanski [Thu, 26 Jan 2017 07:43:08 +0000 (10:43 +0300)]
Travis CI: compile for host CPU (to test double-wide primitives)

7 years agoImplement AO_CLEAR using C11 atomic intrinsic (GCC)
Ivan Maidanski [Thu, 26 Jan 2017 07:38:21 +0000 (10:38 +0300)]
Implement AO_CLEAR using C11 atomic intrinsic (GCC)

* src/atomic_ops/sysdeps/gcc/generic.h [!AO_PREFER_GENERALIZED]
(AO_CLEAR): Implement using GCC built-in __atomic_clear (thus
overriding the default one based on AO_char_store_release).

7 years agoImplement compiler_barrier using C11 __atomic_signal_fence (GCC)
Hans Boehm [Thu, 26 Jan 2017 07:16:54 +0000 (10:16 +0300)]
Implement compiler_barrier using C11 __atomic_signal_fence (GCC)

Use __atomic_signal_fence(__ATOMIC_SEQ_CST) as AO_compiler_barrier.
That was the intended use of __atomic_signal_fence.  The only
standards-relevant context in which you can tell apart a compiler and
real fence is in the case if signal handlers.

* src/atomic_ops/sysdeps/gcc/generic.h (AO_compiler_barrier): Redefine
using GCC atomic intrinsic (__atomic_signal_fence).

7 years agoFix type of general AO_TS_INITIALIZER
Ivan Maidanski [Thu, 26 Jan 2017 06:46:57 +0000 (09:46 +0300)]
Fix type of general AO_TS_INITIALIZER

* src/atomic_ops.h (AO_TS_INITIALIZER): Change type from AO_t to
AO_TS_t; add outermost parentheses.

7 years agoFix test_atomic failure caused unaligned AO_double_t access on x86
Ivan Maidanski [Tue, 24 Jan 2017 19:46:57 +0000 (22:46 +0300)]
Fix test_atomic failure caused unaligned AO_double_t access on x86

The failure is caused by violation of an assertion that checks
AO_double_t variable is 8-byte aligned on x86.

* doc/README.txt (AO_double_t): Add note about required alignment.
* src/atomic_ops/sysdeps/standard_ao_double_t.h (AO_double_t): Add
comment about alignment.
* src/atomic_ops_stack.h (AO_stack_t): Likewise.
* tests/test_atomic_include.template (test_atomicXX): Define old_w, w
local variables as static (as otherwise, e.g., they could have 4-byte
alignment on x86); add comment.