sh: Check for return_to_handler when unwinding the stack
authorMatt Fleming <matt@console-pimps.org>
Sat, 24 Oct 2009 18:56:57 +0000 (18:56 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 26 Oct 2009 01:04:56 +0000 (10:04 +0900)
commit60339fad5c68c9c533cd14e67194ff8f727c41d9
tree337f045bbb1e55ded6d423ff1003ec39cdbb18c9
parent26fadd3672964596d33548490b9756014ae0f414
sh: Check for return_to_handler when unwinding the stack

When CONFIG_FUNCTION_GRAPH_TRACER is enabled the function graph tracer
may patch return addresses on the stack with the address of
return_to_handler(). This really confuses the DWARF unwinder because it
will try find the caller of return_to_handler(), not the caller of the
real return address.

So teach the DWARF unwinder how to find the real return address whenever
it encounters return_to_handler().

This patch does not cope very well when multiple return addresses on the
stack have been patched. To make it work properly it would require state
to track how many return_to_handler()'s have been seen so that we'd know
where to look in current->curr_ret_stack[]. So for now, instead of
trying to handle this, just moan if more than one return address on the
stack has been patched.

Signed-off-by: Matt Fleming <matt@console-pimps.org>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/dwarf.c