This module contains EBC support routines that are customized based on\r
the target processor.\r
\r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 2010, Intel Corporation. <BR>\r
All rights reserved. This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
// put our return address and frame pointer on the VM stack.\r
// Then set the VM's IP to new EBC code.\r
//\r
- VmPtr->R[0] -= 8;\r
- VmWriteMemN (VmPtr, (UINTN) VmPtr->R[0], (UINTN) FramePtr);\r
- VmPtr->FramePtr = (VOID *) (UINTN) VmPtr->R[0];\r
- VmPtr->R[0] -= 8;\r
- VmWriteMem64 (VmPtr, (UINTN) VmPtr->R[0], (UINT64) (UINTN) (VmPtr->Ip + Size));\r
+ VmPtr->Gpr[0] -= 8;\r
+ VmWriteMemN (VmPtr, (UINTN) VmPtr->Gpr[0], (UINTN) FramePtr);\r
+ VmPtr->FramePtr = (VOID *) (UINTN) VmPtr->Gpr[0];\r
+ VmPtr->Gpr[0] -= 8;\r
+ VmWriteMem64 (VmPtr, (UINTN) VmPtr->Gpr[0], (UINT64) (UINTN) (VmPtr->Ip + Size));\r
\r
VmPtr->Ip = (VMIP) (UINTN) TargetEbcAddr;\r
} else {\r
//\r
// Get return value and advance the IP.\r
//\r
- VmPtr->R[7] = EbcLLGetReturnValue ();\r
+ VmPtr->Gpr[7] = EbcLLGetReturnValue ();\r
VmPtr->Ip += Size;\r
}\r
}\r
@return The value returned by the EBC application we're going to run.\r
\r
**/\r
-STATIC\r
UINT64\r
EbcInterpret (\r
IN OUT UINTN Arg1,\r
return Status;\r
}\r
VmContext.StackTop = (UINT8*)VmContext.StackPool + (STACK_REMAIN_SIZE);\r
- VmContext.R[0] = (UINT64)(UINTN) ((UINT8*)VmContext.StackPool + STACK_POOL_SIZE);\r
- VmContext.HighStackBottom = (UINTN)VmContext.R[0];\r
- VmContext.R[0] &= ~(sizeof (UINTN) - 1);\r
- VmContext.R[0] -= sizeof (UINTN);\r
+ VmContext.Gpr[0] = (UINT64)(UINTN) ((UINT8*)VmContext.StackPool + STACK_POOL_SIZE);\r
+ VmContext.HighStackBottom = (UINTN)VmContext.Gpr[0];\r
+ VmContext.Gpr[0] &= ~(sizeof (UINTN) - 1);\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
\r
//\r
// Put a magic value in the stack gap, then adjust down again\r
//\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) VM_STACK_KEY_VALUE;\r
- VmContext.StackMagicPtr = (UINTN *) (UINTN) VmContext.R[0];\r
- VmContext.LowStackTop = (UINTN) VmContext.R[0];\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) VM_STACK_KEY_VALUE;\r
+ VmContext.StackMagicPtr = (UINTN *) (UINTN) VmContext.Gpr[0];\r
+ VmContext.LowStackTop = (UINTN) VmContext.Gpr[0];\r
\r
//\r
// For IA32, this is where we say our return address is\r
//\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg16;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg15;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg14;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg13;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg12;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg11;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg10;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg9;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg8;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg7;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg6;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg5;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg4;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg3;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg2;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) Arg1;\r
- VmContext.R[0] -= 16;\r
- VmContext.StackRetAddr = (UINT64) VmContext.R[0];\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg16;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg15;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg14;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg13;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg12;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg11;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg10;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg9;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg8;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg7;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg6;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg5;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg4;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg3;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg2;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) Arg1;\r
+ VmContext.Gpr[0] -= 16;\r
+ VmContext.StackRetAddr = (UINT64) VmContext.Gpr[0];\r
\r
//\r
// We need to keep track of where the EBC stack starts. This way, if the EBC\r
// Return the value in R[7] unless there was an error\r
//\r
ReturnEBCStack(StackIndex);\r
- return (UINT64) VmContext.R[7];\r
+ return (UINT64) VmContext.Gpr[7];\r
}\r
\r
\r
@return The value returned by the EBC application we're going to run.\r
\r
**/\r
-STATIC\r
UINT64\r
ExecuteEbcImageEntryPoint (\r
IN EFI_HANDLE ImageHandle,\r
return Status;\r
}\r
VmContext.StackTop = (UINT8*)VmContext.StackPool + (STACK_REMAIN_SIZE);\r
- VmContext.R[0] = (UINT64)(UINTN) ((UINT8*)VmContext.StackPool + STACK_POOL_SIZE);\r
- VmContext.HighStackBottom = (UINTN)VmContext.R[0];\r
- VmContext.R[0] -= sizeof (UINTN);\r
+ VmContext.Gpr[0] = (UINT64)(UINTN) ((UINT8*)VmContext.StackPool + STACK_POOL_SIZE);\r
+ VmContext.HighStackBottom = (UINTN)VmContext.Gpr[0];\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
\r
//\r
// Put a magic value in the stack gap, then adjust down again\r
//\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) VM_STACK_KEY_VALUE;\r
- VmContext.StackMagicPtr = (UINTN *) (UINTN) VmContext.R[0];\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) VM_STACK_KEY_VALUE;\r
+ VmContext.StackMagicPtr = (UINTN *) (UINTN) VmContext.Gpr[0];\r
\r
//\r
// Align the stack on a natural boundary\r
- // VmContext.R[0] &= ~(sizeof(UINTN) - 1);\r
+ // VmContext.Gpr[0] &= ~(sizeof(UINTN) - 1);\r
//\r
- VmContext.LowStackTop = (UINTN) VmContext.R[0];\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) SystemTable;\r
- VmContext.R[0] -= sizeof (UINTN);\r
- *(UINTN *) (UINTN) (VmContext.R[0]) = (UINTN) ImageHandle;\r
+ VmContext.LowStackTop = (UINTN) VmContext.Gpr[0];\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) SystemTable;\r
+ VmContext.Gpr[0] -= sizeof (UINTN);\r
+ *(UINTN *) (UINTN) (VmContext.Gpr[0]) = (UINTN) ImageHandle;\r
\r
- VmContext.R[0] -= 16;\r
- VmContext.StackRetAddr = (UINT64) VmContext.R[0];\r
+ VmContext.Gpr[0] -= 16;\r
+ VmContext.StackRetAddr = (UINT64) VmContext.Gpr[0];\r
//\r
// VM pushes 16-bytes for return address. Simulate that here.\r
//\r
//\r
// Return the value in R[7] unless there was an error\r
//\r
- return (UINT64) VmContext.R[7];\r
+ return (UINT64) VmContext.Gpr[7];\r
}\r
\r
\r
// Stick in a load of ecx with the address of appropriate VM function.\r
// mov ecx 12345678h => 0xB9 0x78 0x56 0x34 0x12\r
//\r
- if (Flags & FLAG_THUNK_ENTRY_POINT) {\r
+ if ((Flags & FLAG_THUNK_ENTRY_POINT) != 0) {\r
Addr = (UINT32) (UINTN) ExecuteEbcImageEntryPoint;\r
} else {\r
Addr = (UINT32) (UINTN) EbcInterpret;\r