Re: [PATCH -v4 4/9] tracing: add static function tracer support forMIPS

From: Adam Nemet
Date: Thu Oct 22 2009 - 16:37:19 EST


David Daney writes:
> Wu Zhangjin wrote:
> > On Wed, 2009-10-21 at 11:24 -0400, Steven Rostedt wrote:
> [...]
> >>> +
> >>> +NESTED(_mcount, PT_SIZE, ra)
> >>> + RESTORE_SP_FOR_32BIT
> >>> + PTR_LA t0, ftrace_stub
> >>> + PTR_L t1, ftrace_trace_function /* please don't use t1 later, safe? */
> >> Is t0 and t1 safe for mcount to use? Remember, mcount does not follow
> >> the dynamics of C function ABI.
> >
> > So, perhaps we can use the saved registers(a0,a1...) instead.
> >
>
> a0..a7 may not always be saved.
>
> You can use at, v0, v1 and all the temporary registers. Note that for
> the 64-bit ABIs sometimes the names t0-t4 shadow a4-a7. So for a 64-bit
> kernel, you can use: $1, $2, $3, $12, $13, $14, $15, $24, $25, noting
> that at == $1 and contains the callers ra. For a 32-bit kernel you can
> add $8, $9, $10, and $11
>
> This whole thing seems a little fragile.

Maybe scanning the instructions should stop at the beginning of the function
based on the kernel's symbol table. I am not sure if we can establish any
other stopping condition without affecting performance too much.

Speaking of performance, -pg also affects the instruction scheduling freedom
of the compiler in the prologue. With profiling, we limit optimizations not
to move instructions in and out of the prologue.

Also note that for functions invoked via tail call you won't get an exit
event. E.g. if bar is tail-called from foo:

foo entered
bar entered
foo/bar exited

However, this is not MIPS-specific and you can always disable tail calls
with -fno-optimize-sibling-calls.

Adam
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/