Added clobber lists to the inline assembly functions.
diff --git a/dlls/msvcrt/cppexcept.c b/dlls/msvcrt/cppexcept.c
index f750d80..23075cc 100644
--- a/dlls/msvcrt/cppexcept.c
+++ b/dlls/msvcrt/cppexcept.c
@@ -139,8 +139,8 @@
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), "g" (ebp));
+ __asm__ __volatile__ ("pushl %%ebp; movl %2,%%ebp; call *%%eax; popl %%ebp" \
+ : "=a" (ret) : "0" (func), "g" (ebp) : "ecx", "edx", "memory" );
return ret;
}
@@ -151,16 +151,16 @@
if (has_vbase)
/* in that case copy ctor takes an extra bool indicating whether to copy the base class */
__asm__ __volatile__("pushl $1; pushl %2; call *%0"
- : : "r" (func), "c" (this), "g" (src) );
+ : : "r" (func), "c" (this), "g" (src) : "eax", "edx", "memory" );
else
__asm__ __volatile__("pushl %2; call *%0"
- : : "r" (func), "c" (this), "g" (src) );
+ : : "r" (func), "c" (this), "g" (src) : "eax", "edx", "memory" );
}
/* call the destructor of the exception object */
inline static void call_dtor( void *func, void *object )
{
- __asm__ __volatile__("call *%0" : : "r" (func), "c" (object) );
+ __asm__ __volatile__("call *%0" : : "r" (func), "c" (object) : "eax", "edx", "memory" );
}
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c
index 48ce7b3..cbca766 100644
--- a/dlls/msvcrt/except.c
+++ b/dlls/msvcrt/except.c
@@ -71,11 +71,13 @@
: : "a" (code_block), "g" (base_ptr));
}
-static DWORD call_filter( void *func, void *arg, void *ebp )
+inline static DWORD call_filter( void *func, void *arg, void *ebp )
{
DWORD ret;
__asm__ __volatile__ ("pushl %%ebp; pushl %3; movl %2,%%ebp; call *%%eax; popl %%ebp; popl %%ebp"
- : "=a" (ret) : "0" (func), "g" (ebp), "g" (arg) );
+ : "=a" (ret)
+ : "0" (func), "g" (ebp), "g" (arg)
+ : "ecx", "edx", "memory" );
return ret;
}
#endif