Messages in this thread | | | From | Adam Nemet <> | Date | Thu, 22 Oct 2009 13:30:02 -0700 | Subject | Re: [PATCH -v4 4/9] tracing: add static function tracer support for MIPS |
| |
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
| |