On Mon, 2013-07-15 at 15:17 -0700, David Daney wrote: > From: Corey Minyard <cminyard@xxxxxxxxxx> > > Dynamic function tracing was not working on MIPS. When doing dynamic > tracing, the tracer attempts to match up the passed in address with > the one the compiler creates in the mcount tables. The MIPS code was > passing in the return address from the tracing function call, but the > compiler tables were the address of the function call. So they > wouldn't match. > > Just subtracting 8 from the return address will give the address of > the function call. Easy enough. > > Signed-off-by: Corey Minyard <cminyard@xxxxxxxxxx> > [david.daney@xxxxxxxxxx: Adjusted code comment and patch Subject.] > Signed-off-by: David Daney <david.daney@xxxxxxxxxx> > --- > arch/mips/kernel/mcount.S | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S > index a03e93c..539b629 100644 > --- a/arch/mips/kernel/mcount.S > +++ b/arch/mips/kernel/mcount.S > @@ -83,7 +83,7 @@ _mcount: > PTR_S MCOUNT_RA_ADDRESS_REG, PT_R12(sp) > #endif > > - move a0, ra /* arg1: self return address */ > + PTR_SUBU a0, ra, 8 /* arg1: self address */ > .globl ftrace_call > ftrace_call: > nop /* a placeholder for the call to a real tracing function */ I applied this patch to my Yeeloong Lemote laptop and it causes the system to crash. Not sure why. I'll try to investigate. -- Steve