]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Prefix zfs internal endian checks with _ZFS
authorMatthew Macy <mmacy@freebsd.org>
Tue, 28 Jul 2020 20:02:49 +0000 (13:02 -0700)
committerGitHub <noreply@github.com>
Tue, 28 Jul 2020 20:02:49 +0000 (13:02 -0700)
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 <ryan@ixsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #10621

23 files changed:
config/Rules.am
include/os/freebsd/spl/sys/Makefile.am
include/os/freebsd/spl/sys/byteorder.h
include/os/freebsd/spl/sys/endian.h [deleted file]
include/os/freebsd/spl/sys/isa_defs.h
include/os/linux/spl/sys/byteorder.h
include/os/linux/spl/sys/isa_defs.h
include/sys/spa.h
lib/libspl/include/os/freebsd/sys/byteorder.h
lib/libspl/include/os/freebsd/sys/zfs_context_os.h
lib/libspl/include/os/linux/sys/byteorder.h
lib/libspl/include/sys/isa_defs.h
module/Makefile.bsd
module/icp/algs/aes/aes_impl_generic.c
module/icp/algs/edonr/edonr_byteorder.h
module/icp/algs/modes/ccm.c
module/icp/algs/sha1/sha1.c
module/icp/algs/sha2/sha2.c
module/icp/algs/skein/skein_port.h
module/nvpair/nvpair.c
module/unicode/uconv.c
module/zfs/lz4.c
module/zfs/vdev_raidz_math_powerpc_altivec.c

index c6dce34b0361c576cede2fba569009e0fde50d69..b02511a052981d090ccbb83fca9c43f0416c67ea 100644 (file)
@@ -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
index 7803d1af302ca7326129359ebbac44a99daefdc1..7d82e2d6d4e8d68dacf10b50ea107ed8ee5e5958 100644 (file)
@@ -14,7 +14,6 @@ KERNEL_H = \
        dirent.h \
        disp.h \
        dkio.h \
-       endian.h \
        extdirent.h \
        file.h \
        freebsd_rwlock.h \
index 79ae848c72590f7c2ebc14163314d76b2384bbd2..fd6b0269d8e2e0569cedfc28e4b30395a05a972a 100644 (file)
@@ -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 (file)
index 4de4b88..0000000
+++ /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<sys/endian.h>
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-#undef _BIG_ENDIAN
-#undef BIG_ENDIAN
-#define        BIG_ENDIAN 4321
-#endif
-
-#endif /*  _SPL_SYS_ENDIAN_H_ */
index 863c2447fe8b50dc7213727a7d0e8843bab90c4d..399d510b5f9b45b89ad254f969f25c9c4239e743 100644 (file)
@@ -27,6 +27,7 @@
 
 #ifndef        _SYS_ISA_DEFS_H
 #define        _SYS_ISA_DEFS_H
+#include <sys/endian.h>
 
 /*
  * 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
index 477707996124e71b11df8ea8628f157abc1ee203..70847edbc8a93bbf7f176b90a830f1dc71978c70 100644 (file)
 #define        _SPL_BYTEORDER_H
 
 #include <asm/byteorder.h>
+
+#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 <sys/isa_defs.h>
 
 #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)
 {
index c19943b8524537a723eb7186d224fded0596cb5d..af064e567e1378e21199ff05b0db2db6982fbe44 100644 (file)
 #endif
 
 #if defined(__ARMEL__) || defined(__AARCH64EL__)
-#define        _LITTLE_ENDIAN
+#define        _ZFS_LITTLE_ENDIAN
 #else
-#define        _BIG_ENDIAN
+#define        _ZFS_BIG_ENDIAN
 #endif
 
 /*
 #endif
 #endif
 
-#define        _BIG_ENDIAN
+#define        _ZFS_BIG_ENDIAN
 #define        _SUNOS_VTOC_16
 #define        _ALIGNMENT_REQUIRED     1
 
 #endif
 #endif
 
-#define        _BIG_ENDIAN
+#define        _ZFS_BIG_ENDIAN
 
 /*
  * Illumos doesn't define _ALIGNMENT_REQUIRED for s390, so default to 1
 #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
 #define        __rv64g__
 #endif
 
-#define        _LITTLE_ENDIAN
+#define        _ZFS_LITTLE_ENDIAN
 
 #define        _SUNOS_VTOC_16
 
 #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 */
