diff --git a/mariadb-10.2.19-link-and-enable-c++11-atomics.patch b/mariadb-10.2.19-link-and-enable-c++11-atomics.patch new file mode 100644 index 0000000..3abe60c --- /dev/null +++ b/mariadb-10.2.19-link-and-enable-c++11-atomics.patch @@ -0,0 +1,268 @@ +diff -Nru mariadb-10.2.19.orig/configure.cmake mariadb-10.2.19/configure.cmake +--- mariadb-10.2.19.orig/configure.cmake 2018-11-12 17:32:38.000000000 +0100 ++++ mariadb-10.2.19/configure.cmake 2018-11-30 14:02:10.883523898 +0100 +@@ -946,6 +946,21 @@ + }" + HAVE_GCC_ATOMIC_BUILTINS) + CHECK_CXX_SOURCE_COMPILES(" ++ #include ++ int main() { ++ uint64_t x = 1; ++ __atomic_add_fetch(&x, 0, __ATOMIC_RELAXED); ++ return x; ++ } ++ " HAVE__ATOMIC_ADD_FETCH) ++ if (NOT HAVE__ATOMIC_ADD_FETCH) ++ check_library_exists(atomic __atomic_add_fetch_8 "" HAVE_LIBATOMIC) ++ if (HAVE_LIBATOMIC) ++ SET(CMAKE_REQUIRED_LIBRARIES atomic) ++ SET(LIBATOMIC atomic) ++ endif() ++ endif() ++ CHECK_CXX_SOURCE_COMPILES(" + int main() + { + long long int var= 1; +diff -Nru mariadb-10.2.19.orig/include/atomic/gcc_builtins.h mariadb-10.2.19/include/atomic/gcc_builtins.h +--- mariadb-10.2.19.orig/include/atomic/gcc_builtins.h 2018-11-12 17:32:38.000000000 +0100 ++++ mariadb-10.2.19/include/atomic/gcc_builtins.h 2018-11-30 17:21:09.058725896 +0100 +@@ -16,6 +16,72 @@ + 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_C11_ATOMICS) ++#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 ++#define MY_MEMORY_ORDER_RELEASE __ATOMIC_RELEASE ++#define MY_MEMORY_ORDER_ACQ_REL __ATOMIC_ACQ_REL ++#define MY_MEMORY_ORDER_SEQ_CST __ATOMIC_SEQ_CST ++ ++#define my_atomic_store32_explicit(P, D, O) __atomic_store_n((P), (D), (O)) ++#define my_atomic_store64_explicit(P, D, O) __atomic_store_n((P), (D), (O)) ++#define my_atomic_storeptr_explicit(P, D, O) __atomic_store_n((P), (D), (O)) ++ ++#define my_atomic_load32_explicit(P, O) __atomic_load_n((P), (O)) ++#define my_atomic_load64_explicit(P, O) __atomic_load_n((P), (O)) ++#define my_atomic_loadptr_explicit(P, O) __atomic_load_n((P), (O)) ++ ++#define my_atomic_fas32_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) ++#define my_atomic_fas64_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) ++#define my_atomic_fasptr_explicit(P, D, O) __atomic_exchange_n((P), (D), (O)) ++ ++#define my_atomic_add32_explicit(P, A, O) __atomic_fetch_add((P), (A), (O)) ++#define my_atomic_add64_explicit(P, A, O) __atomic_fetch_add((P), (A), (O)) ++ ++#define my_atomic_cas32_weak_explicit(P, E, D, S, F) \ ++ __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) ++#define my_atomic_cas64_weak_explicit(P, E, D, S, F) \ ++ __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) ++#define my_atomic_casptr_weak_explicit(P, E, D, S, F) \ ++ __atomic_compare_exchange_n((P), (E), (D), true, (S), (F)) ++ ++#define my_atomic_cas32_strong_explicit(P, E, D, S, F) \ ++ __atomic_compare_exchange_n((P), (E), (D), false, (S), (F)) ++#define my_atomic_cas64_strong_explicit(P, E, D, S, F) \ ++ __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)) ++ ++#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_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) ++#else ++#define MY_ATOMIC_MODE "gcc-builtins-smp" ++#define make_atomic_load_body(S) \ ++ ret= __sync_fetch_and_or(a, 0); ++#define make_atomic_store_body(S) \ ++ (void) __sync_lock_test_and_set(a, v); + #define make_atomic_add_body(S) \ + v= __sync_fetch_and_add(a, v); + #define make_atomic_fas_body(S) \ +@@ -25,24 +91,6 @@ + int ## S cmp_val= *cmp; \ + sav= __sync_val_compare_and_swap(a, cmp_val, set);\ + if (!(ret= (sav == cmp_val))) *cmp= sav +- +-#ifdef MY_ATOMIC_MODE_DUMMY +-#define make_atomic_load_body(S) ret= *a +-#define make_atomic_store_body(S) *a= v +-#define MY_ATOMIC_MODE "gcc-builtins-up" +- +-#elif defined(HAVE_GCC_C11_ATOMICS) +-#define MY_ATOMIC_MODE "gcc-atomics-smp" +-#define make_atomic_load_body(S) \ +- ret= __atomic_load_n(a, __ATOMIC_SEQ_CST) +-#define make_atomic_store_body(S) \ +- __atomic_store_n(a, v, __ATOMIC_SEQ_CST) +-#else +-#define MY_ATOMIC_MODE "gcc-builtins-smp" +-#define make_atomic_load_body(S) \ +- ret= __sync_fetch_and_or(a, 0); +-#define make_atomic_store_body(S) \ +- (void) __sync_lock_test_and_set(a, v); + #endif + + #endif /* ATOMIC_GCC_BUILTINS_INCLUDED */ +diff -Nru mariadb-10.2.19.orig/include/my_atomic.h mariadb-10.2.19/include/my_atomic.h +--- mariadb-10.2.19.orig/include/my_atomic.h 2018-11-12 17:32:38.000000000 +0100 ++++ mariadb-10.2.19/include/my_atomic.h 2018-11-30 19:56:59.756543856 +0100 +@@ -104,7 +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. +@@ -126,18 +125,20 @@ + #include "atomic/generic-msvc.h" + #elif defined(HAVE_SOLARIS_ATOMIC) + #include "atomic/solaris.h" +-#elif defined(HAVE_GCC_ATOMIC_BUILTINS) ++#elif defined(HAVE_GCC_ATOMIC_BUILTINS) || defined(HAVE_GCC_C11_ATOMICS) + #include "atomic/gcc_builtins.h" + #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + #include "atomic/x86-gcc.h" + #endif + +- ++#ifndef HAVE_GCC_C11_ATOMICS + #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 intptr void * ++ + /* define missing functions by using the already generated ones */ + #ifndef make_atomic_add_body + #define make_atomic_add_body(S) \ +@@ -297,20 +298,6 @@ + make_atomic_store(64) + make_atomic_store(ptr) + +-#if SIZEOF_LONG == 4 +-#define my_atomic_addlong(A,B) my_atomic_add32((int32*) (A), (B)) +-#define my_atomic_loadlong(A) my_atomic_load32((int32*) (A)) +-#define my_atomic_storelong(A,B) my_atomic_store32((int32*) (A), (B)) +-#define my_atomic_faslong(A,B) my_atomic_fas32((int32*) (A), (B)) +-#define my_atomic_caslong(A,B,C) my_atomic_cas32((int32*) (A), (int32*) (B), (C)) +-#else +-#define my_atomic_addlong(A,B) my_atomic_add64((int64*) (A), (B)) +-#define my_atomic_loadlong(A) my_atomic_load64((int64*) (A)) +-#define my_atomic_storelong(A,B) my_atomic_store64((int64*) (A), (B)) +-#define my_atomic_faslong(A,B) my_atomic_fas64((int64*) (A), (B)) +-#define my_atomic_caslong(A,B,C) my_atomic_cas64((int64*) (A), (int64*) (B), (C)) +-#endif +- + #ifdef _atomic_h_cleanup_ + #include _atomic_h_cleanup_ + #undef _atomic_h_cleanup_ +@@ -345,6 +332,7 @@ + #undef make_atomic_store_body + #undef make_atomic_fas_body + #undef intptr ++#endif + + /* + the macro below defines (as an expression) the code that +@@ -355,6 +343,20 @@ + #define LF_BACKOFF (1) + #endif + ++#if SIZEOF_LONG == 4 ++#define my_atomic_addlong(A,B) my_atomic_add32((int32*) (A), (B)) ++#define my_atomic_loadlong(A) my_atomic_load32((int32*) (A)) ++#define my_atomic_storelong(A,B) my_atomic_store32((int32*) (A), (B)) ++#define my_atomic_faslong(A,B) my_atomic_fas32((int32*) (A), (B)) ++#define my_atomic_caslong(A,B,C) my_atomic_cas32((int32*) (A), (int32*) (B), (C)) ++#else ++#define my_atomic_addlong(A,B) my_atomic_add64((int64*) (A), (B)) ++#define my_atomic_loadlong(A) my_atomic_load64((int64*) (A)) ++#define my_atomic_storelong(A,B) my_atomic_store64((int64*) (A), (B)) ++#define my_atomic_faslong(A,B) my_atomic_fas64((int64*) (A), (B)) ++#define my_atomic_caslong(A,B,C) my_atomic_cas64((int64*) (A), (int64*) (B), (C)) ++#endif ++ + #define MY_ATOMIC_OK 0 + #define MY_ATOMIC_NOT_1CPU 1 + extern int my_atomic_initialize(); +diff -Nru mariadb-10.2.19.orig/libmysqld/CMakeLists.txt mariadb-10.2.19/libmysqld/CMakeLists.txt +--- mariadb-10.2.19.orig/libmysqld/CMakeLists.txt 2018-11-12 17:32:38.000000000 +0100 ++++ mariadb-10.2.19/libmysqld/CMakeLists.txt 2018-11-30 14:04:42.644814203 +0100 +@@ -137,7 +137,7 @@ + + + SET(LIBS +- dbug strings mysys mysys_ssl pcre vio ++ dbug strings mysys mysys_ssl pcre vio ${LIBATOMIC} + ${ZLIB_LIBRARY} ${SSL_LIBRARIES} + ${LIBWRAP} ${LIBCRYPT} ${LIBDL} + ${MYSQLD_STATIC_PLUGIN_LIBS} +diff -Nru mariadb-10.2.19.orig/sql/CMakeLists.txt mariadb-10.2.19/sql/CMakeLists.txt +--- mariadb-10.2.19.orig/sql/CMakeLists.txt 2018-11-12 17:32:42.000000000 +0100 ++++ mariadb-10.2.19/sql/CMakeLists.txt 2018-11-30 14:04:10.792542946 +0100 +@@ -168,7 +168,8 @@ + ${LIBWRAP} ${LIBCRYPT} ${LIBDL} ${CMAKE_THREAD_LIBS_INIT} + ${WSREP_LIB} + ${SSL_LIBRARIES} +- ${LIBSYSTEMD}) ++ ${LIBSYSTEMD} ++ ${LIBATOMIC}) + + IF(WIN32) + SET(MYSQLD_SOURCE main.cc nt_servc.cc message.rc) +diff -Nru mariadb-10.2.19.orig/storage/perfschema/unittest/CMakeLists.txt mariadb-10.2.19/storage/perfschema/unittest/CMakeLists.txt +--- mariadb-10.2.19.orig/storage/perfschema/unittest/CMakeLists.txt 2018-11-12 17:32:44.000000000 +0100 ++++ mariadb-10.2.19/storage/perfschema/unittest/CMakeLists.txt 2018-11-30 14:03:04.827981923 +0100 +@@ -29,4 +29,4 @@ + + MY_ADD_TESTS(pfs_instr_class pfs_instr_class-oom pfs_instr pfs_instr-oom + pfs_account-oom pfs_host-oom pfs_timer pfs_user-oom pfs pfs_misc +- EXT "cc" LINK_LIBRARIES perfschema mysys pfs_server_stubs) ++ EXT "cc" LINK_LIBRARIES perfschema mysys pfs_server_stubs ${LIBATOMIC}) +diff -Nru mariadb-10.2.19.orig/unittest/mysys/CMakeLists.txt mariadb-10.2.19/unittest/mysys/CMakeLists.txt +--- mariadb-10.2.19.orig/unittest/mysys/CMakeLists.txt 2018-11-12 17:32:47.000000000 +0100 ++++ mariadb-10.2.19/unittest/mysys/CMakeLists.txt 2018-11-30 19:43:56.989605864 +0100 +@@ -15,7 +15,7 @@ + + MY_ADD_TESTS(bitmap base64 my_atomic my_rdtsc lf my_malloc my_getopt dynstring + aes +- LINK_LIBRARIES mysys) ++ LINK_LIBRARIES mysys ${LIBATOMIC}) + MY_ADD_TESTS(my_vsnprintf LINK_LIBRARIES strings mysys) + + ADD_DEFINITIONS(${SSL_DEFINES}) +diff -Nru mariadb-10.2.19.orig/unittest/sql/CMakeLists.txt mariadb-10.2.19/unittest/sql/CMakeLists.txt +--- mariadb-10.2.19.orig/unittest/sql/CMakeLists.txt 2018-11-12 17:32:47.000000000 +0100 ++++ mariadb-10.2.19/unittest/sql/CMakeLists.txt 2018-11-30 14:03:38.452267771 +0100 +@@ -27,7 +27,7 @@ + ADD_EXECUTABLE(explain_filename-t explain_filename-t.cc) + ENDIF() + +-TARGET_LINK_LIBRARIES(explain_filename-t sql mytap) ++TARGET_LINK_LIBRARIES(explain_filename-t sql mytap ${LIBATOMIC}) + MY_ADD_TEST(explain_filename) + + ADD_EXECUTABLE(mf_iocache-t mf_iocache-t.cc ../../sql/mf_iocache_encr.cc) diff --git a/mariadb.changes b/mariadb.changes index 3435e9b..87b63bb 100644 --- a/mariadb.changes +++ b/mariadb.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Sat Dec 1 09:44:46 UTC 2018 - John Paul Adrian Glaubitz + +- Add patch to link against libatomic where necessary and + use C++11 atomics instead of gcc built-in atomics + * mariadb-10.2.19-link-and-enable-c++11-atomics.patch +- Add two tests to suse_skipped_tests.list for ppc + * encryption.innodb-bad-key-change2 + * encryption.innodb-bad-key-change4 + ------------------------------------------------------------------- Wed Nov 14 09:42:24 UTC 2018 - kstreitova@suse.com diff --git a/mariadb.spec b/mariadb.spec index fe1c0ca..2704eec 100644 --- a/mariadb.spec +++ b/mariadb.spec @@ -75,6 +75,7 @@ Patch4: mariadb-5.2.3-cnf.patch Patch6: mariadb-10.1.12-deharcode-libdir.patch Patch7: mariadb-10.0.15-logrotate-su.patch Patch8: mariadb-10.2.4-fortify-and-O.patch +Patch9: mariadb-10.2.19-link-and-enable-c++11-atomics.patch Patch11: mariadb-10.2.9-galera_cnf.patch BuildRequires: bison BuildRequires: cmake @@ -330,6 +331,7 @@ find . -name "*.jar" -type f -exec rm --verbose -f {} \; %patch6 -p0 %patch7 -p0 %patch8 -p0 +%patch9 -p1 %patch11 -p1 cp %{_sourcedir}/suse-test-run . diff --git a/suse_skipped_tests.list b/suse_skipped_tests.list index f887440..5161c71 100644 --- a/suse_skipped_tests.list +++ b/suse_skipped_tests.list @@ -50,6 +50,8 @@ sys_vars.sysvars_server_notembedded : s390 sys_vars.sysvars_wsrep : s390 encryption.innodb_encryption : ppc64le, i586 encryption.innodb-redo-badkey : x86_64, i586, aarch64 +encryption.innodb-bad-key-change2 : ppc +encryption.innodb-bad-key-change4 : ppc innodb.temporary_table_optimization : ppc64le main.derived_cond_pushdown : ppc64le main.mdev-504 : aarch64