public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Long, Qin" <qin.long@intel.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Ye, Ting" <ting.ye@intel.com>,
	"leif.lindholm@linaro.org" <leif.lindholm@linaro.org>,
	"lersek@redhat.com" <lersek@redhat.com>
Subject: Re: [PATCH] CryptoPkg/OpensslLib AARCH64: clear XIP CC flags
Date: Sat, 15 Jul 2017 12:09:02 +0000	[thread overview]
Message-ID: <BF2CCE9263284D428840004653A28B6E53FC2737@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <20170714171913.28524-1-ard.biesheuvel@linaro.org>

Reviewed-by: Long Qin <qin.long@intel.com>


Best Regards & Thanks,
LONG, Qin

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org] 
Sent: Saturday, July 15, 2017 1:19 AM
To: edk2-devel@lists.01.org; Long, Qin <qin.long@intel.com>
Cc: Ye, Ting <ting.ye@intel.com>; leif.lindholm@linaro.org; lersek@redhat.com; Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH] CryptoPkg/OpensslLib AARCH64: clear XIP CC flags

Commit 0df6c8c157af ("BaseTools/tools_def AARCH64: avoid SIMD registers in XIP code") updated the compiler flags used by AARCH64 when building modules (including BASE libraries) that may execute before the MMU is enabled.

This broke the build for OpensslLib/OpensslLibCrypto because the SIMD register file is shared with the FPU, and since OpenSSL contains some references to float/double types (which are mostly unused for UEFI btw), disabling floating point prevents the compiler from building OpenSSL at all.

When introducing the support for XIP CC flags, we were aware that this would affect BASE libraries as well, but were not expecting this to have any performance impact. However, in the case of software crypto, it makes sense not to needlessly inhibit the compiler's ability to generate fast code, and even if OpenssLib is a BASE library, it is guaranteed not to run with the MMU off, so we can create a local exception, and clear its XIP CC flags for AARCH64.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
Note that this un-breaks the currently broken AARCH64 build for platforms that have secure boot enabled

 CryptoPkg/Library/OpensslLib/OpensslLib.inf       | 11 +++++++++++
 CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf | 11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/CryptoPkg/Library/OpensslLib/OpensslLib.inf b/CryptoPkg/Library/OpensslLib/OpensslLib.inf
index cbabb34bdd7c..1d15da6660b2 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLib.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLib.inf
@@ -580,3 +580,14 @@ [BuildOptions]
   RVCT:*_*_ARM_CC_FLAGS     = $(OPENSSL_FLAGS) --library_interface=aeabi_clib99 --diag_suppress=1296,1295,550,1293,111,68,177,223,144,513,188,128,546,1,3017 -JCryptoPkg/Include
   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
+
+  #
+  # AARCH64 uses strict alignment and avoids SIMD registers for code 
+ that may execute  # with the MMU off. This involves SEC, PEI_CORE and 
+ PEIM modules as well as BASE  # libraries, given that they may be included into such modules.
+  # This library, even though of the BASE type, is never used in such 
+ cases, and  # avoiding the SIMD register file (which is shared with 
+ the FPU) prevents the  # compiler from successfully building some of 
+ the OpenSSL source files that  # use floating point types, so clear the flags here.
+  #
+  GCC:*_*_AARCH64_CC_XIPFLAGS ==
diff --git a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
index 026b551bcafa..6fc8884da492 100644
--- a/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
+++ b/CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
@@ -541,3 +541,14 @@ [BuildOptions]
   RVCT:*_*_ARM_CC_FLAGS     = $(OPENSSL_FLAGS) --library_interface=aeabi_clib99 --diag_suppress=1296,1295,550,1293,111,68,177,223,144,513,188,128,546,1,3017 -JCryptoPkg/Include
   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
+
+  #
+  # AARCH64 uses strict alignment and avoids SIMD registers for code 
+ that may execute  # with the MMU off. This involves SEC, PEI_CORE and 
+ PEIM modules as well as BASE  # libraries, given that they may be included into such modules.
+  # This library, even though of the BASE type, is never used in such 
+ cases, and  # avoiding the SIMD register file (which is shared with 
+ the FPU) prevents the  # compiler from successfully building some of 
+ the OpenSSL source files that  # use floating point types, so clear the flags here.
+  #
+  GCC:*_*_AARCH64_CC_XIPFLAGS ==
--
2.9.3



  parent reply	other threads:[~2017-07-15 12:07 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-14 17:19 [PATCH] CryptoPkg/OpensslLib AARCH64: clear XIP CC flags Ard Biesheuvel
2017-07-14 18:16 ` Leif Lindholm
2017-07-14 18:22 ` Laszlo Ersek
2017-07-14 18:41   ` Ard Biesheuvel
2017-07-14 19:59     ` Laszlo Ersek
2017-07-15 12:09 ` Long, Qin [this message]
2017-07-15 12:38   ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BF2CCE9263284D428840004653A28B6E53FC2737@SHSMSX103.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox