• Steven Rostedt's avatar
    x86/function-graph: fix constraint for recording old return value · aa512a27
    Steven Rostedt authored
    After upgrading from gcc 4.2.2 to 4.4.0, the function graph tracer broke.
    Investigating, I found that in the asm that replaces the return value,
    gcc was using the same register for the old value as it was for the
    new value.
    
    	mov	(addr), old
    	mov	new, (addr)
    
    But if old and new are the same register, we clobber new with old!
    I first thought this was a bug in gcc 4.4.0 and reported it:
    
      http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40132
    
    Andrew Pinski responded (quickly), saying that it was correct gcc behavior
    and the code needed to denote old as an "early clobber".
    
    Instead of "=r"(old), we need "=&r"(old).
    
    [Impact: keep function graph tracer from breaking with gcc 4.4.0 ]
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    aa512a27
ftrace.c 12.5 KB