#include "EbcInt.h"\r
#include "EbcExecute.h"\r
\r
-//\r
-// VM major/minor version\r
-//\r
-#define VM_MAJOR_VERSION 1\r
-#define VM_MINOR_VERSION 0\r
\r
//\r
// Define some useful data size constants to allow switch statements based on\r
EbcDebugSignalException (EXCEPT_EBC_STACK_FAULT, EXCEPTION_FLAG_FATAL, VmPtr);\r
StackCorrupted = 1;\r
}\r
+ if (!StackCorrupted && ((UINT64)VmPtr->R[0] <= (UINT64)(UINTN) VmPtr->StackTop)) {\r
+ EbcDebugSignalException (EXCEPT_EBC_STACK_FAULT, EXCEPTION_FLAG_FATAL, VmPtr);\r
+ StackCorrupted = 1;\r
+ }\r
}\r
\r
Done:\r
mVmPtr = NULL;\r
+\r
return Status;\r
}\r
\r
EXCEPTION_FLAG_NONE,\r
VmPtr\r
);\r
- //\r
- // Don't advance the IP\r
- //\r
- return EFI_UNSUPPORTED;\r
break;\r
\r
//\r
adjust for the stack gap and return the modified address.\r
\r
--*/\r
-{\r
- if ((Addr >= VmPtr->LowStackTop) && (Addr < VmPtr->HighStackBottom)) {\r
- //\r
- // In the stack gap -- now make sure it's not in the VM itself, which\r
- // would be the case if it's accessing VM register contents.\r
- //\r
- if ((Addr < (UINTN) VmPtr) || (Addr > (UINTN) VmPtr + sizeof (VM_CONTEXT))) {\r
- VmPtr->LastAddrConverted = Addr;\r
- VmPtr->LastAddrConvertedValue = Addr - VmPtr->LowStackTop + VmPtr->HighStackBottom;\r
- return Addr - VmPtr->LowStackTop + VmPtr->HighStackBottom;\r
- }\r
- }\r
-\r
+{ \r
+ ASSERT(((Addr < VmPtr->LowStackTop) || (Addr > VmPtr->HighStackBottom)));\r
return Addr;\r
}\r
\r