sh: Try again at getting the initial return address for an unwind
authorMatt Fleming <matt@console-pimps.org>
Sat, 15 Aug 2009 22:10:57 +0000 (23:10 +0100)
committerMatt Fleming <matt@console-pimps.org>
Sun, 16 Aug 2009 11:48:53 +0000 (12:48 +0100)
commitb955873bf530ee4b80e6c8b734521ad07cbaed7e
tree44367dd882fc8851f32285ddcdcb3f62892df99d
parent38f9ddf44150c1a213b41726384d055f7c35ec4f
sh: Try again at getting the initial return address for an unwind

The previous hack for calculating the return address for the first frame
we unwind (dwarf_unwinder_dump) didn't always work. The problem was that
it assumed once it read the rule for calculating the return address,
there would be no new rules for calculating it. This isn't true because
the way in which the CFA is calculated can change as you progress
through a function and the return address is figured out using the
CFA. Therefore, the way to calculate the return address can change.

So, instead of using some offset from the beginning of
dwarf_unwind_stack which is just a flakey approach, and instead of
executing instructions from the FDE until the return address is setup,
we now figure out the pc in dwarf_unwind_stack() just before we call
dwarf_cfa_execute_insns().

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