]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/Ebc/Dxe/x64/EbcLowLevel.asm
1. Advance IP in case of Break(3) in breakpoint exception
[mirror_edk2.git] / EdkModulePkg / Universal / Ebc / Dxe / x64 / EbcLowLevel.asm
index 59394621ba2b5e4d8e57af22dcfd2b2dd0b4fc6f..7b59e93aa1f935a498f0aac05bd499073368b9f0 100644 (file)
@@ -49,7 +49,11 @@ text SEGMENT
 ; Destroys no working registers.\r
 ;****************************************************************************\r
 ; VOID EbcLLCALLEXNative(UINTN FuncAddr, UINTN NewStackPointer, VOID *FramePtr)\r
-EbcLLCALLEXNative        PROC\r
+\r
+CopyMem  PROTO  Destination:PTR DWORD, Source:PTR DWORD, Count:DWORD\r
+\r
+\r
+EbcLLCALLEXNative        PROC    NEAR    PUBLIC\r
       push   rbp\r
       push   rbx\r
       mov    rbp, rsp\r
@@ -59,7 +63,12 @@ EbcLLCALLEXNative        PROC
       mov    rbx, rcx\r
 \r
       ; Set stack pointer to new value\r
-      mov    rsp, rdx      \r
+      sub    r8,  rdx\r
+      sub    rsp, r8\r
+      mov    rcx, rsp\r
+      sub    rsp, 20h\r
+      call   CopyMem      \r
+      add    rsp, 20h\r
       \r
       ; Considering the worst case, load 4 potiential arguments\r
       ; into registers.\r
@@ -92,7 +101,7 @@ EbcLLCALLEXNative    ENDP
 ; Returns:\r
 ;     The contents of the register in which the entry point is passed.\r
 ;\r
-EbcLLGetEbcEntryPoint        PROC\r
+EbcLLGetEbcEntryPoint        PROC    NEAR    PUBLIC\r
     ret\r
 EbcLLGetEbcEntryPoint    ENDP\r
 \r
@@ -115,7 +124,7 @@ EbcLLGetEbcEntryPoint    ENDP
 ;--*/\r
 \r
 ; UINTN EbcLLGetStackPointer()            \r
-EbcLLGetStackPointer        PROC\r
+EbcLLGetStackPointer        PROC    NEAR    PUBLIC\r
     mov    rax, rsp      ; get current stack pointer\r
     ; Stack adjusted by this much when we were called,\r
     ; For this function, it's 4.\r
@@ -136,7 +145,7 @@ EbcLLGetStackPointer    ENDP
 ; Returns:\r
 ;     The unmodified value returned by the native code.\r
 ;\r
-EbcLLGetReturnValue   PROC\r
+EbcLLGetReturnValue   PROC    NEAR    PUBLIC\r
     ret\r
 EbcLLGetReturnValue    ENDP\r
 \r