Merge pull request #5851 from micmac1/mariadb
[feed/packages.git] / utils / mariadb / patches / 130-c11_atomics.patch
1 Description: Fix mips missing atomics primitives
2 On mips we don't have native support for 64bit atomic operations. Make use
3 of libatomic to emulate them.
4 Author: Vicențiu Ciorbaru <vicentiu@mariadb.org>
5
6 --- a/configure.cmake
7 +++ b/configure.cmake
8 @@ -128,7 +128,7 @@ IF(UNIX)
9 ENDIF()
10 FIND_PACKAGE(Threads)
11
12 - SET(CMAKE_REQUIRED_LIBRARIES
13 + LIST(APPEND CMAKE_REQUIRED_LIBRARIES
14 ${LIBM} ${LIBNSL} ${LIBBIND} ${LIBCRYPT} ${LIBSOCKET} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${LIBEXECINFO})
15 # Need explicit pthread for gcc -fsanitize=address
16 IF(CMAKE_USE_PTHREADS_INIT AND CMAKE_C_FLAGS MATCHES "-fsanitize=")
17 @@ -1038,7 +1038,26 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
18 long long int *ptr= &var;
19 return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
20 }"
21 - HAVE_GCC_C11_ATOMICS)
22 + HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
23 + IF(HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
24 + SET(HAVE_GCC_C11_ATOMICS True)
25 + ELSE()
26 + SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
27 + LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
28 + CHECK_CXX_SOURCE_COMPILES("
29 + int main()
30 + {
31 + long long int var= 1;
32 + long long int *ptr= &var;
33 + return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
34 + }"
35 + HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
36 + IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
37 + SET(HAVE_GCC_C11_ATOMICS True)
38 + ELSE()
39 + SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
40 + ENDIF()
41 + ENDIF()
42 ELSE()
43 MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
44 ENDIF()
45 --- a/include/atomic/gcc_builtins.h
46 +++ b/include/atomic/gcc_builtins.h
47 @@ -16,6 +16,7 @@
48 along with this program; if not, write to the Free Software
49 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
50
51 +#if defined (HAVE_GCC_ATOMIC_BUILTINS)
52 #define make_atomic_add_body(S) \
53 v= __sync_fetch_and_add(a, v);
54 #define make_atomic_fas_body(S) \
55 @@ -26,6 +27,20 @@
56 sav= __sync_val_compare_and_swap(a, cmp_val, set);\
57 if (!(ret= (sav == cmp_val))) *cmp= sav
58
59 +#elif defined(HAVE_GCC_C11_ATOMICS)
60 +
61 +#define make_atomic_add_body(S) \
62 + v= __atomic_fetch_add(a, v, __ATOMIC_SEQ_CST)
63 +#define make_atomic_fas_body(S) \
64 + v= __atomic_exchange_n(a, v, __ATOMIC_SEQ_CST)
65 +#define make_atomic_cas_body(S) \
66 + int ## S sav; \
67 + ret= __atomic_compare_exchange_n(a, cmp, set, \
68 + 0, \
69 + __ATOMIC_SEQ_CST,\
70 + __ATOMIC_SEQ_CST);
71 +#endif
72 +
73 #ifdef MY_ATOMIC_MODE_DUMMY
74 #define make_atomic_load_body(S) ret= *a
75 #define make_atomic_store_body(S) *a= v
76 --- a/include/atomic/nolock.h
77 +++ b/include/atomic/nolock.h
78 @@ -17,7 +17,7 @@
79 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
80
81 #if defined(__i386__) || defined(_MSC_VER) || defined(__x86_64__) \
82 - || defined(HAVE_GCC_ATOMIC_BUILTINS) \
83 + || defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS) \
84 || defined(HAVE_SOLARIS_ATOMIC)
85
86 # ifdef MY_ATOMIC_MODE_DUMMY
87 @@ -41,7 +41,7 @@
88 # elif __GNUC__
89 # if defined(HAVE_SOLARIS_ATOMIC)
90 # include "solaris.h"
91 -# elif defined(HAVE_GCC_ATOMIC_BUILTINS)
92 +# elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS)
93 # include "gcc_builtins.h"
94 # elif defined(__i386__) || defined(__x86_64__)
95 # include "x86-gcc.h"
96 --- a/mysys/CMakeLists.txt
97 +++ b/mysys/CMakeLists.txt
98 @@ -78,6 +78,10 @@ IF(HAVE_BFD_H)
99 TARGET_LINK_LIBRARIES(mysys bfd)
100 ENDIF(HAVE_BFD_H)
101
102 +IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
103 + TARGET_LINK_LIBRARIES(mysys atomic)
104 +ENDIF()
105 +
106 IF (WIN32)
107 TARGET_LINK_LIBRARIES(mysys IPHLPAPI)
108 ENDIF(WIN32)
109 --- a/sql/CMakeLists.txt
110 +++ b/sql/CMakeLists.txt
111 @@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI
112 ${SSL_LIBRARIES}
113 ${LIBSYSTEMD})
114
115 +IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
116 + TARGET_LINK_LIBRARIES(sql atomic)
117 +ENDIF()
118 +
119 IF(WIN32)
120 SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc)
121 TARGET_LINK_LIBRARIES(sql psapi)