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
|
# endif
|
||||||
--- storage/xtradb/include/ut0ut.h
|
--- storage/xtradb/include/ut0ut.h
|
||||||
+++ storage/xtradb/include/ut0ut.h
|
+++ storage/xtradb/include/ut0ut.h
|
||||||
@@ -86,8 +86,7 @@ struct ut_when_dtor {
|
@@ -86,6 +86,8 @@
|
||||||
independent way by using YieldProcessor. */
|
# elif defined(__powerpc__) && defined __GLIBC__
|
||||||
# define UT_RELAX_CPU() YieldProcessor()
|
#include <sys/platform/ppc.h>
|
||||||
# elif defined(__powerpc__)
|
# define UT_RELAX_CPU() __ppc_get_timebase()
|
||||||
-#include <sys/platform/ppc.h>
|
+# elif defined(__powerpc__)
|
||||||
-# define UT_RELAX_CPU() __ppc_get_timebase()
|
|
||||||
+# define UT_RELAX_CPU() __builtin_ppc_get_timebase()
|
+# define UT_RELAX_CPU() __builtin_ppc_get_timebase()
|
||||||
# else
|
# else
|
||||||
# define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
|
# define UT_RELAX_CPU() ((void)0) /* avoid warning for an empty statement */
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'mariadb'
|
# Template file for 'mariadb'
|
||||||
pkgname=mariadb
|
pkgname=mariadb
|
||||||
version=10.1.30
|
version=10.1.45
|
||||||
revision=9
|
revision=1
|
||||||
build_style=cmake
|
build_style=cmake
|
||||||
configure_args="-DMYSQL_DATADIR=/var/lib/mysql
|
configure_args="-DMYSQL_DATADIR=/var/lib/mysql
|
||||||
-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock -DDEFAULT_CHARSET=utf8
|
-DMYSQL_UNIX_ADDR=/run/mysqld/mysqld.sock -DDEFAULT_CHARSET=utf8
|
||||||
|
@ -27,7 +27,7 @@ maintainer="Orphaned <orphan@voidlinux.org>"
|
||||||
license="GPL-2.0-only"
|
license="GPL-2.0-only"
|
||||||
homepage="https://mariadb.org/"
|
homepage="https://mariadb.org/"
|
||||||
distfiles="http://archive.mariadb.org/$pkgname-$version/source/$pkgname-$version.tar.gz"
|
distfiles="http://archive.mariadb.org/$pkgname-$version/source/$pkgname-$version.tar.gz"
|
||||||
checksum=173a5e5a24819e0a469c3bd09b5c98491676c37c6095882a2ea34c5af0996c88
|
checksum=9d8f0f71f9613b2028ffc5c5be8b98948ec955eb0d89600d18ed7cc04807dad5
|
||||||
lib32disabled=yes
|
lib32disabled=yes
|
||||||
provides="mysql-${version}_${revision}"
|
provides="mysql-${version}_${revision}"
|
||||||
replaces="mysql>=0"
|
replaces="mysql>=0"
|
||||||
|
|
Loading…
Reference in a new issue