[x86/Linux] Emit proper frame for FastGetSharedStaticBase (dotnet/coreclr#9618)
authorJonghyun Park <parjong@gmail.com>
Thu, 16 Feb 2017 16:40:03 +0000 (01:40 +0900)
committerJan Vorlicek <janvorli@microsoft.com>
Thu, 16 Feb 2017 16:40:03 +0000 (17:40 +0100)
* [x86/Linux] Emit proper frame for FastGetSharedStaticBase

* Adjust Stack-align Padding

* Remove FEATURE_PAL ifdef

Commit migrated from https://github.com/dotnet/coreclr/commit/0ec02d7375a1aa96206fd755b02e553e075ac3ae

src/coreclr/src/vm/i386/jitinterfacex86.cpp

index 89b0cf7..f686e8f 100644 (file)
@@ -1300,10 +1300,14 @@ void EmitFastGetSharedStaticBase(CPUSTUBLINKER *psl, CodeLabel *init, bool bCCto
         // DoInit:
         psl->EmitLabel(DoInit);
 
-#if defined(UNIX_X86_ABI)
-        // sub esp, 8 ; to align the stack
-        psl->X86EmitSubEsp(8);
-#endif
+        psl->X86EmitPushEBPframe();
+
+#ifdef UNIX_X86_ABI
+#define STACK_ALIGN_PADDING 4
+        // sub esp, STACK_ALIGN_PADDING; to align the stack
+        psl->X86EmitSubEsp(STACK_ALIGN_PADDING);
+#endif // UNIX_X86_ABI
+
         // push edx (must be preserved)
         psl->X86EmitPushReg(kEDX);
 
@@ -1313,10 +1317,14 @@ void EmitFastGetSharedStaticBase(CPUSTUBLINKER *psl, CodeLabel *init, bool bCCto
         // pop edx
         psl->X86EmitPopReg(kEDX);
 
-#if defined(UNIX_X86_ABI)
-        // add esp, 8
-        psl->X86EmitAddEsp(8);
-#endif
+#ifdef UNIX_X86_ABI
+        // add esp, STACK_ALIGN_PADDING
+        psl->X86EmitAddEsp(STACK_ALIGN_PADDING);
+#undef STACK_ALIGN_PADDING
+#endif // UNIX_X86_ABI
+
+        psl->X86EmitPopReg(kEBP);
+
         // ret
         psl->X86EmitReturn(0);
     }