parent
2c88eef945
commit
b79e121443
9 changed files with 436 additions and 440 deletions
128
srcpkgs/mariadb/patches/c11_atomics.patch
Normal file
128
srcpkgs/mariadb/patches/c11_atomics.patch
Normal file
|
@ -0,0 +1,128 @@
|
|||
From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
|
||||
Date: Thu, 10 Aug 2017 20:40:29 +0200
|
||||
Subject: c11_atomics
|
||||
|
||||
---
|
||||
configure.cmake | 23 +++++++++++++++++++++--
|
||||
include/atomic/gcc_builtins.h | 15 +++++++++++++++
|
||||
include/atomic/nolock.h | 4 ++--
|
||||
mysys/CMakeLists.txt | 4 ++++
|
||||
sql/CMakeLists.txt | 4 ++++
|
||||
5 files changed, 46 insertions(+), 4 deletions(-)
|
||||
|
||||
--- configure.cmake
|
||||
+++ configure.cmake
|
||||
@@ -128,7 +128,7 @@ IF(UNIX)
|
||||
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;
|
||||
return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
|
||||
}"
|
||||
- HAVE_GCC_C11_ATOMICS)
|
||||
+ HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
|
||||
+ IF(HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
|
||||
+ SET(HAVE_GCC_C11_ATOMICS True)
|
||||
+ ELSE()
|
||||
+ SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||
+ CHECK_CXX_SOURCE_COMPILES("
|
||||
+ int main()
|
||||
+ {
|
||||
+ long long int var= 1;
|
||||
+ long long int *ptr= &var;
|
||||
+ return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
|
||||
+ }"
|
||||
+ HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ SET(HAVE_GCC_C11_ATOMICS True)
|
||||
+ ELSE()
|
||||
+ SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
|
||||
+ ENDIF()
|
||||
+ ENDIF()
|
||||
ELSE()
|
||||
MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
|
||||
ENDIF()
|
||||
--- include/atomic/gcc_builtins.h
|
||||
+++ 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-1335 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
|
||||
--- include/atomic/nolock.h
|
||||
+++ include/atomic/nolock.h
|
||||
@@ -17,7 +17,7 @@
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 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"
|
||||
--- mysys/CMakeLists.txt
|
||||
+++ 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()
|
||||
+
|
||||
IF (WIN32)
|
||||
TARGET_LINK_LIBRARIES(mysys IPHLPAPI)
|
||||
ENDIF(WIN32)
|
||||
--- sql/CMakeLists.txt
|
||||
+++ sql/CMakeLists.txt
|
||||
@@ -165,6 +165,10 @@ TARGET_LINK_LIBRARIES(sql ${MYSQLD_STATI
|
||||
${SSL_LIBRARIES}
|
||||
${LIBSYSTEMD})
|
||||
|
||||
+IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ TARGET_LINK_LIBRARIES(sql atomic)
|
||||
+ENDIF()
|
||||
+
|
||||
IF(WIN32)
|
||||
SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc)
|
||||
TARGET_LINK_LIBRARIES(sql psapi)
|
|
@ -1,34 +0,0 @@
|
|||
From c45b4a774b6d1404a080a1c1759f780fa78f223b Mon Sep 17 00:00:00 2001
|
||||
From: Sergey Vojtovich <svoj@mariadb.org>
|
||||
Date: Fri, 21 Sep 2018 16:04:16 +0400
|
||||
Subject: [PATCH] MDEV-17200 - pthread_detach called for already detached
|
||||
threads
|
||||
|
||||
pthread_detach_this_thread() was intended to be defined to something
|
||||
meaningful only on some ancient unixes, which don't have
|
||||
pthread_attr_setdetachstate() defined. Otherwise, on normal unixes,
|
||||
threads are created detached in the first place.
|
||||
|
||||
This was broken in 0f01bf267680244ec488adaf65a42838756ed48e so that
|
||||
we started calling pthread_detach() for already detached threads.
|
||||
Intention was to detach aria checkpoint thread.
|
||||
|
||||
However in 87007dc2f71634cc460271eb277ad851ec69c04b aria service threads
|
||||
were made joinable with appropriate handling, which makes breaking
|
||||
revision unneccessary.
|
||||
|
||||
Revert remnants of 0f01bf267680244ec488adaf65a42838756ed48e, so that
|
||||
pthread_detach_this_thread() is meaningful only on some ancient unixes
|
||||
again.
|
||||
|
||||
--- include/my_pthread.h
|
||||
+++ include/my_pthread.h
|
||||
@@ -184,7 +184,7 @@ int pthread_cancel(pthread_t thread);
|
||||
#define pthread_key(T,V) pthread_key_t V
|
||||
#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V))
|
||||
#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V))
|
||||
-#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
|
||||
+#define pthread_detach_this_thread()
|
||||
#define pthread_handler_t EXTERNC void *
|
||||
typedef void *(* pthread_handler)(void *);
|
||||
|
|
@ -1,294 +0,0 @@
|
|||
--- include/my_atomic.h
|
||||
+++ include/my_atomic.h
|
||||
@@ -104,217 +104,6 @@
|
||||
but can be added, if necessary.
|
||||
*/
|
||||
|
||||
-#define intptr void *
|
||||
-/**
|
||||
- Currently we don't support 8-bit and 16-bit operations.
|
||||
- It can be added later if needed.
|
||||
-*/
|
||||
-#undef MY_ATOMIC_HAS_8_16
|
||||
-
|
||||
-/*
|
||||
- * Attempt to do atomic ops without locks
|
||||
- */
|
||||
-#include "atomic/nolock.h"
|
||||
-
|
||||
-#ifndef make_atomic_cas_body
|
||||
-/* nolock.h was not able to generate even a CAS function, fall back */
|
||||
-#error atomic ops for this platform are not implemented
|
||||
-#endif
|
||||
-
|
||||
-/* define missing functions by using the already generated ones */
|
||||
-#ifndef make_atomic_add_body
|
||||
-#define make_atomic_add_body(S) \
|
||||
- int ## S tmp=*a; \
|
||||
- while (!my_atomic_cas ## S(a, &tmp, tmp+v)) ; \
|
||||
- v=tmp;
|
||||
-#endif
|
||||
-#ifndef make_atomic_fas_body
|
||||
-#define make_atomic_fas_body(S) \
|
||||
- int ## S tmp=*a; \
|
||||
- while (!my_atomic_cas ## S(a, &tmp, v)) ; \
|
||||
- v=tmp;
|
||||
-#endif
|
||||
-#ifndef make_atomic_load_body
|
||||
-#define make_atomic_load_body(S) \
|
||||
- ret= 0; /* avoid compiler warning */ \
|
||||
- (void)(my_atomic_cas ## S(a, &ret, ret));
|
||||
-#endif
|
||||
-#ifndef make_atomic_store_body
|
||||
-#define make_atomic_store_body(S) \
|
||||
- (void)(my_atomic_fas ## S (a, v));
|
||||
-#endif
|
||||
-
|
||||
-/*
|
||||
- transparent_union doesn't work in g++
|
||||
- Bug ?
|
||||
-
|
||||
- Darwin's gcc doesn't want to put pointers in a transparent_union
|
||||
- when built with -arch ppc64. Complains:
|
||||
- warning: 'transparent_union' attribute ignored
|
||||
-*/
|
||||
-#if defined(__GNUC__) && !defined(__cplusplus) && \
|
||||
- ! (defined(__APPLE__) && (defined(_ARCH_PPC64) ||defined (_ARCH_PPC)))
|
||||
-/*
|
||||
- we want to be able to use my_atomic_xxx functions with
|
||||
- both signed and unsigned integers. But gcc will issue a warning
|
||||
- "passing arg N of `my_atomic_XXX' as [un]signed due to prototype"
|
||||
- if the signedness of the argument doesn't match the prototype, or
|
||||
- "pointer targets in passing argument N of my_atomic_XXX differ in signedness"
|
||||
- if int* is used where uint* is expected (or vice versa).
|
||||
- Let's shut these warnings up
|
||||
-*/
|
||||
-#define make_transparent_unions(S) \
|
||||
- typedef union { \
|
||||
- int ## S i; \
|
||||
- uint ## S u; \
|
||||
- } U_ ## S __attribute__ ((transparent_union)); \
|
||||
- typedef union { \
|
||||
- int ## S volatile *i; \
|
||||
- uint ## S volatile *u; \
|
||||
- } Uv_ ## S __attribute__ ((transparent_union));
|
||||
-#define uintptr intptr
|
||||
-make_transparent_unions(8)
|
||||
-make_transparent_unions(16)
|
||||
-make_transparent_unions(32)
|
||||
-make_transparent_unions(64)
|
||||
-make_transparent_unions(ptr)
|
||||
-#undef uintptr
|
||||
-#undef make_transparent_unions
|
||||
-#define a U_a.i
|
||||
-#define cmp U_cmp.i
|
||||
-#define v U_v.i
|
||||
-#define set U_set.i
|
||||
-#else
|
||||
-#define U_8 int8
|
||||
-#define U_16 int16
|
||||
-#define U_32 int32
|
||||
-#define U_64 int64
|
||||
-#define U_ptr intptr
|
||||
-#define Uv_8 int8
|
||||
-#define Uv_16 int16
|
||||
-#define Uv_32 int32
|
||||
-#define Uv_64 int64
|
||||
-#define Uv_ptr intptr
|
||||
-#define U_a volatile *a
|
||||
-#define U_cmp *cmp
|
||||
-#define U_v v
|
||||
-#define U_set set
|
||||
-#endif /* __GCC__ transparent_union magic */
|
||||
-
|
||||
-#define make_atomic_cas(S) \
|
||||
-static inline int my_atomic_cas ## S(Uv_ ## S U_a, \
|
||||
- Uv_ ## S U_cmp, U_ ## S U_set) \
|
||||
-{ \
|
||||
- int8 ret; \
|
||||
- make_atomic_cas_body(S); \
|
||||
- return ret; \
|
||||
-}
|
||||
-
|
||||
-#define make_atomic_add(S) \
|
||||
-static inline int ## S my_atomic_add ## S( \
|
||||
- Uv_ ## S U_a, U_ ## S U_v) \
|
||||
-{ \
|
||||
- make_atomic_add_body(S); \
|
||||
- return v; \
|
||||
-}
|
||||
-
|
||||
-#define make_atomic_fas(S) \
|
||||
-static inline int ## S my_atomic_fas ## S( \
|
||||
- Uv_ ## S U_a, U_ ## S U_v) \
|
||||
-{ \
|
||||
- make_atomic_fas_body(S); \
|
||||
- return v; \
|
||||
-}
|
||||
-
|
||||
-#define make_atomic_load(S) \
|
||||
-static inline int ## S my_atomic_load ## S(Uv_ ## S U_a) \
|
||||
-{ \
|
||||
- int ## S ret; \
|
||||
- make_atomic_load_body(S); \
|
||||
- return ret; \
|
||||
-}
|
||||
-
|
||||
-#define make_atomic_store(S) \
|
||||
-static inline void my_atomic_store ## S( \
|
||||
- Uv_ ## S U_a, U_ ## S U_v) \
|
||||
-{ \
|
||||
- make_atomic_store_body(S); \
|
||||
-}
|
||||
-
|
||||
-#ifdef MY_ATOMIC_HAS_8_16
|
||||
-make_atomic_cas(8)
|
||||
-make_atomic_cas(16)
|
||||
-#endif
|
||||
-make_atomic_cas(32)
|
||||
-make_atomic_cas(64)
|
||||
-make_atomic_cas(ptr)
|
||||
-
|
||||
-#ifdef MY_ATOMIC_HAS_8_16
|
||||
-make_atomic_add(8)
|
||||
-make_atomic_add(16)
|
||||
-#endif
|
||||
-make_atomic_add(32)
|
||||
-make_atomic_add(64)
|
||||
-
|
||||
-#ifdef MY_ATOMIC_HAS_8_16
|
||||
-make_atomic_load(8)
|
||||
-make_atomic_load(16)
|
||||
-#endif
|
||||
-make_atomic_load(32)
|
||||
-make_atomic_load(64)
|
||||
-make_atomic_load(ptr)
|
||||
-
|
||||
-#ifdef MY_ATOMIC_HAS_8_16
|
||||
-make_atomic_fas(8)
|
||||
-make_atomic_fas(16)
|
||||
-#endif
|
||||
-make_atomic_fas(32)
|
||||
-make_atomic_fas(64)
|
||||
-make_atomic_fas(ptr)
|
||||
-
|
||||
-#ifdef MY_ATOMIC_HAS_8_16
|
||||
-make_atomic_store(8)
|
||||
-make_atomic_store(16)
|
||||
-#endif
|
||||
-make_atomic_store(32)
|
||||
-make_atomic_store(64)
|
||||
-make_atomic_store(ptr)
|
||||
-
|
||||
-#ifdef _atomic_h_cleanup_
|
||||
-#include _atomic_h_cleanup_
|
||||
-#undef _atomic_h_cleanup_
|
||||
-#endif
|
||||
-
|
||||
-#undef U_8
|
||||
-#undef U_16
|
||||
-#undef U_32
|
||||
-#undef U_64
|
||||
-#undef U_ptr
|
||||
-#undef Uv_8
|
||||
-#undef Uv_16
|
||||
-#undef Uv_32
|
||||
-#undef Uv_64
|
||||
-#undef Uv_ptr
|
||||
-#undef a
|
||||
-#undef cmp
|
||||
-#undef v
|
||||
-#undef set
|
||||
-#undef U_a
|
||||
-#undef U_cmp
|
||||
-#undef U_v
|
||||
-#undef U_set
|
||||
-#undef make_atomic_add
|
||||
-#undef make_atomic_cas
|
||||
-#undef make_atomic_load
|
||||
-#undef make_atomic_store
|
||||
-#undef make_atomic_fas
|
||||
-#undef make_atomic_add_body
|
||||
-#undef make_atomic_cas_body
|
||||
-#undef make_atomic_load_body
|
||||
-#undef make_atomic_store_body
|
||||
-#undef make_atomic_fas_body
|
||||
-#undef intptr
|
||||
-
|
||||
/*
|
||||
the macro below defines (as an expression) the code that
|
||||
will be run in spin-loops. Intel manuals recummend to have PAUSE there.
|
||||
@@ -328,7 +117,8 @@ make_atomic_store(ptr)
|
||||
#define MY_ATOMIC_NOT_1CPU 1
|
||||
extern int my_atomic_initialize();
|
||||
|
||||
-#ifdef __ATOMIC_SEQ_CST
|
||||
+#define MY_ATOMIC_MODE "gcc-atomics-smp"
|
||||
+
|
||||
#define MY_MEMORY_ORDER_RELAXED __ATOMIC_RELAXED
|
||||
#define MY_MEMORY_ORDER_CONSUME __ATOMIC_CONSUME
|
||||
#define MY_MEMORY_ORDER_ACQUIRE __ATOMIC_ACQUIRE
|
||||
@@ -364,43 +154,27 @@ extern int my_atomic_initialize();
|
||||
__atomic_compare_exchange_n((P), (E), (D), false, (S), (F))
|
||||
#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \
|
||||
__atomic_compare_exchange_n((P), (E), (D), false, (S), (F))
|
||||
-#else
|
||||
-#define MY_MEMORY_ORDER_RELAXED
|
||||
-#define MY_MEMORY_ORDER_CONSUME
|
||||
-#define MY_MEMORY_ORDER_ACQUIRE
|
||||
-#define MY_MEMORY_ORDER_RELEASE
|
||||
-#define MY_MEMORY_ORDER_ACQ_REL
|
||||
-#define MY_MEMORY_ORDER_SEQ_CST
|
||||
-
|
||||
-#define my_atomic_store32_explicit(P, D, O) my_atomic_store32((P), (D))
|
||||
-#define my_atomic_store64_explicit(P, D, O) my_atomic_store64((P), (D))
|
||||
-#define my_atomic_storeptr_explicit(P, D, O) my_atomic_storeptr((P), (D))
|
||||
-
|
||||
-#define my_atomic_load32_explicit(P, O) my_atomic_load32((P))
|
||||
-#define my_atomic_load64_explicit(P, O) my_atomic_load64((P))
|
||||
-#define my_atomic_loadptr_explicit(P, O) my_atomic_loadptr((P))
|
||||
-
|
||||
-#define my_atomic_fas32_explicit(P, D, O) my_atomic_fas32((P), (D))
|
||||
-#define my_atomic_fas64_explicit(P, D, O) my_atomic_fas64((P), (D))
|
||||
-#define my_atomic_fasptr_explicit(P, D, O) my_atomic_fasptr((P), (D))
|
||||
-
|
||||
-#define my_atomic_add32_explicit(P, A, O) my_atomic_add32((P), (A))
|
||||
-#define my_atomic_add64_explicit(P, A, O) my_atomic_add64((P), (A))
|
||||
-#define my_atomic_addptr_explicit(P, A, O) my_atomic_addptr((P), (A))
|
||||
|
||||
-#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \
|
||||
- my_atomic_cas32((P), (E), (D))
|
||||
-#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \
|
||||
- my_atomic_cas64((P), (E), (D))
|
||||
-#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \
|
||||
- my_atomic_casptr((P), (E), (D))
|
||||
+#define my_atomic_store32(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_store64(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_storeptr(P, D) __atomic_store_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
|
||||
-#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \
|
||||
- my_atomic_cas32((P), (E), (D))
|
||||
-#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \
|
||||
- my_atomic_cas64((P), (E), (D))
|
||||
-#define my_atomic_casptr_strong_explicit(P, E, D, S, F) \
|
||||
- my_atomic_casptr((P), (E), (D))
|
||||
-#endif
|
||||
+#define my_atomic_load32(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_load64(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_loadptr(P) __atomic_load_n((P), __ATOMIC_SEQ_CST)
|
||||
+
|
||||
+#define my_atomic_fas32(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_fas64(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_fasptr(P, D) __atomic_exchange_n((P), (D), __ATOMIC_SEQ_CST)
|
||||
+
|
||||
+#define my_atomic_add32(P, A) __atomic_fetch_add((P), (A), __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_add64(P, A) __atomic_fetch_add((P), (A), __ATOMIC_SEQ_CST)
|
||||
+
|
||||
+#define my_atomic_cas32(P, E, D) \
|
||||
+ __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_cas64(P, E, D) \
|
||||
+ __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
|
||||
+#define my_atomic_casptr(P, E, D) \
|
||||
+ __atomic_compare_exchange_n((P), (E), (D), 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
|
||||
|
||||
#endif /* MY_ATOMIC_INCLUDED */
|
|
@ -1,103 +0,0 @@
|
|||
Source: Debian, q66
|
||||
|
||||
This ensures arches that need libatomic properly get it where necessary.
|
||||
It also removes the sync builtin checks that are not necessary when
|
||||
using C11 atomics (like we always are because we're on a modern gcc)
|
||||
that break build on e.g. ppc32 and mips.
|
||||
|
||||
--- configure.cmake
|
||||
+++ configure.cmake
|
||||
@@ -992,35 +992,19 @@ SET(SIGNAL_WITH_VIO_CLOSE 1)
|
||||
|
||||
MARK_AS_ADVANCED(NO_ALARM)
|
||||
|
||||
-
|
||||
-IF(WITH_ATOMIC_OPS STREQUAL "up")
|
||||
- SET(MY_ATOMIC_MODE_DUMMY 1 CACHE BOOL "Assume single-CPU mode, no concurrency")
|
||||
-ELSEIF(WITH_ATOMIC_OPS STREQUAL "smp")
|
||||
-ELSEIF(NOT WITH_ATOMIC_OPS)
|
||||
- CHECK_CXX_SOURCE_COMPILES("
|
||||
- int main()
|
||||
- {
|
||||
- int foo= -10; int bar= 10;
|
||||
- long long int foo64= -10; long long int bar64= 10;
|
||||
- if (!__sync_fetch_and_add(&foo, bar) || foo)
|
||||
- return -1;
|
||||
- bar= __sync_lock_test_and_set(&foo, bar);
|
||||
- if (bar || foo != 10)
|
||||
- return -1;
|
||||
- bar= __sync_val_compare_and_swap(&bar, foo, 15);
|
||||
- if (bar)
|
||||
- return -1;
|
||||
- if (!__sync_fetch_and_add(&foo64, bar64) || foo64)
|
||||
- return -1;
|
||||
- bar64= __sync_lock_test_and_set(&foo64, bar64);
|
||||
- if (bar64 || foo64 != 10)
|
||||
- return -1;
|
||||
- bar64= __sync_val_compare_and_swap(&bar64, foo, 15);
|
||||
- if (bar64)
|
||||
- return -1;
|
||||
- return 0;
|
||||
- }"
|
||||
- HAVE_GCC_ATOMIC_BUILTINS)
|
||||
+CHECK_CXX_SOURCE_COMPILES("
|
||||
+int main()
|
||||
+{
|
||||
+ long long int var= 1;
|
||||
+ long long int *ptr= &var;
|
||||
+ return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
|
||||
+}"
|
||||
+HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
|
||||
+IF (HAVE_GCC_C11_ATOMICS_WITHOUT_LIBATOMIC)
|
||||
+ SET(HAVE_GCC_C11_ATOMICS True)
|
||||
+ELSE()
|
||||
+ SET(OLD_CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
|
||||
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
|
||||
CHECK_CXX_SOURCE_COMPILES("
|
||||
int main()
|
||||
{
|
||||
@@ -1028,14 +1012,13 @@ ELSEIF(NOT WITH_ATOMIC_OPS)
|
||||
long long int *ptr= &var;
|
||||
return (int)__atomic_load_n(ptr, __ATOMIC_SEQ_CST);
|
||||
}"
|
||||
- HAVE_GCC_C11_ATOMICS)
|
||||
-ELSE()
|
||||
- MESSAGE(FATAL_ERROR "${WITH_ATOMIC_OPS} is not a valid value for WITH_ATOMIC_OPS!")
|
||||
+ HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ IF(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ SET(HAVE_GCC_C11_ATOMICS True)
|
||||
+ ENDIF()
|
||||
+ SET(CMAKE_REQUIRED_LIBRARIES ${OLD_CMAKE_REQUIRED_LIBRARIES})
|
||||
ENDIF()
|
||||
|
||||
-SET(WITH_ATOMIC_OPS "${WITH_ATOMIC_OPS}" CACHE STRING "Implement atomic operations using atomic CPU instructions for multi-processor (smp) or uniprocessor (up) configuration. By default gcc built-in sync functions are used, if available and 'smp' configuration otherwise.")
|
||||
-MARK_AS_ADVANCED(WITH_ATOMIC_OPS MY_ATOMIC_MODE_DUMMY)
|
||||
-
|
||||
IF(WITH_VALGRIND)
|
||||
SET(HAVE_valgrind 1)
|
||||
ENDIF()
|
||||
--- mysys/CMakeLists.txt
|
||||
+++ mysys/CMakeLists.txt
|
||||
@@ -74,6 +74,10 @@ TARGET_LINK_LIBRARIES(mysys dbug strings mysys_ssl ${ZLIB_LIBRARY}
|
||||
${LIBNSL} ${LIBM} ${LIBRT} ${LIBDL} ${LIBSOCKET} ${LIBEXECINFO})
|
||||
DTRACE_INSTRUMENT(mysys)
|
||||
|
||||
+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ TARGET_LINK_LIBRARIES(mysys atomic)
|
||||
+ENDIF()
|
||||
+
|
||||
IF(HAVE_BFD_H)
|
||||
TARGET_LINK_LIBRARIES(mysys bfd)
|
||||
ENDIF(HAVE_BFD_H)
|
||||
--- sql/CMakeLists.txt
|
||||
+++ sql/CMakeLists.txt
|
||||
@@ -172,6 +172,9 @@ ELSE()
|
||||
SET(MYSQLD_SOURCE main.cc ${DTRACE_PROBES_ALL})
|
||||
ENDIF()
|
||||
|
||||
+IF (HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC)
|
||||
+ TARGET_LINK_LIBRARIES(sql atomic)
|
||||
+ENDIF()
|
||||
|
||||
IF(MSVC AND NOT WITHOUT_DYNAMIC_PLUGINS)
|
||||
|
257
srcpkgs/mariadb/patches/mips-connect-unaligned.patch
Normal file
257
srcpkgs/mariadb/patches/mips-connect-unaligned.patch
Normal file
|
@ -0,0 +1,257 @@
|
|||
From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
|
||||
Date: Thu, 10 Aug 2017 20:40:28 +0200
|
||||
Subject: mips-connect-unaligned
|
||||
|
||||
---
|
||||
storage/connect/valblk.cpp | 41 ++++++++++++++++++-------------------
|
||||
storage/connect/valblk.h | 51 +++++++++++++++++++++++++++++-----------------
|
||||
2 files changed, 52 insertions(+), 40 deletions(-)
|
||||
|
||||
--- storage/connect/valblk.cpp
|
||||
+++ storage/connect/valblk.cpp
|
||||
@@ -268,14 +268,14 @@ bool TYPBLK<TYPE>::Init(PGLOBAL g, bool
|
||||
template <class TYPE>
|
||||
char *TYPBLK<TYPE>::GetCharString(char *p, int n)
|
||||
{
|
||||
- sprintf(p, Fmt, Typp[n]);
|
||||
+ sprintf(p, Fmt, UnalignedRead(n));
|
||||
return p;
|
||||
} // end of GetCharString
|
||||
|
||||
template <>
|
||||
char *TYPBLK<double>::GetCharString(char *p, int n)
|
||||
{
|
||||
- sprintf(p, Fmt, Prec, Typp[n]);
|
||||
+ sprintf(p, Fmt, Prec, UnalignedRead(n));
|
||||
return p;
|
||||
} // end of GetCharString
|
||||
|
||||
@@ -291,7 +291,7 @@ void TYPBLK<TYPE>::SetValue(PVAL valp, i
|
||||
ChkTyp(valp);
|
||||
|
||||
if (!(b = valp->IsNull()))
|
||||
- Typp[n] = GetTypedValue(valp);
|
||||
+ UnalignedWrite(n, GetTypedValue(valp));
|
||||
else
|
||||
Reset(n);
|
||||
|
||||
@@ -353,9 +353,9 @@ void TYPBLK<TYPE>::SetValue(PCSZ p, int
|
||||
ulonglong val = CharToNumber(p, strlen(p), maxval, Unsigned, &minus);
|
||||
|
||||
if (minus && val < maxval)
|
||||
- Typp[n] = (TYPE)(-(signed)val);
|
||||
+ UnalignedWrite(n, (TYPE)(-(signed)val));
|
||||
else
|
||||
- Typp[n] = (TYPE)val;
|
||||
+ UnalignedWrite(n, (TYPE)val);
|
||||
|
||||
SetNull(n, false);
|
||||
} // end of SetValue
|
||||
@@ -398,7 +398,7 @@ void TYPBLK<double>::SetValue(PCSZ p, in
|
||||
throw Type;
|
||||
} // endif Check
|
||||
|
||||
- Typp[n] = atof(p);
|
||||
+ UnalignedWrite(n, atof(p));
|
||||
SetNull(n, false);
|
||||
} // end of SetValue
|
||||
|
||||
@@ -430,7 +430,7 @@ void TYPBLK<TYPE>::SetValue(PVBLK pv, in
|
||||
ChkTyp(pv);
|
||||
|
||||
if (!(b = pv->IsNull(n2) && Nullable))
|
||||
- Typp[n1] = GetTypedValue(pv, n2);
|
||||
+ UnalignedWrite(n1, GetTypedValue(pv, n2));
|
||||
else
|
||||
Reset(n1);
|
||||
|
||||
@@ -481,10 +481,10 @@ void TYPBLK<TYPE>::SetMin(PVAL valp, int
|
||||
{
|
||||
CheckParms(valp, n)
|
||||
TYPE tval = GetTypedValue(valp);
|
||||
- TYPE& tmin = Typp[n];
|
||||
+ TYPE tmin = UnalignedRead(n);
|
||||
|
||||
if (tval < tmin)
|
||||
- tmin = tval;
|
||||
+ UnalignedWrite(n, tval);
|
||||
|
||||
} // end of SetMin
|
||||
|
||||
@@ -496,10 +496,10 @@ void TYPBLK<TYPE>::SetMax(PVAL valp, int
|
||||
{
|
||||
CheckParms(valp, n)
|
||||
TYPE tval = GetTypedValue(valp);
|
||||
- TYPE& tmin = Typp[n];
|
||||
+ TYPE tmin = UnalignedRead(n);
|
||||
|
||||
if (tval > tmin)
|
||||
- tmin = tval;
|
||||
+ UnalignedWrite(n, tval);
|
||||
|
||||
} // end of SetMax
|
||||
|
||||
@@ -513,8 +513,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
|
||||
CheckType(pv)
|
||||
TYPE *lp = ((TYPBLK*)pv)->Typp;
|
||||
|
||||
- for (int i = k; i < n; i++) // TODO
|
||||
- Typp[i] = lp[i];
|
||||
+ memcpy(Typp + k, lp + k, sizeof(TYPE) * n);
|
||||
|
||||
} // end of SetValues
|
||||
#endif // 0
|
||||
@@ -525,7 +524,7 @@ void TYPBLK<TYPE>::SetValues(PVBLK pv, i
|
||||
template <class TYPE>
|
||||
void TYPBLK<TYPE>::Move(int i, int j)
|
||||
{
|
||||
- Typp[j] = Typp[i];
|
||||
+ UnalignedWrite(j, UnalignedRead(i));
|
||||
MoveNull(i, j);
|
||||
} // end of Move
|
||||
|
||||
@@ -539,7 +538,7 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
|
||||
ChkIndx(n);
|
||||
ChkTyp(vp);
|
||||
#endif // _DEBUG
|
||||
- TYPE mlv = Typp[n];
|
||||
+ TYPE mlv = UnalignedRead(n);
|
||||
TYPE vlv = GetTypedValue(vp);
|
||||
|
||||
return (vlv > mlv) ? 1 : (vlv < mlv) ? (-1) : 0;
|
||||
@@ -551,8 +550,8 @@ int TYPBLK<TYPE>::CompVal(PVAL vp, int n
|
||||
template <class TYPE>
|
||||
int TYPBLK<TYPE>::CompVal(int i1, int i2)
|
||||
{
|
||||
- TYPE lv1 = Typp[i1];
|
||||
- TYPE lv2 = Typp[i2];
|
||||
+ TYPE lv1 = UnalignedRead(i1);
|
||||
+ TYPE lv2 = UnalignedRead(i2);
|
||||
|
||||
return (lv1 > lv2) ? 1 : (lv1 < lv2) ? (-1) : 0;
|
||||
} // end of CompVal
|
||||
@@ -589,7 +588,7 @@ int TYPBLK<TYPE>::Find(PVAL vp)
|
||||
TYPE n = GetTypedValue(vp);
|
||||
|
||||
for (i = 0; i < Nval; i++)
|
||||
- if (n == Typp[i])
|
||||
+ if (n == UnalignedRead(i))
|
||||
break;
|
||||
|
||||
return (i < Nval) ? i : (-1);
|
||||
@@ -605,7 +604,7 @@ int TYPBLK<TYPE>::GetMaxLength(void)
|
||||
int i, n, m;
|
||||
|
||||
for (i = n = 0; i < Nval; i++) {
|
||||
- m = sprintf(buf, Fmt, Typp[i]);
|
||||
+ m = sprintf(buf, Fmt, UnalignedRead(i));
|
||||
n = MY_MAX(n, m);
|
||||
} // endfor i
|
||||
|
||||
@@ -1335,7 +1334,7 @@ char *DATBLK::GetCharString(char *p, int
|
||||
char *vp;
|
||||
|
||||
if (Dvalp) {
|
||||
- Dvalp->SetValue(Typp[n]);
|
||||
+ Dvalp->SetValue(UnalignedRead(n));
|
||||
vp = Dvalp->GetCharString(p);
|
||||
} else
|
||||
vp = TYPBLK<int>::GetCharString(p, n);
|
||||
@@ -1351,7 +1350,7 @@ void DATBLK::SetValue(PCSZ p, int n)
|
||||
if (Dvalp) {
|
||||
// Decode the string according to format
|
||||
Dvalp->SetValue_psz(p);
|
||||
- Typp[n] = Dvalp->GetIntValue();
|
||||
+ UnalignedWrite(n, Dvalp->GetIntValue());
|
||||
} else
|
||||
TYPBLK<int>::SetValue(p, n);
|
||||
|
||||
--- storage/connect/valblk.h
|
||||
+++ storage/connect/valblk.h
|
||||
@@ -139,6 +139,7 @@ class VALBLK : public BLOCK {
|
||||
int Prec; // Precision of float values
|
||||
}; // end of class VALBLK
|
||||
|
||||
+
|
||||
/***********************************************************************/
|
||||
/* Class TYPBLK: represents a block of typed values. */
|
||||
/***********************************************************************/
|
||||
@@ -151,40 +152,41 @@ class TYPBLK : public VALBLK {
|
||||
// Implementation
|
||||
virtual bool Init(PGLOBAL g, bool check);
|
||||
virtual int GetVlen(void) {return sizeof(TYPE);}
|
||||
- virtual char GetTinyValue(int n) {return (char)Typp[n];}
|
||||
- virtual uchar GetUTinyValue(int n) {return (uchar)Typp[n];}
|
||||
- virtual short GetShortValue(int n) {return (short)Typp[n];}
|
||||
- virtual ushort GetUShortValue(int n) {return (ushort)Typp[n];}
|
||||
- virtual int GetIntValue(int n) {return (int)Typp[n];}
|
||||
- virtual uint GetUIntValue(int n) {return (uint)Typp[n];}
|
||||
- virtual longlong GetBigintValue(int n) {return (longlong)Typp[n];}
|
||||
- virtual ulonglong GetUBigintValue(int n) {return (ulonglong)Typp[n];}
|
||||
- virtual double GetFloatValue(int n) {return (double)Typp[n];}
|
||||
+
|
||||
+ virtual char GetTinyValue(int n) {return (char)UnalignedRead(n);}
|
||||
+ virtual uchar GetUTinyValue(int n) {return (uchar)UnalignedRead(n);}
|
||||
+ virtual short GetShortValue(int n) {return (short)UnalignedRead(n);}
|
||||
+ virtual ushort GetUShortValue(int n) {return (ushort)UnalignedRead(n);}
|
||||
+ virtual int GetIntValue(int n) {return (int)UnalignedRead(n);}
|
||||
+ virtual uint GetUIntValue(int n) {return (uint)UnalignedRead(n);}
|
||||
+ virtual longlong GetBigintValue(int n) {return (longlong)UnalignedRead(n);}
|
||||
+ virtual ulonglong GetUBigintValue(int n) {return (ulonglong)UnalignedRead(n);}
|
||||
+ virtual double GetFloatValue(int n) {return (double)UnalignedRead(n);}
|
||||
virtual char *GetCharString(char *p, int n);
|
||||
- virtual void Reset(int n) {Typp[n] = 0;}
|
||||
+ virtual void Reset(int n) {UnalignedWrite(n, 0);}
|
||||
|
||||
// Methods
|
||||
using VALBLK::SetValue;
|
||||
virtual void SetValue(PCSZ sp, int n);
|
||||
virtual void SetValue(const char *sp, uint len, int n);
|
||||
virtual void SetValue(short sval, int n)
|
||||
- {Typp[n] = (TYPE)sval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
|
||||
virtual void SetValue(ushort sval, int n)
|
||||
- {Typp[n] = (TYPE)sval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)sval); SetNull(n, false);}
|
||||
virtual void SetValue(int lval, int n)
|
||||
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
|
||||
virtual void SetValue(uint lval, int n)
|
||||
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
|
||||
virtual void SetValue(longlong lval, int n)
|
||||
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
|
||||
virtual void SetValue(ulonglong lval, int n)
|
||||
- {Typp[n] = (TYPE)lval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)lval); SetNull(n, false);}
|
||||
virtual void SetValue(double fval, int n)
|
||||
- {Typp[n] = (TYPE)fval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)fval); SetNull(n, false);}
|
||||
virtual void SetValue(char cval, int n)
|
||||
- {Typp[n] = (TYPE)cval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
|
||||
virtual void SetValue(uchar cval, int n)
|
||||
- {Typp[n] = (TYPE)cval; SetNull(n, false);}
|
||||
+ {UnalignedWrite(n, (TYPE)cval); SetNull(n, false);}
|
||||
virtual void SetValue(PVAL valp, int n);
|
||||
virtual void SetValue(PVBLK pv, int n1, int n2);
|
||||
virtual void SetMin(PVAL valp, int n);
|
||||
@@ -206,6 +208,17 @@ class TYPBLK : public VALBLK {
|
||||
// Members
|
||||
TYPE* const &Typp;
|
||||
const char *Fmt;
|
||||
+
|
||||
+ // Unaligned access
|
||||
+ TYPE UnalignedRead(int n) const {
|
||||
+ TYPE result;
|
||||
+ memcpy(&result, Typp + n, sizeof(TYPE));
|
||||
+ return result;
|
||||
+ }
|
||||
+
|
||||
+ void UnalignedWrite(int n, TYPE value) {
|
||||
+ memcpy(Typp + n, &value, sizeof(TYPE));
|
||||
+ }
|
||||
}; // end of class TYPBLK
|
||||
|
||||
/***********************************************************************/
|
20
srcpkgs/mariadb/patches/mips-innobase-atomic.patch
Normal file
20
srcpkgs/mariadb/patches/mips-innobase-atomic.patch
Normal file
|
@ -0,0 +1,20 @@
|
|||
From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
|
||||
Date: Thu, 10 Aug 2017 20:40:29 +0200
|
||||
Subject: mips-innobase-atomic
|
||||
|
||||
---
|
||||
storage/innobase/include/os0sync.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git storage/innobase/include/os0sync.h storage/innobase/include/os0sync.h
|
||||
index bb225c5..6520237 100644
|
||||
--- storage/innobase/include/os0sync.h
|
||||
+++ storage/innobase/include/os0sync.h
|
||||
@@ -37,6 +37,7 @@ Created 9/6/1995 Heikki Tuuri
|
||||
|
||||
#include "univ.i"
|
||||
#include "ut0lst.h"
|
||||
+#include "sync0types.h"
|
||||
|
||||
/** CPU cache line size */
|
||||
#ifdef __powerpc__
|
23
srcpkgs/mariadb/patches/mips-machine.patch
Normal file
23
srcpkgs/mariadb/patches/mips-machine.patch
Normal file
|
@ -0,0 +1,23 @@
|
|||
From: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
|
||||
Date: Thu, 10 Aug 2017 20:40:29 +0200
|
||||
Subject: mips-machine
|
||||
|
||||
---
|
||||
cmake/package_name.cmake | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git cmake/package_name.cmake cmake/package_name.cmake
|
||||
index 4930a6b..7681f78 100644
|
||||
--- cmake/package_name.cmake
|
||||
+++ cmake/package_name.cmake
|
||||
@@ -34,6 +34,10 @@ IF(NOT VERSION)
|
||||
SET(DEFAULT_MACHINE "mips")
|
||||
ENDIF()
|
||||
|
||||
+ IF(NOT 64BIT AND CMAKE_SYSTEM_PROCESSOR MATCHES "^mips64")
|
||||
+ SET(DEFAULT_MACHINE "mips")
|
||||
+ ENDIF()
|
||||
+
|
||||
IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
|
||||
SET(NEED_DASH_BETWEEN_PLATFORM_AND_MACHINE 0)
|
||||
SET(DEFAULT_PLATFORM "win")
|
|
@ -15,12 +15,11 @@ builtin for this in gcc for ages, so just use that instead.
|
|||
# endif
|
||||
--- storage/xtradb/include/ut0ut.h
|
||||
+++ storage/xtradb/include/ut0ut.h
|
||||
@@ -86,8 +86,7 @@ struct ut_when_dtor {
|
||||
independent way by using YieldProcessor. */
|
||||
# define UT_RELAX_CPU() YieldProcessor()
|
||||
# elif defined(__powerpc__)
|
||||
-#include <sys/platform/ppc.h>
|
||||
-# define UT_RELAX_CPU() __ppc_get_timebase()
|
||||
@@ -86,6 +86,8 @@
|
||||
# elif defined(__powerpc__) && defined __GLIBC__
|
||||
#include <sys/platform/ppc.h>
|
||||
# define UT_RELAX_CPU() __ppc_get_timebase()
|
||||
+# elif defined(__powerpc__)
|
||||
+# define UT_RELAX_CPU() __builtin_ppc_get_timebase()
|
||||
# else
|
||||
# define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Template file for 'mariadb'
|
||||
pkgname=mariadb
|
||||
version=10.1.30
|
||||
revision=9
|
||||
version=10.1.45
|
||||
revision=1
|
||||
build_style=cmake
|
||||
configure_args="-DMYSQL_DATADIR=/var/lib/mysql
|
||||
-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock -DDEFAULT_CHARSET=utf8
|
||||
|
@ -27,7 +27,7 @@ maintainer="Orphaned <orphan@voidlinux.org>"
|
|||
license="GPL-2.0-only"
|
||||
homepage="https://mariadb.org/"
|
||||
distfiles="http://archive.mariadb.org/$pkgname-$version/source/$pkgname-$version.tar.gz"
|
||||
checksum=173a5e5a24819e0a469c3bd09b5c98491676c37c6095882a2ea34c5af0996c88
|
||||
checksum=9d8f0f71f9613b2028ffc5c5be8b98948ec955eb0d89600d18ed7cc04807dad5
|
||||
lib32disabled=yes
|
||||
provides="mysql-${version}_${revision}"
|
||||
replaces="mysql>=0"
|
||||
|
|
Loading…
Reference in a new issue