From ea904493370d2a752855cc93aad1e27b009dd917 Mon Sep 17 00:00:00 2001 From: Benedikt Huber Date: Wed, 29 Feb 2012 15:17:04 +0100 Subject: [PATCH] Fix gcc inline assembler operand constraints for syscall -- as pushl modifies %esp, variable operands must not reference the stack pointer. Without this patch, gcc-4.6.1-9ubuntu3 miscompiles the read syscall to: 000000b6 : b6: ff 74 24 0c pushl 0xc(%esp) ba: ff 74 24 08 pushl 0x8(%esp) ; [!] be: ff 74 24 04 pushl 0x4(%esp) ; [!] ... --- src/lib/user/syscall.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/user/syscall.c b/src/lib/user/syscall.c index a9c5bc8..c8385bc 100644 --- a/src/lib/user/syscall.c +++ b/src/lib/user/syscall.c @@ -38,8 +38,8 @@ "pushl %[number]; int $0x30; addl $12, %%esp" \ : "=a" (retval) \ : [number] "i" (NUMBER), \ - [arg0] "g" (ARG0), \ - [arg1] "g" (ARG1) \ + [arg0] "r" (ARG0), \ + [arg1] "r" (ARG1) \ : "memory"); \ retval; \ }) @@ -54,9 +54,9 @@ "pushl %[number]; int $0x30; addl $16, %%esp" \ : "=a" (retval) \ : [number] "i" (NUMBER), \ - [arg0] "g" (ARG0), \ - [arg1] "g" (ARG1), \ - [arg2] "g" (ARG2) \ + [arg0] "r" (ARG0), \ + [arg1] "r" (ARG1), \ + [arg2] "r" (ARG2) \ : "memory"); \ retval; \ }) -- 2.30.2