From c0165091191becde9b04ba9c9a6ddad6d3daa4f4 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 21 Jan 2006 19:23:02 +0100 Subject: [PATCH] msvcrt: Preserve all registers in call_ebp_func. --- dlls/msvcrt/cppexcept.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/cppexcept.c b/dlls/msvcrt/cppexcept.c index 425a38499a1..29d7b58cd8d 100644 --- a/dlls/msvcrt/cppexcept.c +++ b/dlls/msvcrt/cppexcept.c @@ -52,8 +52,15 @@ DWORD cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame, inline static void *call_ebp_func( void *func, void *ebp ) { void *ret; - __asm__ __volatile__ ("pushl %%ebp; movl %2,%%ebp; call *%%eax; popl %%ebp" \ - : "=a" (ret) : "0" (func), "r" (ebp) : "ecx", "edx", "memory" ); + int dummy; + __asm__ __volatile__ ("pushl %%ebx\n\t" + "pushl %%ebp\n\t" + "movl %4,%%ebp\n\t" + "call *%%eax\n\t" + "popl %%ebp\n\t" + "popl %%ebx" + : "=a" (ret), "=S" (dummy), "=D" (dummy) + : "0" (func), "1" (ebp) : "ecx", "edx", "memory" ); return ret; }