[edk2-devel] [PATCH v6 0/2] CryptoPkg/OpensslLib: Add native instruction support for X64

Christopher Zurcher christopher.zurcher at outlook.com
Mon Jun 21 22:05:16 UTC 2021


Yes this was discussed last year, sorry for the delay in follow-up, I was changing jobs.
The problem is that the assembly code provided by OpenSSL uses "wrt ..imagebase" which is only supported by win64, not elf64. It was requested at the time that I include the OpenSSL-provided .S files as a GCC tool chain alternative.

Thanks,
Christopher Zurcher

-----Original Message-----
From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of gaoliming
Sent: Sunday, June 20, 2021 18:34
To: devel at edk2.groups.io; christopher.zurcher at outlook.com
Cc: 'Jiewen Yao' <jiewen.yao at intel.com>; 'Jian J Wang' <jian.j.wang at intel.com>; 'Xiaoyu Lu' <xiaoyux.lu at intel.com>; 'Mike Kinney' <michael.d.kinney at intel.com>; 'Ard Biesheuvel' <ard.biesheuvel at arm.com>
Subject: 回复: [edk2-devel] [PATCH v6 0/2] CryptoPkg/OpensslLib: Add native instruction support for X64

Christopher:
  Nasm should support GCC tool chain. Do you meet with the problem on nasm version assembly code?
  So, you have to add GAS assembly code. This topic may be discussed last year. Can you give some detail for it?

