From 5678d3f59389a241c8d9c032513c38209bb53e70 Mon Sep 17 00:00:00 2001 From: Matthew Macy Date: Tue, 28 Jul 2020 13:02:49 -0700 Subject: [PATCH] Prefix zfs internal endian checks with _ZFS FreeBSD defines _BIG_ENDIAN BIG_ENDIAN _LITTLE_ENDIAN LITTLE_ENDIAN on every architecture. Trying to do cross builds whilst hiding this from ZFS has proven extremely cumbersome. Reviewed-by: Ryan Moeller Reviewed-by: Brian Behlendorf Signed-off-by: Matt Macy Closes #10621 --- config/Rules.am | 1 - include/os/freebsd/spl/sys/Makefile.am | 1 - include/os/freebsd/spl/sys/byteorder.h | 4 +- include/os/freebsd/spl/sys/endian.h | 42 ------ include/os/freebsd/spl/sys/isa_defs.h | 9 ++ include/os/linux/spl/sys/byteorder.h | 11 +- include/os/linux/spl/sys/isa_defs.h | 30 ++--- include/sys/spa.h | 2 +- lib/libspl/include/os/freebsd/sys/byteorder.h | 127 +----------------- .../include/os/freebsd/sys/zfs_context_os.h | 4 - lib/libspl/include/os/linux/sys/byteorder.h | 14 +- lib/libspl/include/sys/isa_defs.h | 50 ++++--- module/Makefile.bsd | 2 +- module/icp/algs/aes/aes_impl_generic.c | 2 +- module/icp/algs/edonr/edonr_byteorder.h | 4 +- module/icp/algs/modes/ccm.c | 10 +- module/icp/algs/sha1/sha1.c | 6 +- module/icp/algs/sha2/sha2.c | 4 +- module/icp/algs/skein/skein_port.h | 2 +- module/nvpair/nvpair.c | 8 +- module/unicode/uconv.c | 2 +- module/zfs/lz4.c | 2 +- module/zfs/vdev_raidz_math_powerpc_altivec.c | 2 +- 23 files changed, 99 insertions(+), 240 deletions(-) delete mode 100644 include/os/freebsd/spl/sys/endian.h diff --git a/config/Rules.am b/config/Rules.am index c6dce34b03..b02511a052 100644 --- a/config/Rules.am +++ b/config/Rules.am @@ -32,7 +32,6 @@ if BUILD_FREEBSD AM_CFLAGS += -fPIC -Werror -Wno-unknown-pragmas -Wno-enum-conversion AM_CFLAGS += -include $(top_srcdir)/include/os/freebsd/spl/sys/ccompile.h AM_CFLAGS += -I/usr/include -I/usr/local/include -AM_CFLAGS += -D_MACHINE_ENDIAN_H_ endif AM_CPPFLAGS = -D_GNU_SOURCE diff --git a/include/os/freebsd/spl/sys/Makefile.am b/include/os/freebsd/spl/sys/Makefile.am index 7803d1af30..7d82e2d6d4 100644 --- a/include/os/freebsd/spl/sys/Makefile.am +++ b/include/os/freebsd/spl/sys/Makefile.am @@ -14,7 +14,6 @@ KERNEL_H = \ dirent.h \ disp.h \ dkio.h \ - endian.h \ extdirent.h \ file.h \ freebsd_rwlock.h \ diff --git a/include/os/freebsd/spl/sys/byteorder.h b/include/os/freebsd/spl/sys/byteorder.h index 79ae848c72..fd6b0269d8 100644 --- a/include/os/freebsd/spl/sys/byteorder.h +++ b/include/os/freebsd/spl/sys/byteorder.h @@ -60,7 +60,7 @@ /* * Macros to convert from a specific byte order to/from native byte order */ -#if BYTE_ORDER == BIG_ENDIAN +#if BYTE_ORDER == _BIG_ENDIAN #define BE_8(x) BMASK_8(x) #define BE_16(x) BMASK_16(x) #define BE_32(x) BMASK_32(x) @@ -80,7 +80,7 @@ #define BE_64(x) BSWAP_64(x) #endif -#if BYTE_ORDER == BIG_ENDIAN +#if BYTE_ORDER == _BIG_ENDIAN #define htonll(x) BMASK_64(x) #define ntohll(x) BMASK_64(x) #else diff --git a/include/os/freebsd/spl/sys/endian.h b/include/os/freebsd/spl/sys/endian.h deleted file mode 100644 index 4de4b8829c..0000000000 --- a/include/os/freebsd/spl/sys/endian.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2020 iXsystems, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - - -#ifndef _SPL_SYS_ENDIAN_H_ -#define _SPL_SYS_ENDIAN_H_ - -#undef _MACHINE_ENDIAN_H_ -#include_next - -#if BYTE_ORDER == LITTLE_ENDIAN -#undef _BIG_ENDIAN -#undef BIG_ENDIAN -#define BIG_ENDIAN 4321 -#endif - -#endif /* _SPL_SYS_ENDIAN_H_ */ diff --git a/include/os/freebsd/spl/sys/isa_defs.h b/include/os/freebsd/spl/sys/isa_defs.h index 863c2447fe..399d510b5f 100644 --- a/include/os/freebsd/spl/sys/isa_defs.h +++ b/include/os/freebsd/spl/sys/isa_defs.h @@ -27,6 +27,7 @@ #ifndef _SYS_ISA_DEFS_H #define _SYS_ISA_DEFS_H +#include /* * This header file serves to group a set of well known defines and to @@ -696,6 +697,14 @@ extern "C" { #error "Both _ILP32 and _LP64 are defined" #endif +#if BYTE_ORDER == _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN +#elif BYTE_ORDER == _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN +#else +#error "unknown byte order" +#endif + #ifdef __cplusplus } #endif diff --git a/include/os/linux/spl/sys/byteorder.h b/include/os/linux/spl/sys/byteorder.h index 4777079961..70847edbc8 100644 --- a/include/os/linux/spl/sys/byteorder.h +++ b/include/os/linux/spl/sys/byteorder.h @@ -26,6 +26,15 @@ #define _SPL_BYTEORDER_H #include + +#if defined(__BIG_ENDIAN) && !defined(_ZFS_BIG_ENDIAN) +#define _ZFS_BIG_ENDIAN +#endif + +#if defined(__LITTLE_ENDIAN) && !defined(_ZFS_LITTLE_ENDIAN) +#define _ZFS_LITTLE_ENDIAN +#endif + #include #define BSWAP_8(x) ((x) & 0xff) @@ -49,7 +58,7 @@ #define BE_IN32(xa) \ (((uint32_t)BE_IN16(xa) << 16) | BE_IN16((uint8_t *)(xa)+2)) -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN static __inline__ uint64_t htonll(uint64_t n) { diff --git a/include/os/linux/spl/sys/isa_defs.h b/include/os/linux/spl/sys/isa_defs.h index c19943b852..af064e567e 100644 --- a/include/os/linux/spl/sys/isa_defs.h +++ b/include/os/linux/spl/sys/isa_defs.h @@ -117,9 +117,9 @@ #endif #if defined(__ARMEL__) || defined(__AARCH64EL__) -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #else -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #endif /* @@ -149,7 +149,7 @@ #endif #endif -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 #define _ALIGNMENT_REQUIRED 1 @@ -165,7 +165,7 @@ #endif #endif -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN /* * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1 @@ -177,9 +177,9 @@ #elif defined(__mips__) #if defined(__MIPSEB__) -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #elif defined(__MIPSEL__) -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #else #error MIPS no endian specified #endif @@ -211,7 +211,7 @@ #define __rv64g__ #endif -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #define _SUNOS_VTOC_16 @@ -243,20 +243,12 @@ #define HAVE_EFFICIENT_UNALIGNED_ACCESS #endif -#if defined(__LITTLE_ENDIAN) && !defined(_LITTLE_ENDIAN) -#define _LITTLE_ENDIAN __LITTLE_ENDIAN +#if defined(_ZFS_LITTLE_ENDIAN) && defined(_ZFS_BIG_ENDIAN) +#error "Both _ZFS_LITTLE_ENDIAN and _ZFS_BIG_ENDIAN are defined" #endif -#if defined(__BIG_ENDIAN) && !defined(_BIG_ENDIAN) -#define _BIG_ENDIAN __BIG_ENDIAN -#endif - -#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) -#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined" -#endif - -#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) -#error "Neither _LITTLE_ENDIAN or _BIG_ENDIAN are defined" +#if !defined(_ZFS_LITTLE_ENDIAN) && !defined(_ZFS_BIG_ENDIAN) +#error "Neither _ZFS_LITTLE_ENDIAN or _ZFS_BIG_ENDIAN are defined" #endif #endif /* _SPL_ISA_DEFS_H */ diff --git a/include/sys/spa.h b/include/sys/spa.h index 9b96eb1f87..f0f77cd853 100644 --- a/include/sys/spa.h +++ b/include/sys/spa.h @@ -600,7 +600,7 @@ _NOTE(CONSTCOND) } while (0) ZIO_SET_CHECKSUM(&(bp)->blk_cksum, 0, 0, 0, 0); \ } -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN #define ZFS_HOST_BYTEORDER (0ULL) #else #define ZFS_HOST_BYTEORDER (1ULL) diff --git a/lib/libspl/include/os/freebsd/sys/byteorder.h b/lib/libspl/include/os/freebsd/sys/byteorder.h index 74649cc4e0..cd692d3616 100644 --- a/lib/libspl/include/os/freebsd/sys/byteorder.h +++ b/lib/libspl/include/os/freebsd/sys/byteorder.h @@ -40,91 +40,8 @@ #ifndef _SYS_BYTEORDER_H #define _SYS_BYTEORDER_H -/* - * XXX FIXME - * on FreeBSD _BIG_ENDIAN is defined on all architectures so we have - * to exclude _MACHINE_ENDIAN_H_ and define the bulk of it here - */ - -#include -#include - -/* - * Define the order of 32-bit words in 64-bit words. - */ -#define _QUAD_HIGHWORD 1 -#define _QUAD_LOWWORD 0 - -/* - * Definitions for byte order, according to byte significance from low - * address to high. - */ -#undef _LITTLE_ENDIAN -/* LSB first: i386, vax */ -#define _LITTLE_ENDIAN 1234 -/* LSB first in word, MSW first in long */ -#define _PDP_ENDIAN 3412 - -#define _BYTE_ORDER _LITTLE_ENDIAN - -/* - * Deprecated variants that don't have enough underscores to be useful in more - * strict namespaces. - */ -#if __BSD_VISIBLE -#define LITTLE_ENDIAN _LITTLE_ENDIAN -#define PDP_ENDIAN _PDP_ENDIAN -#define BYTE_ORDER _BYTE_ORDER -#endif - -#define __bswap16_gen(x) (__uint16_t)((x) << 8 | (x) >> 8) -#define __bswap32_gen(x) \ - (((__uint32_t)__bswap16((x) & 0xffff) << 16) | __bswap16((x) >> 16)) -#define __bswap64_gen(x) \ - (((__uint64_t)__bswap32((x) & 0xffffffff) << 32) | __bswap32((x) >> 32)) - -#ifdef __GNUCLIKE_BUILTIN_CONSTANT_P -#define __bswap16(x) \ - ((__uint16_t)(__builtin_constant_p(x) ? \ - __bswap16_gen((__uint16_t)(x)) : __bswap16_var(x))) -#define __bswap32(x) \ - (__builtin_constant_p(x) ? \ - __bswap32_gen((__uint32_t)(x)) : __bswap32_var(x)) -#define __bswap64(x) \ - (__builtin_constant_p(x) ? \ - __bswap64_gen((__uint64_t)(x)) : __bswap64_var(x)) -#else -/* XXX these are broken for use in static initializers. */ -#define __bswap16(x) __bswap16_var(x) -#define __bswap32(x) __bswap32_var(x) -#define __bswap64(x) __bswap64_var(x) -#endif - -/* These are defined as functions to avoid multiple evaluation of x. */ - -static __inline __uint16_t -__bswap16_var(__uint16_t _x) -{ - - return (__bswap16_gen(_x)); -} - -static __inline __uint32_t -__bswap32_var(__uint32_t _x) -{ - -#ifdef __GNUCLIKE_ASM - __asm("bswap %0" : "+r" (_x)); - return (_x); -#else - return (__bswap32_gen(_x)); -#endif -} -#define __htonl(x) __bswap32(x) -#define __htons(x) __bswap16(x) -#define __ntohl(x) __bswap32(x) -#define __ntohs(x) __bswap16(x) - +#include +#include #include #include @@ -140,42 +57,6 @@ extern "C" { /* * macros for conversion between host and (internet) network byte order */ - -#if defined(_BIG_ENDIAN) && !defined(ntohl) && !defined(__lint) -/* big-endian */ -#if defined(_BIG_ENDIAN) && (defined(__amd64__) || defined(__amd64)) -#error "incompatible ENDIAN / ARCH combination" -#endif -#define ntohl(x) (x) -#define ntohs(x) (x) -#define htonl(x) (x) -#define htons(x) (x) - -#elif !defined(ntohl) /* little-endian */ - -#ifndef _IN_PORT_T -#define _IN_PORT_T -typedef uint16_t in_port_t; -#endif - -#ifndef _IN_ADDR_T -#define _IN_ADDR_T -typedef uint32_t in_addr_t; -#endif - -#if !defined(_XPG4_2) || defined(__EXTENSIONS__) || defined(_XPG5) -extern uint32_t htonl(uint32_t); -extern uint16_t htons(uint16_t); -extern uint32_t ntohl(uint32_t); -extern uint16_t ntohs(uint16_t); -#else -extern in_addr_t htonl(in_addr_t); -extern in_port_t htons(in_port_t); -extern in_addr_t ntohl(in_addr_t); -extern in_port_t ntohs(in_port_t); -#endif /* !defined(_XPG4_2) || defined(__EXTENSIONS__) || defined(_XPG5) */ -#endif - #if !defined(_XPG4_2) || defined(__EXTENSIONS__) /* @@ -194,7 +75,7 @@ extern in_port_t ntohs(in_port_t); /* * Macros to convert from a specific byte order to/from native byte order */ -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN #define BE_8(x) BMASK_8(x) #define BE_16(x) BMASK_16(x) #define BE_32(x) BMASK_32(x) @@ -214,7 +95,7 @@ extern in_port_t ntohs(in_port_t); #define BE_64(x) BSWAP_64(x) #endif -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN static __inline__ uint64_t htonll(uint64_t n) { diff --git a/lib/libspl/include/os/freebsd/sys/zfs_context_os.h b/lib/libspl/include/os/freebsd/sys/zfs_context_os.h index 25b5a47df9..f5a136d221 100644 --- a/lib/libspl/include/os/freebsd/sys/zfs_context_os.h +++ b/lib/libspl/include/os/freebsd/sys/zfs_context_os.h @@ -29,10 +29,6 @@ #ifndef ZFS_CONTEXT_OS_H_ #define ZFS_CONTEXT_OS_H_ -#if BYTE_ORDER != BIG_ENDIAN -#undef _BIG_ENDIAN -#endif - #define ZFS_EXPORTS_PATH "/etc/zfs/exports" #endif diff --git a/lib/libspl/include/os/linux/sys/byteorder.h b/lib/libspl/include/os/linux/sys/byteorder.h index 72d40b1643..d5ee3e26f5 100644 --- a/lib/libspl/include/os/linux/sys/byteorder.h +++ b/lib/libspl/include/os/linux/sys/byteorder.h @@ -40,16 +40,14 @@ #ifndef _SYS_BYTEORDER_H #define _SYS_BYTEORDER_H - - -#include -#include - #if defined(__GNUC__) && defined(_ASM_INLINES) && \ (defined(__i386) || defined(__amd64)) #include #endif +#include +#include + #ifdef __cplusplus extern "C" { #endif @@ -58,7 +56,7 @@ extern "C" { * macros for conversion between host and (internet) network byte order */ -#if defined(_BIG_ENDIAN) && !defined(ntohl) && !defined(__lint) +#if defined(_ZFS_BIG_ENDIAN) && !defined(ntohl) && !defined(__lint) /* big-endian */ #define ntohl(x) (x) #define ntohs(x) (x) @@ -108,7 +106,7 @@ extern in_port_t ntohs(in_port_t); /* * Macros to convert from a specific byte order to/from native byte order */ -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN #define BE_8(x) BMASK_8(x) #define BE_16(x) BMASK_16(x) #define BE_32(x) BMASK_32(x) @@ -128,7 +126,7 @@ extern in_port_t ntohs(in_port_t); #define BE_64(x) BSWAP_64(x) #endif -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN static __inline__ uint64_t htonll(uint64_t n) { diff --git a/lib/libspl/include/sys/isa_defs.h b/lib/libspl/include/sys/isa_defs.h index 4d2d909f3e..6f242ea77e 100644 --- a/lib/libspl/include/sys/isa_defs.h +++ b/lib/libspl/include/sys/isa_defs.h @@ -54,8 +54,8 @@ extern "C" { #endif #endif -#if !defined(_LITTLE_ENDIAN) -#define _LITTLE_ENDIAN +#if !defined(_ZFS_LITTLE_ENDIAN) +#define _ZFS_LITTLE_ENDIAN #endif #define _SUNOS_VTOC_16 @@ -76,8 +76,8 @@ extern "C" { #define _ILP32 #endif -#if !defined(_LITTLE_ENDIAN) -#define _LITTLE_ENDIAN +#if !defined(_ZFS_LITTLE_ENDIAN) +#define _ZFS_LITTLE_ENDIAN #endif #define _SUNOS_VTOC_16 @@ -107,6 +107,24 @@ extern "C" { #define _SUNOS_VTOC_16 #define HAVE_EFFICIENT_UNALIGNED_ACCESS +#if defined(__BYTE_ORDER) +#if defined(__BIG_ENDIAN) && __BYTE_ORDER == __BIG_ENDIAN +#define _ZFS_BIG_ENDIAN +#elif defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN +#endif +#elif defined(_BYTE_ORDER) +#if defined(_BIG_ENDIAN) && _BYTE_ORDER == _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN +#elif defined(_LITTLE_ENDIAN) && _BYTE_ORDER == _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN +#endif +#elif defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN) +#define _ZFS_BIG_ENDIAN +#elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) +#define _ZFS_LITTLE_ENDIAN +#endif + /* arm arch specific defines */ #elif defined(__arm) || defined(__arm__) || defined(__aarch64__) @@ -129,9 +147,9 @@ extern "C" { #endif #if defined(__ARMEL__) || defined(__AARCH64EL__) -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #else -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #endif #define _SUNOS_VTOC_16 @@ -151,7 +169,7 @@ extern "C" { #define __sparc__ #endif -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 #if defined(__arch64__) @@ -176,16 +194,16 @@ extern "C" { #endif #endif -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #define _SUNOS_VTOC_16 /* MIPS arch specific defines */ #elif defined(__mips__) #if defined(__MIPSEB__) -#define _BIG_ENDIAN +#define _ZFS_BIG_ENDIAN #elif defined(__MIPSEL__) -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #else #error MIPS no endian specified #endif @@ -198,7 +216,7 @@ extern "C" { /* * RISC-V arch specific defines - * only RV64G (including atomic) LP64 is supported yetxi + * only RV64G (including atomic) LP64 is supported yet */ #elif defined(__riscv) && defined(_LP64) && _LP64 && \ defined(__riscv_atomic) && __riscv_atomic @@ -211,7 +229,7 @@ extern "C" { #define __rv64g__ #endif -#define _LITTLE_ENDIAN +#define _ZFS_LITTLE_ENDIAN #define _SUNOS_VTOC_16 @@ -231,12 +249,12 @@ extern "C" { #error "Neither _ILP32 or _LP64 are defined" #endif -#if defined(_LITTLE_ENDIAN) && defined(_BIG_ENDIAN) -#error "Both _LITTLE_ENDIAN and _BIG_ENDIAN are defined" +#if defined(_ZFS_LITTLE_ENDIAN) && defined(_ZFS_BIG_ENDIAN) +#error "Both _ZFS_LITTLE_ENDIAN and _ZFS_BIG_ENDIAN are defined" #endif -#if !defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN) -#error "Neither _LITTLE_ENDIAN nor _BIG_ENDIAN are defined" +#if !defined(_ZFS_LITTLE_ENDIAN) && !defined(_ZFS_BIG_ENDIAN) +#error "Neither _ZFS_LITTLE_ENDIAN nor _ZFS_BIG_ENDIAN are defined" #endif #ifdef __cplusplus diff --git a/module/Makefile.bsd b/module/Makefile.bsd index 517054b0ec..76889770c5 100644 --- a/module/Makefile.bsd +++ b/module/Makefile.bsd @@ -29,7 +29,7 @@ CFLAGS+= -include ${INCDIR}/os/freebsd/spl/sys/ccompile.h CFLAGS+= -D__KERNEL__ -DFREEBSD_NAMECACHE -DBUILDING_ZFS -D__BSD_VISIBLE=1 CFLAGS+= -DHAVE_UIO_ZEROCOPY -DWITHOUT_NETDUMP -D__KERNEL -D_SYS_CONDVAR_H_ -CFLAGS+= -D_SYS_VMEM_H_ -D_MACHINE_ENDIAN_H_ -DKDTRACE_HOOKS -DSMP +CFLAGS+= -D_SYS_VMEM_H_ -DKDTRACE_HOOKS -DSMP .if ${MACHINE_ARCH} == "amd64" CFLAGS+= -DHAVE_AVX2 -DHAVE_AVX -D__x86_64 -DHAVE_SSE2 -DHAVE_AVX512F -DHAVE_SSSE3 diff --git a/module/icp/algs/aes/aes_impl_generic.c b/module/icp/algs/aes/aes_impl_generic.c index a3b75dbf32..427c096c6a 100644 --- a/module/icp/algs/aes/aes_impl_generic.c +++ b/module/icp/algs/aes/aes_impl_generic.c @@ -1233,7 +1233,7 @@ const aes_impl_ops_t aes_generic_impl = { .encrypt = &aes_generic_encrypt, .decrypt = &aes_generic_decrypt, .is_supported = &aes_generic_will_work, -#if defined(_LITTLE_ENDIAN) +#if defined(_ZFS_LITTLE_ENDIAN) .needs_byteswap = B_TRUE, #else .needs_byteswap = B_FALSE, diff --git a/module/icp/algs/edonr/edonr_byteorder.h b/module/icp/algs/edonr/edonr_byteorder.h index 532dfd7434..2b5d48287f 100644 --- a/module/icp/algs/edonr/edonr_byteorder.h +++ b/module/icp/algs/edonr/edonr_byteorder.h @@ -52,10 +52,10 @@ #endif /* __BYTE_ORDER || BYTE_ORDER */ #if !defined(MACHINE_IS_BIG_ENDIAN) && !defined(MACHINE_IS_LITTLE_ENDIAN) -#if defined(_BIG_ENDIAN) || defined(_MIPSEB) +#if defined(_ZFS_BIG_ENDIAN) || defined(_MIPSEB) #define MACHINE_IS_BIG_ENDIAN #endif -#if defined(_LITTLE_ENDIAN) || defined(_MIPSEL) +#if defined(_ZFS_LITTLE_ENDIAN) || defined(_MIPSEL) #define MACHINE_IS_LITTLE_ENDIAN #endif #endif /* !MACHINE_IS_BIG_ENDIAN && !MACHINE_IS_LITTLE_ENDIAN */ diff --git a/module/icp/algs/modes/ccm.c b/module/icp/algs/modes/ccm.c index c927f08973..5d6507c49d 100644 --- a/module/icp/algs/modes/ccm.c +++ b/module/icp/algs/modes/ccm.c @@ -107,13 +107,13 @@ ccm_mode_encrypt_contiguous_blocks(ccm_ctx_t *ctx, char *data, size_t length, * Increment counter. Counter bits are confined * to the bottom 64 bits of the counter block. */ -#ifdef _LITTLE_ENDIAN +#ifdef _ZFS_LITTLE_ENDIAN counter = ntohll(ctx->ccm_cb[1] & ctx->ccm_counter_mask); counter = htonll(counter + 1); #else counter = ctx->ccm_cb[1] & ctx->ccm_counter_mask; counter++; -#endif /* _LITTLE_ENDIAN */ +#endif /* _ZFS_LITTLE_ENDIAN */ counter &= ctx->ccm_counter_mask; ctx->ccm_cb[1] = (ctx->ccm_cb[1] & ~(ctx->ccm_counter_mask)) | counter; @@ -458,13 +458,13 @@ ccm_mode_decrypt_contiguous_blocks(ccm_ctx_t *ctx, char *data, size_t length, * Increment counter. * Counter bits are confined to the bottom 64 bits */ -#ifdef _LITTLE_ENDIAN +#ifdef _ZFS_LITTLE_ENDIAN counter = ntohll(ctx->ccm_cb[1] & ctx->ccm_counter_mask); counter = htonll(counter + 1); #else counter = ctx->ccm_cb[1] & ctx->ccm_counter_mask; counter++; -#endif /* _LITTLE_ENDIAN */ +#endif /* _ZFS_LITTLE_ENDIAN */ counter &= ctx->ccm_counter_mask; ctx->ccm_cb[1] = (ctx->ccm_cb[1] & ~(ctx->ccm_counter_mask)) | counter; @@ -684,7 +684,7 @@ ccm_format_initial_blocks(uchar_t *nonce, ulong_t nonceSize, mask |= (1ULL << q); } -#ifdef _LITTLE_ENDIAN +#ifdef _ZFS_LITTLE_ENDIAN mask = htonll(mask); #endif aes_ctx->ccm_counter_mask = mask; diff --git a/module/icp/algs/sha1/sha1.c b/module/icp/algs/sha1/sha1.c index e4b7a0c8c0..da34222c8f 100644 --- a/module/icp/algs/sha1/sha1.c +++ b/module/icp/algs/sha1/sha1.c @@ -226,16 +226,14 @@ typedef uint32_t sha1word; * careful programming can guarantee this for us. */ -#if defined(_BIG_ENDIAN) +#if defined(_ZFS_BIG_ENDIAN) #define LOAD_BIG_32(addr) (*(uint32_t *)(addr)) #elif defined(HAVE_HTONL) #define LOAD_BIG_32(addr) htonl(*((uint32_t *)(addr))) #else -/* little endian -- will work on big endian, but slowly */ -#define LOAD_BIG_32(addr) \ - (((addr)[0] << 24) | ((addr)[1] << 16) | ((addr)[2] << 8) | (addr)[3]) +#define LOAD_BIG_32(addr) BE_32(*((uint32_t *)(addr))) #endif /* _BIG_ENDIAN */ /* diff --git a/module/icp/algs/sha2/sha2.c b/module/icp/algs/sha2/sha2.c index 05a2e6ad14..75f6a3c1af 100644 --- a/module/icp/algs/sha2/sha2.c +++ b/module/icp/algs/sha2/sha2.c @@ -43,7 +43,7 @@ #define _RESTRICT_KYWD -#ifdef _LITTLE_ENDIAN +#ifdef _ZFS_LITTLE_ENDIAN #include #define HAVE_HTONL #endif @@ -123,7 +123,7 @@ static uint8_t PADDING[128] = { 0x80, /* all zeros */ }; * careful programming can guarantee this for us. */ -#if defined(_BIG_ENDIAN) +#if defined(_ZFS_BIG_ENDIAN) #define LOAD_BIG_32(addr) (*(uint32_t *)(addr)) #define LOAD_BIG_64(addr) (*(uint64_t *)(addr)) diff --git a/module/icp/algs/skein/skein_port.h b/module/icp/algs/skein/skein_port.h index 417ed7c4bd..ce43530825 100644 --- a/module/icp/algs/skein/skein_port.h +++ b/module/icp/algs/skein/skein_port.h @@ -44,7 +44,7 @@ #include /* get endianness selection */ -#if defined(_BIG_ENDIAN) +#if defined(_ZFS_BIG_ENDIAN) /* here for big-endian CPUs */ #define SKEIN_NEED_SWAP (1) #else diff --git a/module/nvpair/nvpair.c b/module/nvpair/nvpair.c index 6c0261f08b..20a58802f6 100644 --- a/module/nvpair/nvpair.c +++ b/module/nvpair/nvpair.c @@ -2555,11 +2555,13 @@ nvlist_common(nvlist_t *nvl, char *buf, size_t *buflen, int encoding, int err = 0; nvstream_t nvs; int nvl_endian; -#ifdef _LITTLE_ENDIAN +#if defined(_ZFS_LITTLE_ENDIAN) int host_endian = 1; -#else +#elif defined(_ZFS_BIG_ENDIAN) int host_endian = 0; -#endif /* _LITTLE_ENDIAN */ +#else +#error "No endian defined!" +#endif /* _ZFS_LITTLE_ENDIAN */ nvs_header_t *nvh; if (buflen == NULL || nvl == NULL || diff --git a/module/unicode/uconv.c b/module/unicode/uconv.c index d812d5f969..fe84979d08 100644 --- a/module/unicode/uconv.c +++ b/module/unicode/uconv.c @@ -69,7 +69,7 @@ #define UCONV_OUT_ENDIAN_MASKS (UCONV_OUT_BIG_ENDIAN | UCONV_OUT_LITTLE_ENDIAN) /* Native and reversed endian macros. */ -#ifdef _BIG_ENDIAN +#ifdef _ZFS_BIG_ENDIAN #define UCONV_IN_NAT_ENDIAN UCONV_IN_BIG_ENDIAN #define UCONV_IN_REV_ENDIAN UCONV_IN_LITTLE_ENDIAN #define UCONV_OUT_NAT_ENDIAN UCONV_OUT_BIG_ENDIAN diff --git a/module/zfs/lz4.c b/module/zfs/lz4.c index 52e527b02a..4b46e69489 100644 --- a/module/zfs/lz4.c +++ b/module/zfs/lz4.c @@ -208,7 +208,7 @@ lz4_decompress_zfs(void *s_start, void *d_start, size_t s_len, * Little Endian or Big Endian? * Note: overwrite the below #define if you know your architecture endianness. */ -#if defined(_BIG_ENDIAN) +#if defined(_ZFS_BIG_ENDIAN) #define LZ4_BIG_ENDIAN 1 #else /* diff --git a/module/zfs/vdev_raidz_math_powerpc_altivec.c b/module/zfs/vdev_raidz_math_powerpc_altivec.c index 88f2646ae8..1db2c4cd3a 100644 --- a/module/zfs/vdev_raidz_math_powerpc_altivec.c +++ b/module/zfs/vdev_raidz_math_powerpc_altivec.c @@ -225,7 +225,7 @@ const raidz_impl_ops_t vdev_raidz_powerpc_altivec_impl = { #if defined(__powerpc__) -#if defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN +#if defined(_ZFS_LITTLE_ENDIAN) && _LITTLE_ENDIAN /* BEGIN CSTYLED */ const uint8_t __attribute__((aligned(256))) gf_clmul_mod_lt[4*256][16] = {