• C
    [PATCH] x86: fix sigaddset() inline asm memory constraint · b7fd1edd
    Constantine Gavrilov 提交于
    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: NLinus Torvalds <torvalds@osdl.org>
    b7fd1edd
signal.h 5.3 KB