diff options
author | SaeHie Park <saehie.park@gmail.com> | 2017-02-09 18:36:10 +0900 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2017-02-09 10:36:10 +0100 |
commit | eaee80011c9523ebe82cbadf1a693217e439fbfd (patch) | |
tree | b2d9f0f025b21375691f9e8f9f69caaf14a01e93 | |
parent | a7c03fbd28d61fac40d3f51845926af54b41c7be (diff) | |
download | coreclr-eaee80011c9523ebe82cbadf1a693217e439fbfd.tar.gz coreclr-eaee80011c9523ebe82cbadf1a693217e439fbfd.tar.bz2 coreclr-eaee80011c9523ebe82cbadf1a693217e439fbfd.zip |
[x86/Linux] Fix UMThunkStub stack alignment (#9365)
Fixes out going call in UMThunkStub to be 16 byte stack aligned
-rw-r--r-- | src/vm/i386/umthunkstub.S | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vm/i386/umthunkstub.S b/src/vm/i386/umthunkstub.S index 22a4329a8e..5a557d4b32 100644 --- a/src/vm/i386/umthunkstub.S +++ b/src/vm/i386/umthunkstub.S @@ -28,7 +28,7 @@ NESTED_ENTRY UMThunkStub, _TEXT, UnhandledExceptionHandlerUnix #define UMThunkStub_UMENTRYTHUNK_OFFSET (UMThunkStub_SAVEDREG+4) #define UMThunkStub_THREAD_OFFSET (UMThunkStub_UMENTRYTHUNK_OFFSET+4) #define UMThunkStub_INT_ARG_OFFSET (UMThunkStub_THREAD_OFFSET+4) -#define UMThunkStub_FIXEDALLOCSIZE (UMThunkStub_LOCALVARS) +#define UMThunkStub_FIXEDALLOCSIZE (UMThunkStub_LOCALVARS+4) // extra 4 is for stack alignment // return address <-- entry ESP // saved ebp <-- EBP @@ -37,6 +37,7 @@ NESTED_ENTRY UMThunkStub, _TEXT, UnhandledExceptionHandlerUnix // saved edi // UMEntryThunk* // Thread* +// dummy 4 byte for 16 byte stack alignment // {optional stack args passed to callee} <-- new esp PROLOG_BEG @@ -122,11 +123,13 @@ LOCAL_LABEL(InvalidTransition): LOCAL_LABEL(DoTrapReturningThreadsTHROW): // extern "C" VOID STDCALL UMThunkStubRareDisableWorker(Thread *pThread, UMEntryThunk *pUMEntryThunk) + sub esp, (2*4) // add padding to ensure 16 byte stack alignment mov eax, dword ptr [ebp - UMThunkStub_UMENTRYTHUNK_OFFSET] push eax mov eax, dword ptr [ebp - UMThunkStub_THREAD_OFFSET] push eax call C_FUNC(UMThunkStubRareDisableWorker) + add esp, (2*4) // restore to before stack alignment jmp LOCAL_LABEL(InCooperativeMode) |