> -----Original Message-----
> From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
> Sent: Wednesday, November 25, 2015 12:56 AM
> To: Cohen, Eugene; Leif Lindholm; Leif Lindholm
> Cc: David Woodhouse; Long, Qin; edk2-devel@lists.01.org
> Subject: Re: [edk2] CryptoPkg: OpenSSL build issue with RVCT
> 
> On 24 November 2015 at 16:53, Cohen, Eugene <eug...@hp.com> wrote:
> > Ard, thanks - as you can tell this is an issue in the original flags and 
> > not with
> the changes I've added.  I agree that we should not redefine the fpu in this
> file but rather inherit from the build.
> >
> 
> Looking at the repo history, it turns out that this has been present since the
> original RVCT support was added to OpenSslLib in 2011. That does not make it
> right, though, and using this library to implement runtime services for
> authenticated variables is going to cause trouble regardless.  So I am 
> inclined
> to suggest it be removed, considering that EDK2 is a reference
> implementation, and we should not be setting bad examples.
> 
> > David, good comments - I'm working on an updated patch.  I'm running into
> some issues related to printf and alloca that I need to address as well.
> >
> > I don't think we want each edk2 developer independently opening openssl
> tickets as we encounter issues.  It would probably make more sense for Long
> to do this or, if we think this is an RVCT-unique issue, for Ard or Leif to 
> do this.
> Do we already have these responsibilities identified?
> >
> 
> I'd like to see RVCT support in upstream OpenSSL first. Otherwise, it will be 
> a
> moving target, and we can never upgrade our OpenSSL version without the
> risk of breaking the build for RVCT in a way that requires new OpenSSL tickets
> to be created. Unfortunately, I don't have the bandwidth to get involved in
> that, since RVCT is not a priority for Linaro. (Note that RVCT is 32-bit 
> only. The
> proprietary 64-bit ARM compiler is based on Clang. Also, the RVCT asm dialect
> is completely different, so none of the ALU and NEON accelerated ARM
> implementation for AES and SHA can be built with it without major surgery
> on the perlasm files)
> 
> Then, we can see what issues remain in the EDK2 integration, the most
> important of which is the lack of softfloat support (but perhaps we can port
> the code from StdLibPkg so that it can be used in DXE?)

Yes, I am also looking forward to having this kind of native OpenSSL support.  
It does bother me when any new openssl version was released before. 
One good progress is: some EDKII-OpenSSL patches have been integrated into
The OpenSSL HEAD with David's help. 

Is anybody from community able to push this RVCT support?

LONG, Qin

