]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/Ebc/Dxe/EbcExecute.c
1. Advance IP in case of Break(3) in breakpoint exception
[mirror_edk2.git] / EdkModulePkg / Universal / Ebc / Dxe / EbcExecute.c
index 4b020cb6daa7ff4d6fe0126f3ba38c2094ca8c9f..174e774de3087d81f3be5529346f88093b5ca1a7 100644 (file)
@@ -22,11 +22,6 @@ Abstract:
 #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
@@ -763,10 +758,15 @@ Returns:
       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
@@ -1122,10 +1122,6 @@ Returns:
       EXCEPTION_FLAG_NONE,\r
       VmPtr\r
       );\r
-    //\r
-    // Don't advance the IP\r
-    //\r
-    return EFI_UNSUPPORTED;\r
     break;\r
 \r
   //\r
@@ -4504,19 +4500,8 @@ Returns:
   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