]> bbs.cooldavid.org Git - net-next-2.6.git/commit
x86/function-graph: fix constraint for recording old return value
authorSteven Rostedt <srostedt@redhat.com>
Wed, 13 May 2009 17:52:19 +0000 (13:52 -0400)
committerSteven Rostedt <rostedt@goodmis.org>
Wed, 13 May 2009 17:52:19 +0000 (13:52 -0400)
commitaa512a27e9e8ed32f31b15eec67ab1ceca33839b
treeb9f4c0e65027d2501eb08f4661d7aa95c4d5d74d
parent091bf7624d1c90cec9e578a18529f615213ff847
x86/function-graph: fix constraint for recording old return value

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: Steven Rostedt <rostedt@goodmis.org>
arch/x86/kernel/ftrace.c