mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Fix Clang 15 compilation errors
- Clang 15 doesn't support `-fno-ipa-sra` anymore. Do a separate check for `-fno-ipa-sra` support by $KERNEL_CC. - Don't enable `-mgeneral-regs-only` for certain module files. Fix #13260 - Scope `GCC diagnostic ignored` statements to GCC only. Clang doesn't need them to compile the code. Porting notes: - Moved the stanzas removing -mgeneral-regs-only to Makefile.in since they wouldn't readily work in Kbuild.in and that did. Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: szubersk <szuberskidamian@gmail.com> Closes #13260 Closes #14150 Closes #14624 Ported-by: Rich Ercolani <rincebrain@gmail.com Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
This commit is contained in:
		
							parent
							
								
									1322f07ade
								
							
						
					
					
						commit
						dbbc2f9688
					
				| @ -221,3 +221,34 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA], [ | ||||
| 	CFLAGS="$saved_flags" | ||||
| 	AC_SUBST([NO_IPA_SRA]) | ||||
| ]) | ||||
| 
 | ||||
| dnl # | ||||
| dnl # Check if kernel cc supports -fno-ipa-sra option. | ||||
| dnl # | ||||
| AC_DEFUN([ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA], [ | ||||
| 	AC_MSG_CHECKING([whether $KERNEL_CC supports -fno-ipa-sra]) | ||||
| 
 | ||||
| 	saved_cc="$CC" | ||||
| 	saved_flags="$CFLAGS" | ||||
| 	CC="gcc" | ||||
| 	CFLAGS="$CFLAGS -Werror -fno-ipa-sra" | ||||
| 
 | ||||
| 	AS_IF([ test -n "$KERNEL_CC" ], [ | ||||
| 		CC="$KERNEL_CC" | ||||
| 	]) | ||||
| 	AS_IF([ test -n "$KERNEL_LLVM" ], [ | ||||
| 		CC="clang" | ||||
| 	]) | ||||
| 
 | ||||
| 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ | ||||
| 		KERNEL_NO_IPA_SRA=-fno-ipa-sra | ||||
| 		AC_MSG_RESULT([yes]) | ||||
| 	], [ | ||||
| 		KERNEL_NO_IPA_SRA= | ||||
| 		AC_MSG_RESULT([no]) | ||||
| 	]) | ||||
| 
 | ||||
