Source: mysql-8.0 Version: 8.0.23-3 Severity: normal Tags: patch Dear Maintainer,
Currently, the build fails with the following error: cd /<<PKGBUILDDIR>>/builddir/storage/innobase && /usr/bin/hppa-linux-gnu-g++ -DBOOST_GEOMETRY_SQRT_CHECK_FINITENESS -DCOMPILER_HINTS -DHAVE_CONFIG_H -DHAVE_FALLOC_FL_ZERO_RANGE=1 -DHAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE=1 -DHAVE_IB_GCC_ATOMIC_THREAD_FENCE=1 -DHAVE_IB_GCC_SYNC_SYNCHRONISE=1 -DHAVE_IB_LINUX_FUTEX=1 -DHAVE_LZ4=1 -DHAVE_NANOSLEEP=1 -DHAVE_SCHED_GETCPU=1 -DHAVE_TLSv13 -DLINUX_NATIVE_AIO=1 -DLOG_SUBSYSTEM_TAG=\"InnoDB\" -DLZ4_DISABLE_DEPRECATE_WARNINGS -DMUTEX_EVENT -DMYSQL_SERVER -DPFS_DIRECT_CALL -DRAPIDJSON_NO_SIZETYPEDEFINE -DRAPIDJSON_SCHEMA_USE_INTERNALREGEX=0 -DRAPIDJSON_SCHEMA_USE_STDREGEX=1 -DUNIV_LINUX -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D_USE_MATH_DEFINES -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/<<PKGBUILDDIR>>/builddir -I/<<PKGBUILDDIR>>/builddir/include -I/<<PKGBUILDDIR>> -I/<<PKGBUILDDIR>>/include -I/<<PKGBUILDDIR>>/storage/innobase -I/<<PKGBUILDDIR>>/storage/innobase/include -I/<<PKGBUILDDIR>>/storage/innobase/handler -I/<<PKGBUILDDIR>>/sql -I/<<PKGBUILDDIR>>/sql/auth -isystem /<<PKGBUILDDIR>>/extra/rapidjson/include -isystem /usr/include/editline -std=c++14 -fno-omit-frame-pointer -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -Wformat -Werror=format-security -Wall -Wextra -Wformat-security -Wvla -Wundef -Woverloaded-virtual -Wcast-qual -Wimplicit-fallthrough=2 -Wstringop-truncation -Wsuggest-override -Wlogical-op -Wno-unused-parameter -Wno-cast-qual -DDBUG_OFF -ffunction-sections -fdata-sections -O2 -g -DNDEBUG -fPIC -Wdate-time -D_FORTIFY_SOURCE=2 -o CMakeFiles/innobase.dir/api/api0api.cc.o -c /<<PKGBUILDDIR>>/storage/innobase/api/api0api.cc In file included from /<<PKGBUILDDIR>>/storage/innobase/include/sync0types.h:42, from /<<PKGBUILDDIR>>/storage/innobase/include/univ.i:588, from /<<PKGBUILDDIR>>/storage/innobase/os/file.h:47, from /<<PKGBUILDDIR>>/storage/innobase/include/os0file.h:47, from /<<PKGBUILDDIR>>/storage/innobase/include/api0misc.h:40, from /<<PKGBUILDDIR>>/storage/innobase/api/api0api.cc:41: /<<PKGBUILDDIR>>/storage/innobase/include/ut0new.h: In instantiation of ‘class ut_allocator<PolicyMutex<OSTrackMutex<GenericPolicy> > >’: /<<PKGBUILDDIR>>/storage/innobase/include/ut0new.h:1033:19: required from ‘void ut_delete(T*) [with T = PolicyMutex<OSTrackMutex<GenericPolicy> >]’ /<<PKGBUILDDIR>>/storage/innobase/include/dict0mem.h:2568:5: required from here /<<PKGBUILDDIR>>/storage/innobase/include/ut0new.h:583:28: error: static assertion failed: ut_allocator does not support over-aligned types. Use aligned_memory or another similar allocator for this type. 583 | static_assert(alignof(T) <= alignof(std::max_align_t), | ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ make[4]: *** [storage/innobase/CMakeFiles/innobase.dir/build.make:85: storage/innobase/CMakeFiles/innobase.dir/api/api0api.cc.o] Error 1 See: https://buildd.debian.org/status/fetch.php?pkg=mysql-8.0&arch=hppa&ver=8.0.23-3&stamp=1613526368&raw=0 This issue on hppa is the alignment for the pthread mutex is 16 bytes. This exceeds the alignment required for all standard types. This occurred because the PA 1.x ldcw semaphore instruction requires the semaphore be 16 byte aligned. The attached patch which was a quick hack works around this issue and allows mysql-8.0 to build successfully on hppa. Please install and send upstream if it is a sutable fix. Regards, Dave Anglin -- System Information: Debian Release: bullseye/sid APT prefers buildd-unstable APT policy: (500, 'buildd-unstable'), (500, 'unstable') Architecture: hppa (parisc64) Kernel: Linux 5.10.16+ (SMP w/4 CPU threads) Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system)
Index: mysql-8.0-8.0.23/storage/innobase/include/ut0new.h =================================================================== --- mysql-8.0-8.0.23.orig/storage/innobase/include/ut0new.h +++ mysql-8.0-8.0.23/storage/innobase/include/ut0new.h @@ -537,7 +537,11 @@ are contiguous in memory. This means tha ut_new_pfx_t the resulting pointer must be aligned to the alignment requirement of std::max_align_t. Ref. C++ standard: 6.6.5 [basic.align], 11.3.4 [dcl.array] */ +#if defined(__hppa__) && defined(__linux__) +struct alignas(16) ut_new_pfx_t { +#else struct alignas(std::max_align_t) ut_new_pfx_t { +#endif #ifdef UNIV_PFS_MEMORY /** Performance schema key. Assigned to a name at startup via @@ -580,9 +584,15 @@ class ut_allocator { typedef size_t size_type; typedef ptrdiff_t difference_type; +#if defined(__hppa__) && defined(__linux__) + static_assert(alignof(T) <= 16, + "ut_allocator does not support over-aligned types. Use " + "aligned_memory or another similar allocator for this type."); +#else static_assert(alignof(T) <= alignof(std::max_align_t), "ut_allocator does not support over-aligned types. Use " "aligned_memory or another similar allocator for this type."); +#endif /** Default constructor. @param[in] key performance schema key. */ explicit ut_allocator(PSI_memory_key key = PSI_NOT_INSTRUMENTED)