From 1760cf81e4b1847c6823ea3514a78dd120e19b6e Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Thu, 22 Dec 2016 15:57:14 +0800 Subject: MdePkg: Move to new location Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- Core/MdePkg/Library/BaseLib/Ia32/LongJump.c | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Core/MdePkg/Library/BaseLib/Ia32/LongJump.c (limited to 'Core/MdePkg/Library/BaseLib/Ia32/LongJump.c') diff --git a/Core/MdePkg/Library/BaseLib/Ia32/LongJump.c b/Core/MdePkg/Library/BaseLib/Ia32/LongJump.c new file mode 100644 index 0000000000..73973a9cce --- /dev/null +++ b/Core/MdePkg/Library/BaseLib/Ia32/LongJump.c @@ -0,0 +1,50 @@ +/** @file + Implementation of _LongJump() on IA-32. + + Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
+ 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 { + 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] + } +} + -- cgit v1.2.3