[Buildroot] [PATCH] package/libnss: fix build failure due to HW PPC Crypto bug
Giulio Benetti
giulio.benetti at benettiengineering.com
Tue Dec 31 21:24:34 UTC 2019
Hi Thomas,
On 12/31/19 6:07 PM, Thomas Petazzoni wrote:
> On Fri, 27 Dec 2019 17:54:27 +0100
> Giulio Benetti <giulio.benetti at benettiengineering.com> wrote:
>
>> diff --git a/package/libnss/0005-Bug-1606119-Fix-PPC-HW-Crypto-build-failure.patch b/package/libnss/0005-Bug-1606119-Fix-PPC-HW-Crypto-build-failure.patch
>> new file mode 100644
>> index 0000000000..0b891b5ebc
>> --- /dev/null
>> +++ b/package/libnss/0005-Bug-1606119-Fix-PPC-HW-Crypto-build-failure.patch
>> @@ -0,0 +1,37 @@
>> +From 09b3776a924736049693a118d5a8d883e8c794ca Mon Sep 17 00:00:00 2001
>> +From: Giulio Benetti <giulio.benetti at benettiengineering.com>
>> +Date: Fri, 27 Dec 2019 17:41:04 +0100
>> +Subject: [PATCH] Bug 1606119 - Fix PPC HW Crypto build failure
>> +
>> +Only Big Endian Altivec functions are used, not Little Endian ones, so
>> +let's change check if USE_PPC_CRYPTO by changing to IS_BIG_ENDIAN
>> +instead of IS_LITTLE_ENDIAN.
>> +
>> +Signed-off-by: Giulio Benetti <giulio.benetti at benettiengineering.com>
>
> I don't understand the reasoning here. From a quick look, the undefined
> symbols reported in the build log come from the file
> ./nss/lib/freebl/gcm-ppc.c.
>
> This file is included in the build in nss/lib/freebl/Makefile if
> CPU_ARCH=ppc.
>
> However CPU_ARCH=ppc is only set in nss/coreconf/Linux.mk as follows:
>
> ifeq (,$(filter-out ppc64 ppc64le,$(OS_TEST)))
> CPU_ARCH = ppc
> ifeq ($(USE_64),1)
> ARCHFLAG = -m64
> endif
>
> In libnss.mk, we pass OS_TEST=$(LIBNSS_ARCH), which basically is the
> value of $(BR2_ARCH), which is powerpc64 or powerpc64le in Buildroot.
>
> So, regardless of whether we are big endian PPC64 or little endian
> PPC64, the gcm-ppc.c file will not be included in the build.
>
> Am I missing something ? Could you explain a bit better how you came to
> the conclusion you have in this patch ?
The point is that gcm-ppc.c gets compiled, but inside it there's an #if
defined(USE_PPC_CRYPTO) on top of the file, that is defined in gsm.h
only #if __powerpc64__ and LITTLE_ENDIAN. But inside gcm-ppc.c they use
_be() Altivec functions. Basically they have inverted LITTLE_ENDIAN with
BIB_ENDIAN, since they use Big Endian only Altivec functions in
gcm-ppc.c so the only wrong piece of code is in gcm.h, where
USE_PPC_CRYPTO is defined.
Need only to invert the condition by which USE_PPC_CRYPTO is defined:
BIG_ENDIAN instead of LITTLE_ENDIAN.
Best regards
--
Giulio Benetti
Benetti Engineering sas
>
> Thanks!
>
>
> Thomas
>
More information about the buildroot
mailing list