Started trying to get the UnixPkg to compile for X64 with UnixABI. So far only have Sec compiling with Xcode. This is the first step in trying to get the EFIABI to work. Note since SEC is a Posix application it will still need to be Unix ABI.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10649 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
andrewfish
2010-07-14 21:04:21 +00:00
parent 72ed3d7575
commit 67f86803ce
8 changed files with 770 additions and 1062 deletions

View File

@@ -0,0 +1,111 @@
#------------------------------------------------------------------------------
#
# Copyright (c) 2006 - 2008, 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.
#
# Module Name:
#
# SwitchStack.S
#
# Abstract:
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Routine Description:
#
# Routine for switching stacks with 3 parameters EFI ABI
#
# Arguments:
#
# (rcx) EntryPoint - Entry point with new stack.
# (rdx) Context1 - Parameter1 for entry point.
# (r8) Context2 - Parameter2 for entry point.
# (r9) Context3 - Parameter3 for entry point.
# (rsp)0x20 NewStack - The pointer to new stack.
#
# Returns:
#
# None
#
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(MsftPeiSwitchStacks)
ASM_PFX(MsftPeiSwitchStacks):
mov %rcx, %rax
mov %rdx, %rcx
mov %r8, %rdx
mov %r9, %r8
# get new stack from the stack
mov 0x20(%rsp), %rsp # is this off by 8?
#
# Reserve space for register parameters (rcx, rdx, r8 & r9) on the stack,
# in case the callee wishes to spill them.
#
lea -0x20(%rsp), %rsp
call *%rax
#------------------------------------------------------------------------------
# Routine Description:
#
# Routine for switching stacks with 3 parameters UNIX ABI
#
# Arguments:
#
# (rdi) EntryPoint - Entry point with new stack.
# (rsi) Context1 - Parameter1 for entry point.
# (rdx) Context2 - Parameter2 for entry point.
# (rcx) Context3 - Parameter3 for entry point.
# (r8) NewStack - The pointer to new stack.
#
# Returns:
#
# None
#
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(PeiSwitchStacks)
ASM_PFX(PeiSwitchStacks):
mov %rdi, %rax
mov %rsi, %rdi
mov %rdx, %rsi
mov %rcx, %rdx
mov %r8, %rsp
#
# Reserve space for redzone on the stack,
# in case the callee wishes to spill them.
#
lea -0x80(%rsp), %rsp
call *%rax
#------------------------------------------------------------------------------
# VOID
# EFIAPI
# SecSwitchStack (
# UINT32 TemporaryMemoryBase, // Rcx, Rdi
# UINT32 PermenentMemoryBase // Rdx, Rsi
# );
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(SecSwitchStack)
ASM_PFX(SecSwitchStack):
mov %rsp, %rax
sub %rdi, %rax
add %rsi, %rax
mov (%rip), %r10
mov %r10, (%rax)
ret