Hi Alexander, On Tue, Apr 29, 2025 at 09:30:52AM +0200, Alexander Egorenkov wrote: > From: Super User <r...@a8345034.lnxne.boe>
Thanks for catching this, the "From:" line seems invalid, so I change it as "From: Alexander Egorenkov <egore...@linux.ibm.com>" > > Macros __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined in > user space header 'endian.h'. Not including this header results in > the condition #if __BYTE_ORDER == __LITTLE_ENDIAN being always true, even on > BE architectures (e.g. s390x). Due to this bug the compressor library was > built for LE byte-order on BE arch s390x. > > Fixes: bc99c763e3fe ("erofs-utils: switch to effective unaligned access") > Signed-off-by: Alexander Egorenkov <egore...@linux.ibm.com> > --- > include/erofs/defs.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/include/erofs/defs.h b/include/erofs/defs.h > index 051a270531ca..196dfa8191a8 100644 > --- a/include/erofs/defs.h > +++ b/include/erofs/defs.h > @@ -19,6 +19,7 @@ extern "C" > #include <inttypes.h> > #include <limits.h> > #include <stdbool.h> > +#include <endian.h> I guess it could break MacOS compilation, so I update as below: >From d55344291092b69a2ba6f11dbcda52fa534ac124 Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov <egore...@linux.ibm.com> Date: Tue, 29 Apr 2025 09:30:52 +0200 Subject: [PATCH] erofs-utils: fix endiannes issue Macros __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN are defined in user space header 'endian.h'. Not including this header results in the condition #if __BYTE_ORDER == __LITTLE_ENDIAN being always true, even on BE architectures (e.g. s390x). Due to this bug the compressor library was built for LE byte-order on BE arch s390x. Fixes: bc99c763e3fe ("erofs-utils: switch to effective unaligned access") Signed-off-by: Alexander Egorenkov <egore...@linux.ibm.com> Reviewed-by: Ian Kent <ra...@themaw.net> Reviewed-by: Hongbo Li <lihongb...@huawei.com> Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com> --- configure.ac | 1 + include/erofs/defs.h | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/configure.ac b/configure.ac index 6e1e7a1..88f1cbe 100644 --- a/configure.ac +++ b/configure.ac @@ -194,6 +194,7 @@ AC_ARG_WITH(selinux, AC_CHECK_HEADERS(m4_flatten([ dirent.h execinfo.h + endian.h fcntl.h getopt.h inttypes.h diff --git a/include/erofs/defs.h b/include/erofs/defs.h index 051a270..21e0f09 100644 --- a/include/erofs/defs.h +++ b/include/erofs/defs.h @@ -24,6 +24,21 @@ extern "C" #include <config.h> #endif +#ifdef HAVE_ENDIAN_H +#include <endian.h> +#else +/* Use GNU C predefined macros as a fallback */ +#ifndef __BYTE_ORDER +#define __BYTE_ORDER __BYTE_ORDER__ +#endif +#ifndef __LITTLE_ENDIAN +#define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ +#endif +#ifndef __BIG_ENDIAN +#define __BIG_ENDIAN __ORDER_BIG_ENDIAN__ +#endif +#endif + #ifdef HAVE_LINUX_TYPES_H #include <linux/types.h> #endif -- 2.30.2