On 05/01/20 22:17, Lendacky, Thomas wrote:
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2340
>
> 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.d...@intel.com>
> Cc: Ray Ni <ray...@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> Cc: Liming Gao <liming....@intel.com>
> Signed-off-by: Tom Lendacky <thomas.lenda...@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
> -; http://opensource.org/licenses/bsd-license.php.
> -;
> -; 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 <ler...@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.

Thanks,
Laszlo


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#58666): https://edk2.groups.io/g/devel/message/58666
Mute This Topic: https://groups.io/mt/73406891/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to