public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Lendacky, Thomas" <thomas.lendacky@amd.com>
To: devel@edk2.groups.io, bret.barkelew@microsoft.com,
	"lersek@redhat.com" <lersek@redhat.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Liming Gao <liming.gao@intel.com>,
	Eric Dong <eric.dong@intel.com>, Ray Ni <ray.ni@intel.com>,
	Brijesh Singh <brijesh.singh@amd.com>,
	Anthony Perard <anthony.perard@citrix.com>,
	Benjamin You <benjamin.you@intel.com>,
	Guo Dong <guo.dong@intel.com>, Julien Grall <julien@xen.org>,
	Maurice Ma <maurice.ma@intel.com>, Andrew Fish <afish@apple.com>
Subject: Re: [EXTERNAL] Re: [edk2-devel] [PATCH 4/4] UefiCpuPkg/CpuExceptionHandler: Revert binary patching in standard CpuExceptionHandlerLib
Date: Wed, 6 May 2020 14:51:44 -0500	[thread overview]
Message-ID: <4da4138d-1dc9-128f-6524-a71f85811327@amd.com> (raw)
In-Reply-To: <CY4PR21MB0743420B913B1BC1747EC18BEFA40@CY4PR21MB0743.namprd21.prod.outlook.com>

On 5/6/20 1:07 PM, Bret Barkelew via groups.io wrote:
> <Quote>
> 
>  > Should that
>  > section not use the !if check and just list both .inf files
>  > (SecPeiCpuExceptionHandlerLib.inf and
>  > Xcode5SecPeiCpuExceptionHandlerLib.inf)?
> 
> Hmmm, this is a very good point; after all, the updated (=reverted)
> "SecPeiCpuExceptionHandlerLib.inf" instance will not build with XCODE5.
> Therefore we should list both lib instance INF files under [Components],
> but make "SecPeiCpuExceptionHandlerLib.inf" conditional on non-XCODE5.
> 
> </Quote>
> 
> Xcode5SecPeiCpuExceptionHandlerLib.inf could be added to the ignore list 
> in the CI yaml file. PR gating CI currently only uses GCC and VS2017/19 
> and shouldn’t have a problem with the reverted lib. This makes 
> Xcode5SecPeiCpuExceptionHandlerLib the exception which can be documented 
> in the ignore list (why it’s being ignored).
> 
> Thoughts?

I'll give those suggestions a try and see how they work. Thanks!

Tom

