Commit ea904493 authored by Benedikt Huber's avatar Benedikt Huber Committed by Ben Pfaff
Browse files

Fix gcc inline assembler operand constraints for syscall -- as pushl modifies...

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 <read>:
    b6:   ff 74 24 0c             pushl  0xc(%esp)
    ba:   ff 74 24 08             pushl  0x8(%esp)  ; [!]
    be:   ff 74 24 04             pushl  0x4(%esp)  ; [!]
    ...
parent a094a81a
......@@ -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; \
})
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment