[debian-mysql] Bug#982999: mysql-8.0: FTBFS on hppa - ut_allocator does not support over-aligned types
John David Anglin
dave.anglin at bell.net
Thu Feb 18 00:32:56 GMT 2021
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)
-------------- next part --------------
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)
More information about the pkg-mysql-maint
mailing list