* [PATCH] MdePkg/BaseLib: Remove LongJump.c and SetJump.c
@ 2019-04-09 3:22 Zhang, Shenglei
2019-04-11 5:55 ` Liming Gao
0 siblings, 1 reply; 2+ messages in thread
From: Zhang, Shenglei @ 2019-04-09 3:22 UTC (permalink / raw)
To: devel; +Cc: Michael D Kinney, Liming Gao
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.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] MdePkg/BaseLib: Remove LongJump.c and SetJump.c
2019-04-09 3:22 [PATCH] MdePkg/BaseLib: Remove LongJump.c and SetJump.c Zhang, Shenglei
@ 2019-04-11 5:55 ` Liming Gao
0 siblings, 0 replies; 2+ messages in thread
From: Liming Gao @ 2019-04-11 5:55 UTC (permalink / raw)
To: Zhang, Shenglei, devel@edk2.groups.io; +Cc: Kinney, Michael D
Reviewed-by: Liming Gao <liming.gao@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.kinney@intel.com>; Gao, Liming
><liming.gao@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.kinney@intel.com>
>Cc: Liming Gao <liming.gao@intel.com>
>Contributed-under: TianoCore Contribution Agreement 1.1
>Signed-off-by: Shenglei Zhang <shenglei.zhang@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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-04-11 5:55 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-09 3:22 [PATCH] MdePkg/BaseLib: Remove LongJump.c and SetJump.c Zhang, Shenglei
2019-04-11 5:55 ` Liming Gao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox