From 9c6f72021d234f78b3071c2b2508b5edcea8e42e Mon Sep 17 00:00:00 2001 From: Alan Somers Date: Wed, 17 Sep 2025 17:31:27 -0600 Subject: [PATCH] Fix atomic-alignment warnings in libspl on FreeBSD/i386 On i386, Clang complains about misaligned atomic operations. Silence these warnings to fix the build on FreeBSD/i386. Reviewed-by: Brian Behlendorf Signed-off-by: Alan Somers Sponsored by: ConnectWise Closes #17708 --- config/always-arch.m4 | 1 + config/always-compiler-options.m4 | 21 +++++++++++++++++++++ config/zfs-build.m4 | 1 + lib/libspl/Makefile.am | 3 +++ 4 files changed, 26 insertions(+) diff --git a/config/always-arch.m4 b/config/always-arch.m4 index 1ee6099ca..d73b87891 100644 --- a/config/always-arch.m4 +++ b/config/always-arch.m4 @@ -34,6 +34,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_ARCH], [ esac AM_CONDITIONAL([TARGET_CPU_AARCH64], test $TARGET_CPU = aarch64) + AM_CONDITIONAL([TARGET_CPU_I386], test $TARGET_CPU = i386) AM_CONDITIONAL([TARGET_CPU_X86_64], test $TARGET_CPU = x86_64) AM_CONDITIONAL([TARGET_CPU_POWERPC], test $TARGET_CPU = powerpc) AM_CONDITIONAL([TARGET_CPU_SPARC64], test $TARGET_CPU = sparc64) diff --git a/config/always-compiler-options.m4 b/config/always-compiler-options.m4 index 37fa079e0..0e96435e3 100644 --- a/config/always-compiler-options.m4 +++ b/config/always-compiler-options.m4 @@ -209,6 +209,27 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED], [ AC_SUBST([NO_CLOBBERED]) ]) +dnl # +dnl # Check if cc supports -Wno-atomic-alignment option. +dnl # +AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_ATOMIC_ALIGNMENT], [ + AC_MSG_CHECKING([whether $CC supports -Wno-atomic-alignment]) + + saved_flags="$CFLAGS" + CFLAGS="$CFLAGS -Werror -Wno-atomic-alignment" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ + NO_ATOMIC_ALIGNMENT=-Wno-atomic-alignment + AC_MSG_RESULT([yes]) + ], [ + NO_ATOMIC_ALIGNMENT= + AC_MSG_RESULT([no]) + ]) + + CFLAGS="$saved_flags" + AC_SUBST([NO_ATOMIC_ALIGNMENT]) +]) + dnl # dnl # Check if cc supports -Wimplicit-fallthrough option. dnl # diff --git a/config/zfs-build.m4 b/config/zfs-build.m4 index adf6576f3..161d39046 100644 --- a/config/zfs-build.m4 +++ b/config/zfs-build.m4 @@ -252,6 +252,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION + ZFS_AC_CONFIG_ALWAYS_CC_NO_ATOMIC_ALIGNMENT ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index 6640ecd58..0fd907d30 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -2,6 +2,9 @@ include $(srcdir)/%D%/include/Makefile.am libspl_assert_la_CFLAGS = $(AM_CFLAGS) $(LIBRARY_CFLAGS) $(LIBUNWIND_CFLAGS) libspl_la_CFLAGS = $(libspl_assert_la_CFLAGS) +if TARGET_CPU_I386 +libspl_la_CFLAGS += $(NO_ATOMIC_ALIGNMENT) +endif noinst_LTLIBRARIES += libspl_assert.la libspl.la CPPCHECKTARGETS += libspl_assert.la libspl.la