> 
> Regards,
> Ard.
> 
> 
> > -----Original Message-----
> > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
> > Sent: Tuesday, November 24, 2015 8:49 AM
> > To: David Woodhouse <dw...@infradead.org>
> > Cc: Cohen, Eugene <eug...@hp.com>; Long, Qin <qin.l...@intel.com>;
> > edk2-devel@lists.01.org <edk2-de...@ml01.01.org>; Leif Lindholm
> > <leif.lindh...@arm.com>
> > Subject: Re: [edk2] CryptoPkg: OpenSSL build issue with RVCT
> >
> > On 24 November 2015 at 15:47, David Woodhouse
> <dw...@infradead.org> wrote:
> >> On Tue, 2015-11-24 at 14:19 +0000, Cohen, Eugene wrote:
> >>>
> >>> Here's a patch with this changes:
> >>>
> >>> ---
> >>>  edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf                        
> >>> | 2 +-
> >>>
> >>> edk2/CryptoPkg/Library/OpensslLib/openssl-
> 1.0.2d/crypto/x509/x509_vf
> >>> y.c | 1 +
> >>>  2 files changed, 2 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf
> >>> b/edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf
> >>> index 2e74f6c..261861b 100644
> >>> --- a/edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf
> >>> +++ b/edk2/CryptoPkg/Library/OpensslLib/OpensslLib.inf
> >>> @@ -889,6 +889,6 @@
> >>>    #  513: a value of type  cannot be assigned to an entity of type
> >>>    #  188: enumerated type mixed with another type (i.e. passing an
> integer as an enum without a cast)
> >>>    # 1296: Extended constant initialiser used
> >>> -  RVCT:*_*_ARM_CC_FLAGS     = $(OPENSSL_FLAGS) --
> library_interface=aeabi_clib99 --fpu=vfpv3 --
> diag_suppress=1296,1295,550,1293,111,68,177,223,144,513,188
> >>> +  RVCT:*_*_ARM_CC_FLAGS     = $(OPENSSL_FLAGS) --
> library_interface=aeabi_clib99 --fpu=vfpv3 --
> diag_suppress=1296,1295,550,1293,111,68,177,223,144,513,188,128,546
> >
> > This looks wrong. The UEFI spec disallows the use of hardware FP on
> > 32-bit ARM, and yet we are passing --fpu=vfpv3. I actually tried
> > building OpenSslLib for ARM using GCC, and got in trouble with the RNG
> > routines that rely on FP, so my conclusion was that it requires some
> > software FP routines (or a build time switch to omit those files and
> > lose some functionality)
> >
> > Note that this is not a theoretical problem. Under Linux, you can only
> > use FP in kernel mode if you explicitly wrap it with fp_begin/fp_end
> > routines, and if you don't, anything that touches the FP register file
> > will trap. This includes the UEFI runtime services invocations, since
> > their entry/exit routines don't call those wrappers. And even if it
> > wouldn't trap, you would still have to preserve the contents of the FP
> > registers, since an ordinary context switch or syscall does not take
> > care of that.
> >
> > --
> > Ard.
> >
> >
> >>
> >>
> >> You neglected to add to the comments — they're there in the context
> >> of your patch, explaining at least #513, #188 and #1296. You should
> >> be adding the same for the newly-added #128 and #546.
> >>
> >> Additionally *all* of those comments should have a reference to the
> >> specific OpenSSL RT ticket which covers the problem. And then we can
> >> properly track them and remove them when they're obsolete, and don't
> >> just accumulate them for ever.
> >>
> >>>    XCODE:*_*_IA32_CC_FLAGS   = -mmmx -msse -U_WIN32 -U_WIN64
> $(OPENSSL_FLAGS) -w
> >>>    XCODE:*_*_X64_CC_FLAGS    = -mmmx -msse -U_WIN32 -U_WIN64
> $(OPENSSL_FLAGS) -w
> >>> diff --git
> >>> a/edk2/CryptoPkg/Library/OpensslLib/openssl-
> 1.0.2d/crypto/x509/x509_
> >>> vfy.c
> >>> b/edk2/CryptoPkg/Library/OpensslLib/openssl-
> 1.0.2d/crypto/x509/x509_
> >>> vfy.c
> >>> index 35dde28..35e3b39 100644
> >>> ---
> >>> a/edk2/CryptoPkg/Library/OpensslLib/openssl-
> 1.0.2d/crypto/x509/x509_
> >>> vfy.c
> >>> +++ b/edk2/CryptoPkg/Library/OpensslLib/openssl-
> 1.0.2d/crypto/x509/x
> >>> +++ 509_vfy.c
> >>> @@ -859,6 +859,7 @@ static int check_cert(X509_STORE_CTX *ctx)
> >>>      X509 *x;
> >>>      int ok, cnum;
> >>>      unsigned int last_reasons;
> >>> +    ok = 0;
> >>>      cnum = ctx->error_depth;
> >>>      x = sk_X509_value(ctx->chain, cnum);
> >>>      ctx->current_cert = x;
> >>
> >> Again, don't add this here without an upstream RT ticket being filed.
> >> The aim is to get to *zero* delta between us and upstream OpenSSL,
> >> and we won't get there if we do this kind of thing.
> >>
> >> --
> >> dwmw2
> >>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to