Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Fixed bug 1846 - _allmul implementation in SDL_stdlib.c doesn't clean…

… up the stack

Colin Barrett

I see this manifest itself (VS2012 x86) as:

"Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."

in the first call to SDL_GetTicks in my application. The disassembly at the problem line is:

        hires_now.QuadPart *= 1000;
00AD0792  push        0
00AD0794  push        3E8h
00AD0799  mov         eax,dword ptr [ebp-10h]
00AD079C  push        eax
00AD079D  mov         ecx,dword ptr [hires_now]
00AD07A0  push        ecx
00AD07A1  call        _allmul (0AE7D40h)
00AD07A6  mov         dword ptr [hires_now],eax
00AD07A9  mov         dword ptr [ebp-10h],edx

Apparently _allmul should be popping the stack but isn't (other similar functions in SDL_stdlib.c - _alldiv and whatnot - DO pop the stack).

A 'ret 10h' at the end of _allmul appears to do the trick
  • Loading branch information
slouken committed May 16, 2013
1 parent e59488e commit 51182fc84c921a029e9ad22fc7b9c9a9e313f67a
Showing with 1 addition and 1 deletion.
  1. +1 −1 src/stdlib/SDL_stdlib.c
@@ -191,7 +191,7 @@ _allmul()
pop esi
pop edi
pop ebp
ret
ret 10h
}
/* *INDENT-ON* */
}

0 comments on commit 51182fc

Please sign in to comment.