[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