[x86/Linux] Port gmsasm.asm (dotnet/coreclr#8456)
authorJonghyun Park <parjong@gmail.com>
Tue, 6 Dec 2016 01:01:57 +0000 (10:01 +0900)
committerJan Kotas <jkotas@microsoft.com>
Tue, 6 Dec 2016 01:01:57 +0000 (17:01 -0800)
Commit migrated from https://github.com/dotnet/coreclr/commit/ea8387f07031f42708e419a5629c53d7fbf384d7

src/coreclr/src/vm/CMakeLists.txt
src/coreclr/src/vm/i386/gmsasm.S [new file with mode: 0644]

index 02e44d3..1fb0e41 100644 (file)
@@ -375,6 +375,10 @@ else(WIN32)
             ${ARCH_SOURCES_DIR}/umthunkstub.S
             ${ARCH_SOURCES_DIR}/virtualcallstubamd64.S
         )
+    elseif(CLR_CMAKE_TARGET_ARCH_I386)
+        set(VM_SOURCES_WKS_ARCH_ASM
+            ${ARCH_SOURCES_DIR}/gmsasm.S
+        )
     elseif(CLR_CMAKE_TARGET_ARCH_ARM)
         set(VM_SOURCES_WKS_ARCH_ASM
             ${ARCH_SOURCES_DIR}/asmhelpers.S
diff --git a/src/coreclr/src/vm/i386/gmsasm.S b/src/coreclr/src/vm/i386/gmsasm.S
new file mode 100644 (file)
index 0000000..1e43fd2
--- /dev/null
@@ -0,0 +1,28 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+.intel_syntax noprefix
+#include "unixasmmacros.inc"
+#include "asmconstants.h"
+
+// int __fastcall LazyMachStateCaptureState(struct LazyMachState *pState);
+LEAF_ENTRY LazyMachStateCaptureState, _TEXT
+    // marks that this is not yet valid
+    mov dword ptr [ecx+MachState__pRetAddr], 0
+
+    // remember register values
+    mov [ecx+MachState__edi], edi
+    mov [ecx+MachState__esi], esi
+    mov [ecx+MachState__ebx], ebx
+    mov [ecx+LazyMachState_captureEbp], ebp
+    mov [ecx+LazyMachState_captureEsp], esp
+
+    // capture return address
+    mov eax, [esp]
+    mov dword ptr [ecx+LazyMachState_captureEip], eax
+
+    // return 0
+    xor eax, eax
+    ret
+LEAF_END LazyMachStateCaptureState, _TEXT