[x86/Linux] 16-byte aligned DelayLoad_MethodCall (dotnet/coreclr#10760)
authorJonghyun Park <parjong@gmail.com>
Wed, 12 Apr 2017 21:44:20 +0000 (06:44 +0900)
committerJan Vorlicek <janvorli@microsoft.com>
Wed, 12 Apr 2017 21:44:20 +0000 (23:44 +0200)
Commit migrated from https://github.com/dotnet/coreclr/commit/789879bb302416c511b01442d60a037b2c6ece4a

src/coreclr/src/vm/i386/asmhelpers.S

index 45774fa..2242c80 100644 (file)
@@ -817,16 +817,19 @@ NESTED_ENTRY DelayLoad_MethodCall, _TEXT, NoHandler
 
     mov         esi, esp
 
+    #define STACK_ALIGN_PADDING 4
+    sub         esp, STACK_ALIGN_PADDING
+
     push        ecx
     push        edx
-
     push        eax
-
-    // pTransitionBlock
-    push        esi
-
+    push        esi // pTransitionBlock
+    CHECK_STACK_ALIGNMENT
     call        C_FUNC(ExternalMethodFixupWorker)
 
+    add         esp, STACK_ALIGN_PADDING
+    #undef STACK_ALIGN_PADDING
+
     // eax now contains replacement stub. PreStubWorker will never return
     // NULL (it throws an exception if stub creation fails.)