| 	CC="$saved_cc" | ||||
| 	CFLAGS="$saved_flags" | ||||
| 	AC_SUBST([KERNEL_NO_IPA_SRA]) | ||||
| ]) | ||||
|  | ||||
| @ -81,7 +81,7 @@ AC_DEFUN([ZFS_AC_DEBUG], [ | ||||
| AC_DEFUN([ZFS_AC_DEBUGINFO_ENABLE], [ | ||||
| 	DEBUG_CFLAGS="$DEBUG_CFLAGS -g -fno-inline $NO_IPA_SRA" | ||||
| 
 | ||||
| 	KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline $NO_IPA_SRA" | ||||
| 	KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline $KERNEL_NO_IPA_SRA" | ||||
| 	KERNEL_MAKE="$KERNEL_MAKE CONFIG_DEBUG_INFO=y" | ||||
| 
 | ||||
| 	DEBUGINFO_ZFS="_with_debuginfo" | ||||
| @ -217,6 +217,7 @@ AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [ | ||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH | ||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER | ||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA | ||||
| 	ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA | ||||
| 	ZFS_AC_CONFIG_ALWAYS_CC_ASAN | ||||
| 	ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD | ||||
| 	ZFS_AC_CONFIG_ALWAYS_SYSTEM | ||||
|  | ||||
| @ -44,4 +44,5 @@ endif | ||||
| subdir-asflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) | ||||
| subdir-ccflags-y := $(ZFS_MODULE_CFLAGS) $(ZFS_MODULE_CPPFLAGS) | ||||
| 
 | ||||
| 
 | ||||
| endif | ||||
|  | ||||
| @ -343,9 +343,11 @@ Q256(size_t bitlen, const uint32_t *data, uint32_t *restrict p) | ||||
|  * which only goes over it by a hair (1248 bytes on ARM32). | ||||
|  */ | ||||
| #include <sys/isa_defs.h>	/* for _ILP32 */ | ||||
| #ifdef _ILP32   /* We're 32-bit, assume small stack frames */ | ||||
| #if defined(_ILP32)   /* We're 32-bit, assume small stack frames */ | ||||
| #if defined(__GNUC__) && !defined(__clang__) | ||||
| #pragma GCC diagnostic ignored "-Wframe-larger-than=" | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| #if defined(__IBMC__) && defined(_AIX) && defined(__64BIT__) | ||||
| static inline size_t | ||||
|  | ||||
| @ -30,7 +30,9 @@ | ||||
|  * the #pragma here to ignore the warning. | ||||
|  */ | ||||
| #if defined(_ILP32) || defined(__powerpc)	/* Assume small stack */ | ||||
| #if defined(__GNUC__) && !defined(__clang__) | ||||
| #pragma GCC diagnostic ignored "-Wframe-larger-than=" | ||||
| #endif | ||||
| /*
 | ||||
|  * We're running on 32-bit, don't unroll loops to save stack frame space | ||||
|  * | ||||
|  | ||||
| @ -197,7 +197,8 @@ l_noret luaD_throw (lua_State *L, int errcode) { | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| #if defined(HAVE_INFINITE_RECURSION) | ||||
| #if defined(__GNUC__) && !defined(__clang__) && \ | ||||
| 	defined(HAVE_INFINITE_RECURSION) | ||||
| #pragma GCC diagnostic pop | ||||
| #endif | ||||
| 
 | ||||
|  | ||||
| @ -225,8 +225,10 @@ __div_u64(uint64_t u, uint32_t v) | ||||
|  * replacements for libgcc-provided functions and will never be called | ||||
|  * directly. | ||||
|  */ | ||||
| #if defined(__GNUC__) && !defined(__clang__) | ||||
| #pragma GCC diagnostic push | ||||
| #pragma GCC diagnostic ignored "-Wmissing-prototypes" | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * Implementation of 64-bit unsigned division for 32-bit machines. | ||||
| @ -425,7 +427,9 @@ __aeabi_ldivmod(int64_t u, int64_t v) | ||||
| EXPORT_SYMBOL(__aeabi_ldivmod); | ||||
| #endif /* __arm || __arm__ */ | ||||
| 
 | ||||
| #if defined(__GNUC__) && !defined(__clang__) | ||||
| #pragma GCC diagnostic pop | ||||
| #endif | ||||
| 
 | ||||
| #endif /* BITS_PER_LONG */ | ||||
| 
 | ||||
|  | ||||
| @ -26,3 +26,7 @@ $(MODULE)-$(CONFIG_X86) += zfs_fletcher_intel.o | ||||
| $(MODULE)-$(CONFIG_X86) += zfs_fletcher_sse.o | ||||
| $(MODULE)-$(CONFIG_X86) += zfs_fletcher_avx512.o | ||||
| $(MODULE)-$(CONFIG_ARM64) += zfs_fletcher_aarch64_neon.o | ||||
| 
 | ||||
| ifeq ($(CONFIG_ARM64),y) | ||||
| CFLAGS_REMOVE_zfs_fletcher_aarch64_neon.o += -mgeneral-regs-only | ||||
| endif | ||||
|  | ||||
| @ -154,4 +154,9 @@ ifeq ($(CONFIG_ALTIVEC),y) | ||||
| $(obj)/vdev_raidz_math_powerpc_altivec.o: c_flags += -maltivec | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(CONFIG_ARM64),y) | ||||
| CFLAGS_REMOVE_vdev_raidz_math_aarch64_neon.o += -mgeneral-regs-only | ||||
| CFLAGS_REMOVE_vdev_raidz_math_aarch64_neonx2.o += -mgeneral-regs-only | ||||
| endif | ||||
| 
 | ||||
| include $(mfdir)/../os/linux/zfs/Makefile | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 szubersk
						szubersk