MdePkg/Library/BaseLib/Ia32/SetJump.S File Reference
Detailed Description
#------------------------------------------------------------------------------
#
# 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.
#
# Module Name:
#
# SetJump.S
#
# Abstract:
#
# Implementation of
SetJump() on IA-32.
#
#------------------------------------------------------------------------------
ASM_GLOBAL
ASM_PFX(SetJump),
ASM_PFX(InternalAssertJumpBuffer)
#------------------------------------------------------------------------------
# UINTN
# EFIAPI
# SetJump (
# OUT
BASE_LIBRARY_JUMP_BUFFER *JumpBuffer
# );
#------------------------------------------------------------------------------
ASM_PFX(SetJump):
pushl 0x4(esp)
call
ASM_PFX(InternalAssertJumpBuffer) # To validate JumpBuffer
pop ecx
pop ecx # ecx <- return address
movl (esp), edx
movl ebx, (edx)
movl esi, 4(edx)
movl edi, 8(edx)
movl ebp, 12(edx)
movl esp, 16(edx)
movl ecx, 20(edx) # eip value to restore in LongJump
xorl eax, eax
jmp *ecx