[PATCH] x86: fix sigaddset() inline asm memory constraint
authorConstantine Gavrilov <constg@qlusters.com>
Thu, 17 Nov 2005 09:40:43 +0000 (11:40 +0200)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 17 Nov 2005 16:42:26 +0000 (08:42 -0800)
commitb7fd1edd2c0c225afa96af92d4adecb91e7d439d
tree5e8d4cbc6d16eb318bc7df102b39a09056981817
parent3b26b1100e26811e54770abaa221eae140ba840d
[PATCH] x86: fix sigaddset() inline asm memory constraint

Due to incomplete memory constraints, gcc would miscompile code with
sigaddset on i386 if sig arg was const.

A quote form Jakub to make the issue clear:

 "You need either
__asm__("btsl %1,%0" : "+m"(*set) : "Ir"(_sig-1) : "cc");
  or
__asm__("btsl %1,%0" : "=m"(*set) : "Ir"(_sig-1), "m"(*set) : "cc");
  because the btsl instruction doesn't just set the memory to some
  value, but needs to read its previous content as well.  If you don't
  tell that fact to GCC, GCC is of course free to optimize as if the asm
  was just setting the value and not depended on the previous value."

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/asm-i386/signal.h