From bab427db7d91689247914608b975e629ccb34d7e Mon Sep 17 00:00:00 2001 From: andrewfish Date: Tue, 12 Jul 2011 03:01:34 +0000 Subject: MdePkg: Fix X64 clang compile issues. Fixed issues with X64 clang, and also make StackSwitch push a zero on the new stack to prevent a stack unwind into memory that is no longer valid. signed-off-by: andrewfish reviewed-by: lgao4 reviewed-by: mdkinney git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12007 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S (limited to 'MdePkg/Library/BaseLib/Ia32') diff --git a/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S b/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S new file mode 100644 index 0000000000..4fe0e35569 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.S @@ -0,0 +1,48 @@ +#------------------------------------------------------------------------------ +# +# Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
+# Portions copyright (c) 2011, Apple Inc. 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: +# +# InternalSwitchStack.S +# +# Abstract: +# +# Implementation of a stack switch on IA-32. +# +#------------------------------------------------------------------------------ + +ASM_GLOBAL ASM_PFX(InternalSwitchStack) + +#------------------------------------------------------------------------------ +# VOID +# EFIAPI +# InternalSwitchStack ( +# IN SWITCH_STACK_ENTRY_POINT EntryPoint, +# IN VOID *Context1, OPTIONAL +# IN VOID *Context2, OPTIONAL +# IN VOID *NewStack +# ); +#------------------------------------------------------------------------------ +ASM_PFX(InternalSwitchStack): + pushl %ebp + movl %esp, %ebp + + movl 20(%ebp), %esp # switch stack + subl $8, %esp + + movl 16(%ebp), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, (%esp) + pushl $0 # keeps gdb from unwinding stack + jmp *8(%ebp) # call and never return + -- cgit v1.2.3