Reviewed-by: Liming Gao <liming....@intel.com> >-----Original Message----- >From: Zhang, Shenglei >Sent: Tuesday, April 09, 2019 11:22 AM >To: devel@edk2.groups.io >Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming ><liming....@intel.com> >Subject: [PATCH] MdePkg/BaseLib: Remove LongJump.c and SetJump.c > >MdePkg BaseLib still uses the inline X86 assembly code >in C code files.For now, inline SetJump/LongJump() can be removed. >https://bugzilla.tianocore.org/show_bug.cgi?id=1163 > >Cc: Michael D Kinney <michael.d.kin...@intel.com> >Cc: Liming Gao <liming....@intel.com> >Contributed-under: TianoCore Contribution Agreement 1.1 >Signed-off-by: Shenglei Zhang <shenglei.zh...@intel.com> >--- > MdePkg/Library/BaseLib/BaseLib.inf | 8 +- > MdePkg/Library/BaseLib/Ia32/LongJump.c | 76 ------------------- > MdePkg/Library/BaseLib/Ia32/SetJump.c | 101 ------------------------- > 3 files changed, 2 insertions(+), 183 deletions(-) > delete mode 100644 MdePkg/Library/BaseLib/Ia32/LongJump.c > delete mode 100644 MdePkg/Library/BaseLib/Ia32/SetJump.c > >diff --git a/MdePkg/Library/BaseLib/BaseLib.inf >b/MdePkg/Library/BaseLib/BaseLib.inf >index 16829deeb4..344cb58249 100644 >--- a/MdePkg/Library/BaseLib/BaseLib.inf >+++ b/MdePkg/Library/BaseLib/BaseLib.inf >@@ -96,7 +96,6 @@ > Ia32/WriteCr0.c | MSFT > Ia32/WriteMsr64.c | MSFT > Ia32/SwapBytes64.c | MSFT >- Ia32/SetJump.c | MSFT > Ia32/RRotU64.c | MSFT > Ia32/RShiftU64.c | MSFT > Ia32/ReadPmc.c | MSFT >@@ -140,7 +139,6 @@ > Ia32/MultU64x32.c | MSFT > Ia32/LShiftU64.c | MSFT > Ia32/LRotU64.c | MSFT >- Ia32/LongJump.c | MSFT > Ia32/Invd.c | MSFT > Ia32/FxRestore.c | MSFT > Ia32/FxSave.c | MSFT >@@ -190,7 +188,6 @@ > Ia32/WriteCr0.nasm| INTEL > Ia32/WriteMsr64.nasm| INTEL > Ia32/SwapBytes64.nasm| INTEL >- Ia32/SetJump.nasm| INTEL > Ia32/RRotU64.nasm| INTEL > Ia32/RShiftU64.nasm| INTEL > Ia32/ReadPmc.nasm| INTEL >@@ -234,7 +231,6 @@ > Ia32/MultU64x32.nasm| INTEL > Ia32/LShiftU64.nasm| INTEL > Ia32/LRotU64.nasm| INTEL >- Ia32/LongJump.nasm| INTEL > Ia32/Invd.nasm| INTEL > Ia32/FxRestore.nasm| INTEL > Ia32/FxSave.nasm| INTEL >@@ -268,8 +264,8 @@ > Ia32/Monitor.nasm| GCC > Ia32/CpuIdEx.nasm| GCC > Ia32/CpuId.nasm| GCC >- Ia32/LongJump.nasm| GCC >- Ia32/SetJump.nasm| GCC >+ Ia32/LongJump.nasm >+ Ia32/SetJump.nasm > Ia32/SwapBytes64.nasm| GCC > Ia32/DivU64x64Remainder.nasm| GCC > Ia32/DivU64x32Remainder.nasm| GCC >diff --git a/MdePkg/Library/BaseLib/Ia32/LongJump.c >b/MdePkg/Library/BaseLib/Ia32/LongJump.c >deleted file mode 100644 >index 2c1feb8373..0000000000 >--- a/MdePkg/Library/BaseLib/Ia32/LongJump.c >+++ /dev/null >@@ -1,76 +0,0 @@ >-/** @file >- Implementation of _LongJump() on IA-32. >- >- Copyright (c) 2006 - 2019, 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. >- >-**/ >- >- >-#include "BaseLibInternals.h" >- >- >-/** >- Restores the CPU context that was saved with SetJump(). >- >- Restores the CPU context from the buffer specified by JumpBuffer. >- This function never returns to the caller. >- Instead is resumes execution based on the state of JumpBuffer. >- >- @param JumpBuffer A pointer to CPU context buffer. >- @param Value The value to return when the SetJump() context is >restored. >- >-**/ >-__declspec (naked) >-VOID >-EFIAPI >-InternalLongJump ( >- IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, >- IN UINTN Value >- ) >-{ >- _asm { >- mov eax, [PcdGet32 (PcdControlFlowEnforcementPropertyMask)] >- test eax, eax >- jz CetDone >- _emit 0x0F >- _emit 0x20 >- _emit 0xE0 ; mov eax, cr4 >- bt eax, 23 ; check if CET is enabled >- jnc CetDone >- >- mov edx, [esp + 4] ; edx = JumpBuffer >- mov edx, [edx + 24] ; edx = target SSP >- _emit 0xF3 >- _emit 0x0F >- _emit 0x1E >- _emit 0xC8 ; READSSP EAX >- sub edx, eax ; edx = delta >- mov eax, edx ; eax = delta >- >- shr eax, 2 ; eax = delta/sizeof(UINT32) >- _emit 0xF3 >- _emit 0x0F >- _emit 0xAE >- _emit 0xE8 ; INCSSP EAX >- >-CetDone: >- >- pop eax ; skip return address >- pop edx ; edx <- JumpBuffer >- pop eax ; eax <- Value >- mov ebx, [edx] >- mov esi, [edx + 4] >- mov edi, [edx + 8] >- mov ebp, [edx + 12] >- mov esp, [edx + 16] >- jmp dword ptr [edx + 20] >- } >-} >- >diff --git a/MdePkg/Library/BaseLib/Ia32/SetJump.c >b/MdePkg/Library/BaseLib/Ia32/SetJump.c >deleted file mode 100644 >index d608fd9ccb..0000000000 >--- a/MdePkg/Library/BaseLib/Ia32/SetJump.c >+++ /dev/null >@@ -1,101 +0,0 @@ >-/** @file >- Implementation of SetJump() on IA-32. >- >- Copyright (c) 2006 - 2019, 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. >- >-**/ >- >- >-#include "BaseLibInternals.h" >- >-/** >- Worker function that checks ASSERT condition for JumpBuffer >- >- Checks ASSERT condition for JumpBuffer. >- >- If JumpBuffer is NULL, then ASSERT(). >- For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then >ASSERT(). >- >- @param JumpBuffer A pointer to CPU context buffer. >- >-**/ >-VOID >-EFIAPI >-InternalAssertJumpBuffer ( >- IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer >- ); >- >-/** >- Saves the current CPU context that can be restored with a call to LongJump() >- and returns 0. >- >- Saves the current CPU context in the buffer specified by JumpBuffer and >- returns 0. The initial call to SetJump() must always return 0. Subsequent >- calls to LongJump() cause a non-zero value to be returned by SetJump(). >- >- If JumpBuffer is NULL, then ASSERT(). >- For IPF CPUs, if JumpBuffer is not aligned on a 16-byte boundary, then >ASSERT(). >- >- @param JumpBuffer A pointer to CPU context buffer. >- >- @retval 0 Indicates a return from SetJump(). >- >-**/ >-_declspec (naked) >-RETURNS_TWICE >-UINTN >-EFIAPI >-SetJump ( >- OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer >- ) >-{ >- _asm { >- push [esp + 4] >- call InternalAssertJumpBuffer >- pop ecx >- pop ecx >- mov edx, [esp] >- >- xor eax, eax >- mov [edx + 24], eax ; save 0 to SSP >- >- mov eax, [PcdGet32 (PcdControlFlowEnforcementPropertyMask)] >- test eax, eax >- jz CetDone >- _emit 0x0F >- _emit 0x20 >- _emit 0xE0 ; mov eax, cr4 >- bt eax, 23 ; check if CET is enabled >- jnc CetDone >- >- mov eax, 1 >- _emit 0xF3 >- _emit 0x0F >- _emit 0xAE >- _emit 0xE8 ; INCSSP EAX to read original SSP >- _emit 0xF3 >- _emit 0x0F >- _emit 0x1E >- _emit 0xC8 ; READSSP EAX >- mov [edx + 0x24], eax ; save SSP >- >-CetDone: >- >- mov [edx], ebx >- mov [edx + 4], esi >- mov [edx + 8], edi >- mov [edx + 12], ebp >- mov [edx + 16], esp >- mov [edx + 20], ecx >- xor eax, eax >- jmp ecx >- } >-} >- >-- >2.18.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#38849): https://edk2.groups.io/g/devel/message/38849 Mute This Topic: https://groups.io/mt/30995525/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-