Commit a0554fd8 authored by Vicențiu Ciorbaru's avatar Vicențiu Ciorbaru Committed by Otto Kekäläinen
Browse files

Refresh c11_atomics patch for 10.3

parent 572d4c6b
From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org> Author: Vicențiu Ciorbaru <vicentiu@mariadb.org>
Date: Thu, 10 Aug 2017 20:40:29 +0200 Date: Thu Dec 20 10:00:10 2018 +0200
Subject: c11_atomics
--- Link with libatomic to enable C11 atomics support
configure.cmake | 23 +++++++++++++++++++++--
include/atomic/gcc_builtins.h | 15 +++++++++++++++ Some architectures (mips) require libatomic to support proper
include/atomic/nolock.h | 4 ++-- atomic operations. Check first if support is available without
mysys/CMakeLists.txt | 4 ++++ linking, otherwise use the library.
sql/CMakeLists.txt | 4 ++++
5 files changed, 46 insertions(+), 4 deletions(-)
--- a/configure.cmake --- a/configure.cmake
+++ b/configure.cmake +++ b/configure.cmake
@@ -128,7 +128,7 @@ IF(UNIX) @@ -926,7 +926,25 @@ int main()
ENDIF()
FIND_PACKAGE(Threads)
- SET(CMAKE_REQUIRED_LIBRARIES
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES
${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${LIBEXECINFO})
# Need explicit pthread for gcc -fsanitize=address
IF(CMAKE_USE_PTHREADS_INIT AND CMAKE_C_FLAGS MATCHES "-fsanitize=")
@@ -1038,7 +1038,26 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
long long int *ptr= &var; long long int *ptr= &var;
return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST); return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
}" }"
- HAVE_GCC_C11_ATOMICS) -HAVE_GCC_C11_ATOMICS)
+ HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) +HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
+ IF(HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC) +IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
+ SET(HAVE_GCC_C11_ATOMICS True) + SET(HAVE_GCC_C11_ATOMICS True)
+ ELSE() +ELSE()
+ SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") + LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+ CHECK_CXX_SOURCE_COMPILES(" + CHECK_CXX_SOURCE_COMPILES("
...@@ -42,87 +30,22 @@ Subject: c11_atomics ...@@ -42,87 +30,22 @@ Subject: c11_atomics
+ HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) + HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) + IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ SET(HAVE_GCC_C11_ATOMICS True) + SET(HAVE_GCC_C11_ATOMICS True)
+ ELSE()
+ SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
+ ENDIF()
+ ENDIF() + ENDIF()
ELSE() + SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
ENDIF()
--- a/include/atomic/gcc_builtins.h
+++ b/include/atomic/gcc_builtins.h
@@ -16,6 +16,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+#if defined (HAVE_GCC_ATOMIC_BUILTINS)
#define make_atomic_add_body(S) \
v= __sync_fetch_and_add(a, v);
#define make_atomic_fas_body(S) \
@@ -26,6 +27,20 @@
sav= __sync_val_compare_and_swap(a, cmp_val, set);\
if (!(ret= (sav == cmp_val))) *cmp= sav
+#elif defined(HAVE_GCC_C11_ATOMICS)
+
+#define make_atomic_add_body(S) \
+ v= __atomic_fetch_add(a, v, __ATOMIC_SEQ_CST)
+#define make_atomic_fas_body(S) \
+ v= __atomic_exchange_n(a, v, __ATOMIC_SEQ_CST)
+#define make_atomic_cas_body(S) \
+ int ## S sav; \
+ ret= __atomic_compare_exchange_n(a, cmp, set, \
+ 0, \
+ __ATOMIC_SEQ_CST,\
+ __ATOMIC_SEQ_CST);
+#endif
+
#ifdef MY_ATOMIC_MODE_DUMMY
#define make_atomic_load_body(S) ret= *a
#define make_atomic_store_body(S) *a= v
--- a/include/atomic/nolock.h
+++ b/include/atomic/nolock.h
@@ -17,7 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#if defined(__i386__) || defined(_MSC_VER) || defined(__x86_64__) \
- || defined(HAVE_GCC_ATOMIC_BUILTINS) \
+ || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS) \
|| defined(HAVE_SOLARIS_ATOMIC)
# ifdef MY_ATOMIC_MODE_DUMMY
@@ -41,7 +41,7 @@
# elif __GNUC__
# if defined(HAVE_SOLARIS_ATOMIC)
# include "solaris.h"
-# elif defined(HAVE_GCC_ATOMIC_BUILTINS)
+# elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS)
# include "gcc_builtins.h"
# elif defined(__i386__) || defined(__x86_64__)
# include "x86-gcc.h"
--- a/mysys/CMakeLists.txt
+++ b/mysys/CMakeLists.txt
@@ -79,6 +79,10 @@ IF(HAVE_BFD_H)
TARGET_LINK_LIBRARIES(mysys bfd)
ENDIF(HAVE_BFD_H)
+IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ TARGET_LINK_LIBRARIES(mysys atomic)
+ENDIF() +ENDIF()
+
IF (WIN32) IF(WITH_VALGRIND)
TARGET_LINK_LIBRARIES(mysys IPHLPAPI) SET(HAVE_valgrind 1)
ENDIF(WIN32)
--- a/sql/CMakeLists.txt --- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt
@@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI @@ -178,6 +178,10 @@ ELSE()
${SSL_LIBRARIES} SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL})
${LIBSYSTEMD}) ENDIF()
+IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC) +IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
+ TARGET_LINK_LIBRARIES(sql atomic) + TARGET_LINK_LIBRARIES(sql atomic)
+ENDIF() +ENDIF()
+ +
IF(WIN32)
SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc) IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
TARGET_LINK_LIBRARIES(sql psapi)
...@@ -7,7 +7,7 @@ mips-groonga-atomic.patch ...@@ -7,7 +7,7 @@ mips-groonga-atomic.patch
mips-connect-unaligned.patch mips-connect-unaligned.patch
mips-machine.patch mips-machine.patch
#armhf_mroonga_storage_fail.patch #armhf_mroonga_storage_fail.patch
#c11_atomics.patch c11_atomics.patch
kFreeBSD-gettid.patch kFreeBSD-gettid.patch
#mips-innobase-atomic.patch #mips-innobase-atomic.patch
mytop-merge_src:mytop_improvements.patch mytop-merge_src:mytop_improvements.patch
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment