summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorJonghyun Park <parjong@gmail.com>2016-12-06 10:01:57 +0900
committerJan Kotas <jkotas@microsoft.com>2016-12-05 17:01:57 -0800
commitea8387f07031f42708e419a5629c53d7fbf384d7 (patch)
tree6499715d902248dcbf7ce45ed513eadac42bcf78 /src/vm
parent61ffc9f3fbf80a6b8a04eb2674b057c6cce465f0 (diff)
downloadcoreclr-ea8387f07031f42708e419a5629c53d7fbf384d7.tar.gz
coreclr-ea8387f07031f42708e419a5629c53d7fbf384d7.tar.bz2
coreclr-ea8387f07031f42708e419a5629c53d7fbf384d7.zip
[x86/Linux] Port gmsasm.asm (#8456)
Diffstat (limited to 'src/vm')
-rw-r--r--src/vm/CMakeLists.txt4
-rw-r--r--src/vm/i386/gmsasm.S28
2 files changed, 32 insertions, 0 deletions
diff --git a/src/vm/CMakeLists.txt b/src/vm/CMakeLists.txt
index 02e44d3683..1fb0e41f75 100644
--- a/src/vm/CMakeLists.txt
+++ b/src/vm/CMakeLists.txt
@@ -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/vm/i386/gmsasm.S b/src/vm/i386/gmsasm.S
new file mode 100644
index 0000000000..1e43fd281f
--- /dev/null
+++ b/src/vm/i386/gmsasm.S
@@ -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