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) ; [!]
...
"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; \
})
"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; \
})