[Maria-developers] The compile errors on Linux on Power
Hi everyone, Recently I want to test MariaDB 10.1.9 on Linux on Power8. *But GCC will report following errors:* [ 52%] Building CXX object
storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/ut0ut.h:36, from /root/mariadb-10.1.9/storage/innobase/include/univ.i:636, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:27: /root/mariadb-10.1.9/storage/innobase/include/os0sync.h:521:4: error: #error "Unsupported platform" [ 52%] Building CXX object storage/archive/CMakeFiles/archive.dir/ha_archive.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/sync0sync.h:837, from /root/mariadb-10.1.9/storage/innobase/include/mem0mem.h:34, from /root/mariadb-10.1.9/storage/innobase/include/data0data.h:33, from /root/mariadb-10.1.9/storage/innobase/include/que0que.h:30, from /root/mariadb-10.1.9/storage/innobase/include/api0misc.h:32, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:38: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘lock_word_t ib_mutex_test_and_set(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:85: error: ‘os_atomic_test_and_set’ was not declared in this scope /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘void mutex_reset_lock_word(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:113: error: ‘os_atomic_clear’ was not declared in this scope make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o] Error 1 make[1]: *** [storage/innobase/CMakeFiles/innobase.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs....
I found the problem is: *storage/innobase/include/sync0sync.ic*
ib_mutex_test_and_set( /*==================*/ ib_mutex_t* mutex) /*!< in: mutex */ { #if defined(HAVE_ATOMIC_BUILTINS) return(os_atomic_test_and_set(&mutex->lock_word)); #else
*storage/innobase/include/os0sync.h*
#if defined(__powerpc__) || defined(__aarch64__) /* os_atomic_test_and_set_byte_release() should imply a release barrier before setting, and a full barrier after. But __sync_lock_test_and_set() is only documented as an aquire barrier. So on PowerPC we need to add the full barrier explicitly. */ # define os_atomic_test_and_set_byte_release(ptr, new_val) \ do { __sync_lock_release(ptr); \ __sync_synchronize(); } while (0) #else
Only HAVE_IB_GCC_ATOMIC_TEST_AND_SET or IB_STRONG_MEMORY_MODEL will enable codes about os_atomic_test_and_set() and os_atomic_clear(). But on my Power8 environment, HAVE_ATOMIC_BUILTINS is defined, HAVE_IB_GCC_ATOMIC_TEST_AND_SET and IB_STRONG_MEMORY_MODEL are not defined. So in sync0sync.ic, os_atomic_test_and_set() is used, but in os0sync.h, os_atomic_test_and_set() is not defined. Does anybody know how to solve this problem? I'm not familiar with Power. Thanks, Lixun -- Staff Database Engineer @ Alibaba Cloud Computing Oracle ACE for MySQL Phone: +86 18658156856 (Hangzhou) Blog: http://www.penglixun.com
Hi Lixun, you likely have quite outdated compiler on that host. Anyway, there is a patch for similar issue on IBM Z, which should solve this problem: http://lists.askmonty.org/pipermail/commits/2015-November/008648.html Regards, Segrey On Tue, Dec 01, 2015 at 09:14:55PM +0800, Lixun Peng wrote:
Hi everyone,
Recently I want to test MariaDB 10.1.9 on Linux on Power8.
*But GCC will report following errors:*
[ 52%] Building CXX object
storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/ut0ut.h:36, from /root/mariadb-10.1.9/storage/innobase/include/univ.i:636, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:27: /root/mariadb-10.1.9/storage/innobase/include/os0sync.h:521:4: error: #error "Unsupported platform" [ 52%] Building CXX object storage/archive/CMakeFiles/archive.dir/ha_archive.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/sync0sync.h:837, from /root/mariadb-10.1.9/storage/innobase/include/mem0mem.h:34, from /root/mariadb-10.1.9/storage/innobase/include/data0data.h:33, from /root/mariadb-10.1.9/storage/innobase/include/que0que.h:30, from /root/mariadb-10.1.9/storage/innobase/include/api0misc.h:32, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:38: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘lock_word_t ib_mutex_test_and_set(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:85: error: ‘os_atomic_test_and_set’ was not declared in this scope /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘void mutex_reset_lock_word(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:113: error: ‘os_atomic_clear’ was not declared in this scope make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o] Error 1 make[1]: *** [storage/innobase/CMakeFiles/innobase.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs....
I found the problem is:
*storage/innobase/include/sync0sync.ic*
ib_mutex_test_and_set( /*==================*/ ib_mutex_t* mutex) /*!< in: mutex */ { #if defined(HAVE_ATOMIC_BUILTINS) return(os_atomic_test_and_set(&mutex->lock_word)); #else
*storage/innobase/include/os0sync.h*
#if defined(__powerpc__) || defined(__aarch64__) /* os_atomic_test_and_set_byte_release() should imply a release barrier before setting, and a full barrier after. But __sync_lock_test_and_set() is only documented as an aquire barrier. So on PowerPC we need to add the full barrier explicitly. */ # define os_atomic_test_and_set_byte_release(ptr, new_val) \ do { __sync_lock_release(ptr); \ __sync_synchronize(); } while (0) #else
Only HAVE_IB_GCC_ATOMIC_TEST_AND_SET or IB_STRONG_MEMORY_MODEL will enable codes about os_atomic_test_and_set() and os_atomic_clear().
But on my Power8 environment, HAVE_ATOMIC_BUILTINS is defined, HAVE_IB_GCC_ATOMIC_TEST_AND_SET and IB_STRONG_MEMORY_MODEL are not defined.
So in sync0sync.ic, os_atomic_test_and_set() is used, but in os0sync.h, os_atomic_test_and_set() is not defined.
Does anybody know how to solve this problem? I'm not familiar with Power.
Thanks, Lixun
-- Staff Database Engineer @ Alibaba Cloud Computing Oracle ACE for MySQL Phone: +86 18658156856 (Hangzhou) Blog: http://www.penglixun.com
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp
Hi Segrey, Thank you very much! It works! Thanks, Lixun 2015-12-01 21:29 GMT+08:00 Sergey Vojtovich <svoj@mariadb.org>:
Hi Lixun,
you likely have quite outdated compiler on that host. Anyway, there is a patch for similar issue on IBM Z, which should solve this problem: http://lists.askmonty.org/pipermail/commits/2015-November/008648.html
Regards, Segrey
On Tue, Dec 01, 2015 at 09:14:55PM +0800, Lixun Peng wrote:
Hi everyone,
Recently I want to test MariaDB 10.1.9 on Linux on Power8.
*But GCC will report following errors:*
[ 52%] Building CXX object
storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/ut0ut.h:36, from /root/mariadb-10.1.9/storage/innobase/include/univ.i:636, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:27: /root/mariadb-10.1.9/storage/innobase/include/os0sync.h:521:4: error: #error "Unsupported platform" [ 52%] Building CXX object storage/archive/CMakeFiles/archive.dir/ha_archive.cc.o In file included from /root/mariadb-10.1.9/storage/innobase/include/sync0sync.h:837, from /root/mariadb-10.1.9/storage/innobase/include/mem0mem.h:34, from /root/mariadb-10.1.9/storage/innobase/include/data0data.h:33, from /root/mariadb-10.1.9/storage/innobase/include/que0que.h:30, from /root/mariadb-10.1.9/storage/innobase/include/api0misc.h:32, from /root/mariadb-10.1.9/storage/innobase/api/api0api.cc:38: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘lock_word_t ib_mutex_test_and_set(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:85: error: ‘os_atomic_test_and_set’ was not declared in this scope /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic: In function ‘void mutex_reset_lock_word(ib_mutex_t*)’: /root/mariadb-10.1.9/storage/innobase/include/sync0sync.ic:113: error: ‘os_atomic_clear’ was not declared in this scope make[2]: *** [storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o] Error 1 make[1]: *** [storage/innobase/CMakeFiles/innobase.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs....
I found the problem is:
*storage/innobase/include/sync0sync.ic*
ib_mutex_test_and_set( /*==================*/ ib_mutex_t* mutex) /*!< in: mutex */ { #if defined(HAVE_ATOMIC_BUILTINS) return(os_atomic_test_and_set(&mutex->lock_word)); #else
*storage/innobase/include/os0sync.h*
#if defined(__powerpc__) || defined(__aarch64__) /* os_atomic_test_and_set_byte_release() should imply a release barrier before setting, and a full barrier after. But __sync_lock_test_and_set() is only documented as an aquire barrier. So on PowerPC we need to add the full barrier explicitly. */ # define os_atomic_test_and_set_byte_release(ptr, new_val) \ do { __sync_lock_release(ptr); \ __sync_synchronize(); } while (0) #else
Only HAVE_IB_GCC_ATOMIC_TEST_AND_SET or IB_STRONG_MEMORY_MODEL will enable codes about os_atomic_test_and_set() and os_atomic_clear().
But on my Power8 environment, HAVE_ATOMIC_BUILTINS is defined, HAVE_IB_GCC_ATOMIC_TEST_AND_SET and IB_STRONG_MEMORY_MODEL are not defined.
So in sync0sync.ic, os_atomic_test_and_set() is used, but in os0sync.h, os_atomic_test_and_set() is not defined.
Does anybody know how to solve this problem? I'm not familiar with Power.
Thanks, Lixun
-- Staff Database Engineer @ Alibaba Cloud Computing Oracle ACE for MySQL Phone: +86 18658156856 (Hangzhou) Blog: http://www.penglixun.com
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp
-- Staff Database Engineer @ Alibaba Cloud Computing Oracle ACE for MySQL Phone: +86 18658156856 (Hangzhou) Blog: http://www.penglixun.com
participants (2)
-
Lixun Peng
-
Sergey Vojtovich