diff --git a/coreconf/Linux.mk b/coreconf/Linux.mk --- a/coreconf/Linux.mk +++ b/coreconf/Linux.mk @@ -186,10 +186,18 @@ FREEBL_LOWHASH = 1 endif endif endif +# Test toolchain for endianness and set LITTLE_ENDIAN variable accordingly +ENDIANNESS := $(shell echo | $(CC) -dM -E - | grep __BYTE_ORDER__) +ifeq ($(findstring __ORDER_LITTLE_ENDIAN__,$(ENDIANNESS)),__ORDER_LITTLE_ENDIAN__) + LITTLE_ENDIAN := 1 +else + LITTLE_ENDIAN := 0 +endif + USE_SYSTEM_ZLIB = 1 ZLIB_LIBS = -lz # The -rpath '$$ORIGIN' linker option instructs this library to search for its # dependencies in the same directory where it resides. diff '--color=auto' -Naur a/lib/freebl/Makefile b/lib/freebl/Makefile --- a/lib/freebl/Makefile 2026-07-19 11:30:59.568272858 +0300 +++ b/lib/freebl/Makefile 2026-07-19 12:20:56.138305051 +0300 @@ -112,7 +112,10 @@ # NSS_X64 means the target is a 64-bits 64 CPU architecture # NSS_X86_OR_X64 means the target is either x86 or x64 ifeq (,$(filter-out i386 x386 x86 x86_64,$(CPU_ARCH))) - DEFINES += -DNSS_X86_OR_X64 -DHAVE_PLATFORM_GHASH + DEFINES += -DNSS_X86_OR_X64 + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += ghash-x86.c aes-x86.c $(OBJDIR)/ghash-x86.o: CFLAGS += -mpclmul -maes $(OBJDIR)/aes-x86.o: CFLAGS += -mpclmul -maes @@ -138,7 +141,10 @@ endif ifeq ($(CPU_ARCH),aarch64) ifdef CC_IS_CLANG - DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 -DHAVE_PLATFORM_GHASH + DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += aes-armv8.c ghash-aarch64.c sha1-armv8.c sha256-armv8.c else ifeq (1,$(CC_IS_GCC)) # GCC versions older than 4.9 don't support ARM AES. The check @@ -146,11 +152,17 @@ # and then rejects any major versions prior to 5. Note that # there has been no GCC 4.10, as it was renamed to GCC 5. ifneq (,$(filter 4.9,$(word 1,$(GCC_VERSION)).$(word 2,$(GCC_VERSION)))) - DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 -DHAVE_PLATFORM_GHASH + DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += aes-armv8.c ghash-aarch64.c sha1-armv8.c sha256-armv8.c endif ifeq (,$(filter 0 1 2 3 4,$(word 1,$(GCC_VERSION)))) - DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 -DHAVE_PLATFORM_GHASH + DEFINES += -DUSE_HW_AES -DUSE_HW_SHA1 -DUSE_HW_SHA2 + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += aes-armv8.c ghash-aarch64.c sha1-armv8.c sha256-armv8.c endif endif @@ -183,7 +195,9 @@ endif ifeq ($(CPU_ARCH),arm) ifndef NSS_DISABLE_ARM32_NEON - DEFINES += -DHAVE_PLATFORM_GHASH + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += ghash-arm32-neon.c endif ifdef CC_IS_CLANG @@ -316,7 +330,9 @@ MPI_SRCS += mpi_arm.c endif ifeq ($(CPU_ARCH),ppc) - DEFINES += -DHAVE_PLATFORM_GHASH + ifeq ($(LITTLE_ENDIAN),1) + DEFINES += -DHAVE_PLATFORM_GHASH + endif EXTRA_SRCS += ghash-ppc.c ifdef USE_64 DEFINES += -DNSS_NO_INIT_SUPPORT