> 
> - Bret
> 
> *From: *Laszlo Ersek via groups.io <mailto:lersek=redhat.com@groups.io>
> *Sent: *Wednesday, May 6, 2020 9:33 AM
> *To: *Tom Lendacky <mailto:thomas.lendacky@amd.com>; devel@edk2.groups.io 
> <mailto:devel@edk2.groups.io>
> *Cc: *Jordan Justen <mailto:jordan.l.justen@intel.com>; Ard Biesheuvel 
> <mailto:ard.biesheuvel@linaro.org>; Liming Gao 
> <mailto:liming.gao@intel.com>; Eric Dong <mailto:eric.dong@intel.com>; Ray 
> Ni <mailto:ray.ni@intel.com>; Brijesh Singh 
> <mailto:brijesh.singh@amd.com>; Anthony Perard 
> <mailto:anthony.perard@citrix.com>; Benjamin You 
> <mailto:benjamin.you@intel.com>; Guo Dong <mailto:guo.dong@intel.com>; 
> Julien Grall <mailto:julien@xen.org>; Maurice Ma 
> <mailto:maurice.ma@intel.com>; Andrew Fish <mailto:afish@apple.com>
> *Subject: *[EXTERNAL] Re: [edk2-devel] [PATCH 4/4] 
> UefiCpuPkg/CpuExceptionHandler: Revert binary patching in standard 
> CpuExceptionHandlerLib
> 
> On 05/06/20 16:35, Tom Lendacky wrote:
>  > On 5/5/20 5:15 PM, Laszlo Ersek via groups.io wrote:
>  >> On 05/01/20 22:17, Lendacky, Thomas wrote:
>  >>> BZ:
>  >>> 
> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2340&amp;data=02%7C01%7CBret.Barkelew%40microsoft.com%7Ca9365fbefc53477c9e3308d7f1db4560%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637243796372782584&amp;sdata=R%2B5IgncDzx7viv3yIwX3MloX1QlzuUJ4bZlKnc%2B0xoI%3D&amp;reserved=0 
> <https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2340&data=02%7C01%7Cthomas.lendacky%40amd.com%7C4d968ebc52544accf1b608d7f1e865f8%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637243852756214038&sdata=p9f6gdfmOnbTMx7u7Ao4jw6jEqcZ2DVXENwHhwcETjo%3D&reserved=0>
>  >>>
>  >>>
>  >>> Now that an XCODE5 specific CpuExceptionHandlerLib library is in place,
>  >>> revert the changes made to the ExceptionHandlerAsm.nasm in commit
>  >>> 2db0ccc2d7fe ("UefiCpuPkg: Update CpuExceptionHandlerLib pass XCODE5
>  >>> tool
>  >>> chain") so that binary patching of flash code is not performed.
>  >>>
>  >>> Cc: Eric Dong <eric.dong@intel.com>
>  >>> Cc: Ray Ni <ray.ni@intel.com>
>  >>> Cc: Laszlo Ersek <lersek@redhat.com>
>  >>> Cc: Liming Gao <liming.gao@intel.com>
>  >>> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
>  >>> ---
>  >>>   .../X64/ExceptionHandlerAsm.nasm              | 25 +++++--------------
>  >>>   1 file changed, 6 insertions(+), 19 deletions(-)
>  >>>
>  >>> diff --git
>  >>> a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> index 19198f273137..3814f9de3703 100644
>  >>> ---
>  >>> a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> +++
>  >>> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> @@ -34,7 +34,7 @@ AsmIdtVectorBegin:
>  >>>       db      0x6a        ; push  #VectorNum
>  >>>       db      ($ - AsmIdtVectorBegin) / ((AsmIdtVectorEnd -
>  >>> AsmIdtVectorBegin) / 32) ; VectorNum
>  >>>       push    rax
>  >>> -    mov     rax, strict qword 0 ;    mov     rax,
>  >>> ASM_PFX(CommonInterruptEntry)
>  >>> +    mov     rax, ASM_PFX(CommonInterruptEntry)
>  >>>       jmp     rax
>  >>>   %endrep
>  >>>   AsmIdtVectorEnd:
>  >>> @@ -44,8 +44,7 @@ HookAfterStubHeaderBegin:
>  >>>   @VectorNum:
>  >>>       db      0          ; 0 will be fixed
>  >>>       push    rax
>  >>> -    mov     rax, strict qword 0 ;     mov     rax,
>  >>> HookAfterStubHeaderEnd
>  >>> -JmpAbsoluteAddress:
>  >>> +    mov     rax, HookAfterStubHeaderEnd
>  >>>       jmp     rax
>  >>>   HookAfterStubHeaderEnd:
>  >>>       mov     rax, rsp
>  >>> @@ -257,7 +256,8 @@ HasErrorCode:
>  >>>       ; and make sure RSP is 16-byte aligned
>  >>>       ;
>  >>>       sub     rsp, 4 * 8 + 8
>  >>> -    call    ASM_PFX(CommonExceptionHandler)
>  >>> +    mov     rax, ASM_PFX(CommonExceptionHandler)
>  >>> +    call    rax
>  >>>       add     rsp, 4 * 8 + 8
>  >>>
>  >>>       cli
>  >>> @@ -365,24 +365,11 @@ DoIret:
>  >>>   ; comments here for definition of address map
>  >>>   global ASM_PFX(AsmGetTemplateAddressMap)
>  >>>   ASM_PFX(AsmGetTemplateAddressMap):
>  >>> -    lea     rax, [AsmIdtVectorBegin]
>  >>> +    mov     rax, AsmIdtVectorBegin
>  >>>       mov     qword [rcx], rax
>  >>>       mov     qword [rcx + 0x8],  (AsmIdtVectorEnd -
>  >>> AsmIdtVectorBegin) / 32
>  >>> -    lea     rax, [HookAfterStubHeaderBegin]
>  >>> +    mov     rax, HookAfterStubHeaderBegin
>  >>>       mov     qword [rcx + 0x10], rax
>  >>> -
>  >>> -; Fix up CommonInterruptEntry address
>  >>> -    lea    rax, [ASM_PFX(CommonInterruptEntry)]
>  >>> -    lea    rcx, [AsmIdtVectorBegin]
>  >>> -%rep  32
>  >>> -    mov    qword [rcx + (JmpAbsoluteAddress - 8 -
>  >>> HookAfterStubHeaderBegin)], rax
>  >>> -    add    rcx, (AsmIdtVectorEnd - AsmIdtVectorBegin) / 32
>  >>> -%endrep
>  >>> -; Fix up HookAfterStubHeaderEnd
>  >>> -    lea    rax, [HookAfterStubHeaderEnd]
>  >>> -    lea    rcx, [JmpAbsoluteAddress]
>  >>> -    mov    qword [rcx - 8], rax
>  >>> -
>  >>>       ret
>  >>>
>  >>>
>  >>> 
> ;-------------------------------------------------------------------------------------
>  >>>
>  >>>
>  >>
>  >> With this patch applied, the differences with the "original" remain:
>  >>
>  >> $ git diff 2db0ccc2d7fe^..HEAD -- \
>  >>
>  >> UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>
>  >>> diff --git
>  >>> a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> index ba8993d84b0b..3814f9de3703 100644
>  >>> ---
>  >>> a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> +++
>  >>> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm
>  >>> @@ -1,12 +1,6 @@
>  >>>
>  >>> 
> ;------------------------------------------------------------------------------
>  >>> ;
>  >>> -; Copyright (c) 2012 - 2014, Intel Corporation. All rights
>  >>> reserved.<BR>
>  >>> -; This program and the accompanying materials
>  >>> -; are licensed and made available under the terms and conditions of
>  >>> the BSD License
>  >>> -; which accompanies this distribution.  The full text of the license
>  >>> may be found at
>  >>> -;
>  >>> 
> https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fopensource.org%2Flicenses%2Fbsd-license.php&amp;data=02%7C01%7CBret.Barkelew%40microsoft.com%7Ca9365fbefc53477c9e3308d7f1db4560%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637243796372792580&amp;sdata=CZovXRJ6HURgo6sz%2FDi55SUy9IsrJ2pFzcHX%2Bp%2Fv8qA%3D&amp;reserved=0 
> <https://nam11.safelinks.protection.outlook.com/?url=http%3A%2F%2Fopensource.org%2Flicenses%2Fbsd-license.php&data=02%7C01%7Cthomas.lendacky%40amd.com%7C4d968ebc52544accf1b608d7f1e865f8%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637243852756214038&sdata=6TFEj80GpLSavcQeRvxn2uCPLVK6HxGN1yKB2PPS7Yk%3D&reserved=0>.
>  >>>
>  >>> -;
>  >>> -; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
>  >>> -; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS
>  >>> OR IMPLIED.
>  >>> +; Copyright (c) 2012 - 2018, Intel Corporation. All rights
>  >>> reserved.<BR>
>  >>> +; SPDX-License-Identifier: BSD-2-Clause-Patent
>  >>>   ;
>  >>>   ; Module Name:
>  >>>   ;
>  >>
>  >> This is expected.
>  >>
>  >>> @@ -189,17 +183,19 @@ HasErrorCode:
>  >>>       push    rax
>  >>>       push    rax
>  >>>       sidt    [rsp]
>  >>> -    xchg    rax, [rsp + 2]
>  >>> -    xchg    rax, [rsp]
>  >>> -    xchg    rax, [rsp + 8]
>  >>> +    mov     bx, word [rsp]
>  >>> +    mov     rax, qword [rsp + 2]
>  >>> +    mov     qword [rsp], rax
>  >>> +    mov     word [rsp + 8], bx
>  >>>
>  >>>       xor     rax, rax
>  >>>       push    rax
>  >>>       push    rax
>  >>>       sgdt    [rsp]
>  >>> -    xchg    rax, [rsp + 2]
>  >>> -    xchg    rax, [rsp]
>  >>> -    xchg    rax, [rsp + 8]
>  >>> +    mov     bx, word [rsp]
>  >>> +    mov     rax, qword [rsp + 2]
>  >>> +    mov     qword [rsp], rax
>  >>> +    mov     word [rsp + 8], bx
>  >>>
>  >>>   ;; UINT64  Ldtr, Tr;
>  >>>       xor     rax, rax
>  >>>
>  >>
>  >> Also expected, from commit f4c898f2b2db
>  >> ("UefiCpuPkg/CpuExceptionHandlerLib: Fix split lock", 2019-09-20).
>  >>
>  >> Therefore, for this patch:
>  >>
>  >> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
>  >>
>  >> *However*, this revert must be restricted to the original
>  >> "SecPeiCpuExceptionHandlerLib.inf" instance, i.e. where binary patching
>  >> is not acceptable. (Otherwise, in combination with my request (1) under
>  >> patch#1, we'd needlessly break the PEI / DXE / SMM lib instances under
>  >> XCODE5.)
>  >>
>  >> (1) Therefore, please insert a new patch between patches #1 and #2, such
>  >> that the new patch flip
>  >>
>  >> - PeiCpuExceptionHandlerLib.inf
>  >> - DxeCpuExceptionHandlerLib.inf
>  >> - SmmCpuExceptionHandlerLib.inf
>  >>
>  >> to using "Xcode5ExceptionHandlerAsm.nasm".
>  >>
>  >> (If you wish, you can squash these modifications into the updated
>  >> patch#1, rather than inserting them as a separate patch between #1 and
>  >> #2.)
>  >>
>  >>
>  >> In summary, I suggest the following end-state:
>  >>
>  >> - we should have a self-patching NASM file, and one without
>  >> self-patching,
>  >>
>  >> - the self-patching variant should be called
>  >> "Xcode5ExceptionHandlerAsm.nasm" (because the *only* reason for the
>  >> self-patching is xcode5),
>  >>
>  >> - we should have 5 INF files in total,
>  >>
>  >> - "PeiCpuExceptionHandlerLib.inf", "DxeCpuExceptionHandlerLib.inf",
>  >> "SmmCpuExceptionHandlerLib.inf" should use
>  >> "Xcode5ExceptionHandlerAsm.nasm" (the self-patching is harmless),
>  >>
>  >> - "SecPeiCpuExceptionHandlerLib.inf" should use
>  >> "ExceptionHandlerAsm.nasm" (self-patching is invalid, so don't do it),
>  >>
>  >> - "Xcode5SecPeiCpuExceptionHandlerLib.inf" should use
>  >> "Xcode5ExceptionHandlerAsm.nasm" (the self-patching is invalid, but we
>  >> can't avoid it when building with XCODE5),
>  >>
>  >> - platforms should resolve the CpuExceptionHandlerLib class to
>  >> "Xcode5SecPeiCpuExceptionHandlerLib.inf" only for the XCODE5 toolchain
>  >> *and* for the SEC phase.
>  >
>  > Ok, I have v2 ready to go, but when I ran it through the integration
>  > tests using a pull request I received some errors (see
>  > 
> https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdev.azure.com%2Ftianocore%2Fedk2-ci%2F_build%2Fresults%3FbuildId%3D6516%26view%3Dresults&amp;data=02%7C01%7CBret.Barkelew%40microsoft.com%7Ca9365fbefc53477c9e3308d7f1db4560%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637243796372792580&amp;sdata=N2aYxzfr%2BNw7hkhBTEg0C%2Fm4Hv00xXBZhSz3%2FFgiW1s%3D&amp;reserved=0 
> <https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdev.azure.com%2Ftianocore%2Fedk2-ci%2F_build%2Fresults%3FbuildId%3D6516%26view%3Dresults&data=02%7C01%7Cthomas.lendacky%40amd.com%7C4d968ebc52544accf1b608d7f1e865f8%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637243852756224001&sdata=xccjYXSqyhRJoGrINVWuLVsOql8pAWt5YQjU%2FSsZHWU%3D&reserved=0>).
>  > The error is the same in all cases and the error message is:
>  >
>  > CRITICAL -
>  > 
> UefiCpuPkg/Library/CpuExceptionHandlerLib/Xcode5SecPeiCpuExceptionHandlerLib.inf
>  > not in UefiCpuPkg/UefiCpuPkg.dsc
>  >
>  > Any idea about the reason for this message?
> 
> The reason is that the CI code found a library instance (INF) in
> UefiCpuPkg that cannot be built *stand-alone* (i.e. without being
> consumed by a different UEFI module / INF file).
> 
> In core packages, library instances should be buildable stand-alone with
> the "-m" build flag, and for that, the lib instances need to be listed
> in the [Components] section.
> 
>  > Is it due to the
>  > [Components] section of the UefiCpuPkg/UefiCpuPkg.dsc file?
> 
> Yes.
> 
>  > Should that
>  > section not use the !if check and just list both .inf files
>  > (SecPeiCpuExceptionHandlerLib.inf and
>  > Xcode5SecPeiCpuExceptionHandlerLib.inf)?
> 
> Hmmm, this is a very good point; after all, the updated (=reverted)
> "SecPeiCpuExceptionHandlerLib.inf" instance will not build with XCODE5.
> Therefore we should list both lib instance INF files under [Components],
> but make "SecPeiCpuExceptionHandlerLib.inf" conditional on non-XCODE5.
> 
> I wonder how the CI logic will cope with this!
> 
> Thanks,
> Laszlo
> 
> 
> 

  reply	other threads:[~2020-05-06 19:51 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-01 20:17 [PATCH 0/4] XCODE5 toolchain binary patching fix Lendacky, Thomas
2020-05-01 20:17 ` [PATCH 1/4] UefiCpuPkg/CpuExceptionHandler: Make XCODE5 changes toolchain specific Lendacky, Thomas
2020-05-05 21:39   ` [edk2-devel] " Laszlo Ersek
2020-05-05 22:09     ` Lendacky, Thomas
2020-05-01 20:17 ` [PATCH 2/4] UefiPayloadPkg: Use toolchain appropriate CpuExceptionHandlerLib Lendacky, Thomas
2020-05-05 22:19   ` [edk2-devel] " Laszlo Ersek
2020-05-01 20:17 ` [PATCH 3/4] OvmfPkg: " Lendacky, Thomas
2020-05-05 21:49   ` [edk2-devel] " Laszlo Ersek
2020-05-01 20:17 ` [PATCH 4/4] UefiCpuPkg/CpuExceptionHandler: Revert binary patching in standard CpuExceptionHandlerLib Lendacky, Thomas
2020-05-01 20:49   ` [EXTERNAL] [edk2-devel] " Bret Barkelew
2020-05-05 22:15   ` Laszlo Ersek
2020-05-06 14:35     ` Lendacky, Thomas
2020-05-06 14:53       ` Liming Gao
2020-05-06 16:33       ` Laszlo Ersek
2020-05-06 18:07         ` [EXTERNAL] " Bret Barkelew
2020-05-06 19:51           ` Lendacky, Thomas [this message]
     [not found] ` <160B00E54624ADAA.10991@groups.io>
2020-05-05 18:50   ` [edk2-devel] [PATCH 1/4] UefiCpuPkg/CpuExceptionHandler: Make XCODE5 changes toolchain specific Lendacky, Thomas

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=4da4138d-1dc9-128f-6524-a71f85811327@amd.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