|
From: <sv...@va...> - 2005-04-27 23:17:52
|
Author: sewardj
Date: 2005-04-28 00:17:48 +0100 (Thu, 28 Apr 2005)
New Revision: 3578
Modified:
trunk/coregrind/m_debuglog.c
Log:
local_sys_write_stderr: tell gcc what registers the asm trashes.
Otherwise it doesn't save %ebx across the routine, which is fatal as
%ebx is a callee-save register, it seems.
Modified: trunk/coregrind/m_debuglog.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_debuglog.c 2005-04-27 22:46:36 UTC (rev 3577)
+++ trunk/coregrind/m_debuglog.c 2005-04-27 23:17:48 UTC (rev 3578)
@@ -66,11 +66,13 @@
"movl $4, %%eax\n" /* set %eax =3D __NR_write */
"movl $2, %%ebx\n" /* set %ebx =3D stderr */
"movl %1, %%ecx\n" /* set %ecx =3D buf */
- "movl %2, %%edx\n" /* set %ecx =3D n */
+ "movl %2, %%edx\n" /* set %edx =3D n */
"int $0x80\n" /* write(stderr, buf, n) */
"movl %%eax, %0\n" /* set __res =3D eax */
: "=3Dmr" (__res)
- : "g" (buf), "g" (n) );
+ : "g" (buf), "g" (n)
+ : "eax", "ebx", "ecx", "edx"
+ );
if (__res < 0)=20
__res =3D -1;
return __res;
@@ -83,7 +85,9 @@
"movl $20, %%eax\n" /* set %eax =3D __NR_getpid */
"int $0x80\n" /* getpid() */
"movl %%eax, %0\n" /* set __res =3D eax */
- : "=3Dmr" (__res) );
+ : "=3Dmr" (__res)
+ :
+ : "eax" );
return __res;
}
=20
@@ -96,7 +100,7 @@
"movq $1, %%rax\n" /* set %rax =3D __NR_write */
"movq $2, %%rdi\n" /* set %rdi =3D stderr */
"movq %1, %%rsi\n" /* set %rsi =3D buf */
- "movl %2, %%edx\n" /* set %edx =3D n */
+ "movl %2, %%edx\n" /* set %edx =3D n */
"syscall\n" /* write(stderr, buf, n) */
"movl %%eax, %0\n" /* set __res =3D %eax */
: "=3Dmr" (__res)
|