// 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);
// 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);
}