Fix gcc inline assembler operand constraints for syscall -- as pushl modifies %esp...
authorBenedikt Huber <benedikt.huber@gmail.com>
Wed, 29 Feb 2012 14:17:04 +0000 (15:17 +0100)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 1 Mar 2012 05:22:46 +0000 (21:22 -0800)
commitea904493370d2a752855cc93aad1e27b009dd917
treecbb534088f024a2d7e09a068eeb821d91783213a
parenta094a81a89ccd919a338aa0acfa6cdae282bdf50
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)  ; [!]
    ...
src/lib/user/syscall.c