index 9b96eb1f871fd200e3fa940008f00c263655d01a..f0f77cd85305b151304484284a4b395ad4871e7d 100644 (file)
@@ -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)
index 74649cc4e0a1dd0ef7043510b6e568c1ff6dcecf..cd692d3616e0a819caacc5a40ba8ef72384ae92e 100644 (file)
 #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 <sys/cdefs.h>
-#include <sys/_types.h>
-
-/*
- * 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 <sys/endian.h>
+#include <netinet/in.h>
 #include <sys/isa_defs.h>
 #include <sys/int_types.h>
 
@@ -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)
 {
index 25b5a47df92a91b5afc9f13e480dba6e97f488b5..f5a136d221253de2c1b27548628ca9ccff3aa96e 100644 (file)
 #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
index 72d40b1643a8b7d706a33deb8124bc8ea87f99ed..d5ee3e26f5a5529007f2a4ae31d3260cfc3d61eb 100644 (file)
 #ifndef _SYS_BYTEORDER_H
 #define        _SYS_BYTEORDER_H
 
-
-
-#include <sys/isa_defs.h>
-#include <sys/int_types.h>
-
 #if defined(__GNUC__) && defined(_ASM_INLINES) && \
        (defined(__i386) || defined(__amd64))
 #include <asm/byteorder.h>
 #endif
 
+#include <sys/isa_defs.h>
+#include <sys/int_types.h>
+
 #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)
 {
index 4d2d909f3e80d9b0ed24a819b183e737e8e81955..6f242ea77ef7df3807072d451840e600387130f1 100644 (file)
@@ -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
index 517054b0ecafc74ec8f144431673878a39f6e48e..76889770c54c07bb6e775f3339f13e3cf6e47d94 100644 (file)
@@ -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
index a3b75dbf32b85156b9193a2bdf9ce0c272324254..427c096c6ab30068cb0dcbd5d4490dbf784e6378 100644 (file)
@@ -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,
index 532dfd7434c91ac7b9a8e20e9901663a282064ec..2b5d48287f26b802a1dc071dba713de4d41e0614 100644 (file)
 #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 */
index c927f089731318a5478c3706fbddb60d003e83df..5d6507c49db1537f41dd1607753e10e0fa597fa5 100644 (file)
@@ -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;
index e4b7a0c8c0e5a5d82baf28e37da3cc31b1dfadbd..da34222c8fc390ebc7af4a5f890b431301f69894 100644 (file)
@@ -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 */
 
 /*
index 05a2e6ad146a0be30f4618b63f822c134388d268..75f6a3c1af4b90742929e257f05dc849edb549e8 100644 (file)
@@ -43,7 +43,7 @@
 
 #define        _RESTRICT_KYWD
 
-#ifdef _LITTLE_ENDIAN
+#ifdef _ZFS_LITTLE_ENDIAN
 #include <sys/byteorder.h>
 #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))
 
index 417ed7c4bd76127e211ff49932abe73d7441b116..ce4353082552298473291e7c115eb58a40fb8d67 100644 (file)
@@ -44,7 +44,7 @@
 
 #include <sys/isa_defs.h>      /* get endianness selection */
 
-#if    defined(_BIG_ENDIAN)
+#if    defined(_ZFS_BIG_ENDIAN)
 /* here for big-endian CPUs */
 #define        SKEIN_NEED_SWAP   (1)
 #else
index 6c0261f08b6a370066488f56abd9f04ba61bba33..20a58802f6b7270782d0ec4270a46096d5e5b407 100644 (file)
@@ -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 ||
index d812d5f9695102130db36c11540e336bddd87116..fe84979d08b2d259584f9224c88bdfe713831b26 100644 (file)
@@ -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
index 52e527b02acd63d40b58ec49cdedadc77c09ad24..4b46e694891a5d7683a0ed306929e1b3b4a6c3a2 100644 (file)
@@ -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
 /*
index 88f2646ae88197980542e7ab7f0a049d2d4c15c4..1db2c4cd3a477694d7f2f609523ce8784a490ddc 100644 (file)
@@ -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] = {