Thanks
Liming
> -----邮件原件-----
> 发件人: devel at edk2.groups.io <devel at edk2.groups.io> 代表 Christopher 
> Zurcher
> 发送时间: 2021年6月19日 10:09
> 收件人: devel at edk2.groups.io
> 抄送: Jiewen Yao <jiewen.yao at intel.com>; Jian J Wang 
> <jian.j.wang at intel.com>; Xiaoyu Lu <xiaoyux.lu at intel.com>; Mike Kinney 
> <michael.d.kinney at intel.com>; Ard Biesheuvel <ard.biesheuvel at arm.com>
> 主题: [edk2-devel] [PATCH v6 0/2] CryptoPkg/OpensslLib: Add native 
> instruction support for X64
> 
> From: Christopher Zurcher <christopher.zurcher at microsoft.com>
> 
> V6 Changes:
>   Add GCC-compatible version of these modifications. Supporting GCC 
> build
of
>     native OpenSSL .S files requires removal of *(COMMON) from the 
> /DISCARD/
>     section of the GCC linker script.
>   The VS/CLANG portion of the patch is unchanged from the 
> previously-approved
>     patchset.
> 
> V5 Changes:
>   Move ApiHooks.c into X64 folder
>   Update process_files.pl to clean architecture-specific subfolders
without
>     removing them
>   Rebased INF file to merge latest changes regarding RngLib vs. 
> TimerLib
> 
> V4 Changes:
>   Add copyright header to uefi-asm.conf
>   Move [Sources.X64] block to cover entire X64-specific config
> 
> V3 Changes:
>   Added definitions for ptrdiff_t and wchar_t to CrtLibSupport.h for
>     LLVM/Clang build support.
>   Added -UWIN32 to GCC Flags for LLVM/Clang build support.
>   Added missing AES GCM assembly file.
> 
> V2 Changes:
>   Limit scope of assembly config to SHA and AES functions.
>   Removed IA32 native support (reduced config was causing build 
> failure
and
>     can be added in a later patch).
>   Removed XMM instructions from assembly generation.
>   Added automatic copyright header porting for generated assembly files.
> 
> This patch adds support for building the native instruction algorithms 
> for the X64 architecture in OpensslLib. The process_files.pl script 
> was
modified
> to parse the .asm file targets from the OpenSSL build config data 
> struct,
and
> generate the necessary assembly files for the EDK2 build environment.
> 
> For the X64 variant, OpenSSL includes calls to a Windows error 
> handling
API,
> and that function has been stubbed out in ApiHooks.c.
> 
> For all variants, a constructor is added to call the required CPUID
function
> within OpenSSL to facilitate processor capability checks in the native 
> algorithms.
> 
> Additional native architecture variants should be simple to add by
following
> the changes made for this architecture.
> 
> The OpenSSL assembly files are traditionally generated at build time 
> using
a
> perl script. To avoid that burden on EDK2 users, these end-result 
> assembly files are generated during the configuration steps performed 
> by the
package
> maintainer (through process_files.pl). The perl generator scripts 
> inside OpenSSL do not parse file comments as they are only meant to 
> create intermediate build files, so process_files.pl contains 
> additional hooks to preserve the copyright headers as well as clean up 
> tabs and line endings
to
> comply with EDK2 coding standards. The resulting file headers align 
> with the generated .h files which are already included in the EDK2 repository.
> 
> Cc: Jiewen Yao <jiewen.yao at intel.com>
> Cc: Jian J Wang <jian.j.wang at intel.com>
> Cc: Xiaoyu Lu <xiaoyux.lu at intel.com>
> Cc: Mike Kinney <michael.d.kinney at intel.com>
> Cc: Ard Biesheuvel <ard.biesheuvel at arm.com>
> 
> Christopher Zurcher (2):
>   CryptoPkg/OpensslLib: Add native instruction support for X64
>   CryptoPkg/OpensslLib: Commit the auto-generated assembly files for 
> X64
> 
>  BaseTools/Scripts/GccBase.lds
> |    1 -
>  CryptoPkg/CryptoPkg.ci.yaml
> |   21 +-
>  CryptoPkg/Library/Include/CrtLibSupport.h
> |    2 +
>  CryptoPkg/Library/Include/openssl/opensslconf.h
> |    3 -
>  CryptoPkg/Library/OpensslLib/OpensslLib.inf
> |    2 +-
>  CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c
> |   44 +
>  CryptoPkg/Library/OpensslLib/OpensslLibCrypto.inf
> |    2 +-
>  CryptoPkg/Library/OpensslLib/OpensslLibX64.inf
> |  653 +++
>  CryptoPkg/Library/OpensslLib/OpensslLibX64Gcc.inf
> |  653 +++
>  CryptoPkg/Library/OpensslLib/UefiAsm.conf
> |   30 +
>  CryptoPkg/Library/OpensslLib/X64/ApiHooks.c
> |   22 +
>  CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_64.nasm
> |  732 +++
>  CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-x86_64.nasm
> | 1916 ++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-x86_64.nasm
> |   78 +
>  CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm
> | 5103 ++++++++++++++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm
> | 1173 +++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/modes/aesni-gcm-x86_64.nasm
> |   34 +
>  CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86_64.nasm
> | 1569 ++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86_64.nasm
> | 3137 ++++++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm
> | 2884 +++++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x86_64.nasm
> | 3461 +++++++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm
> | 3313 +++++++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm
> | 1938 ++++++++
>  CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm
> |  491 ++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-mb-x86_64.S
> |  552 +++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha1-x86_64.S
> | 1719 +++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha256-x86_64.S 
> |
> 69 +
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-x86_64.S
> | 4484 +++++++++++++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/vpaes-x86_64.S
> |  863 ++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/aesni-gcm-x86_64.S
> |   29 +
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/ghash-x86_64.S
> | 1386 ++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-mb-x86_64.S
> | 2962 ++++++++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-x86_64.S
> | 2631 ++++++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-mb-x86_64.S
> | 3286 +++++++++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-x86_64.S
> | 3097 ++++++++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha512-x86_64.S
> | 1811 +++++++
>  CryptoPkg/Library/OpensslLib/X64Gcc/crypto/x86_64cpuid.S
> |  491 ++
>  CryptoPkg/Library/OpensslLib/process_files.pl
> |  241 +-
>  38 files changed, 50828 insertions(+), 55 deletions(-)  create mode 
> 100644 CryptoPkg/Library/OpensslLib/OpensslLibConstructor.c
>  create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibX64.inf
>  create mode 100644 CryptoPkg/Library/OpensslLib/OpensslLibX64Gcc.inf
>  create mode 100644 CryptoPkg/Library/OpensslLib/UefiAsm.conf
>  create mode 100644 CryptoPkg/Library/OpensslLib/X64/ApiHooks.c
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-mb-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha1-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-sha256-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/aes/aesni-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/modes/aesni-gcm-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/modes/ghash-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-mb-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha1-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-mb-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha256-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/sha/sha512-x86_64.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64/crypto/x86_64cpuid.nasm
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-mb-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha1-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-sha256-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/aesni-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/aes/vpaes-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/aesni-gcm-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/modes/ghash-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-mb-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha1-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-mb-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha256-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/sha/sha512-x86_64.S
>  create mode 100644
> CryptoPkg/Library/OpensslLib/X64Gcc/crypto/x86_64cpuid.S
> 
> --
> 2.32.0.windows.1
> 
> 
> 
> 
> 










-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76814): https://edk2.groups.io/g/devel/message/76814
Mute This Topic: https://groups.io/mt/83700667/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list