Franck Bui-Huu wrote: > 2006/7/27, Thiemo Seufer <ths@xxxxxxxxxxxx>: > >David Daney wrote: > >> Atsushi Nemoto wrote: > >> >Instead of dump all possible address in the stack, unwind the stack > >> >frame based on prologue code analysis, as like as get_chan() does. > >> >While the code analysis might fail for some reason, there is a new > >> >kernel option "raw_show_trace" to disable this feature. > >> > > >> >Signed-off-by: Atsushi Nemoto <anemo@xxxxxxxxxxxxx> > >> > >> Let me start by saying I have not analyzed how all this code works, but > >> I have done something similar in user space. > >> > >> Since the kernel ABI does not use gp, many functions may not have a > >> prolog (especially when compiled with newer versions of GCC). In the > >> user space case, most leaf functions have no prolog. For the kernel I > >> would imagine that many non-leaf functions (simple non-leaf functions > >> that do only a tail call) would also not have a prolog. > > > >Non-leaves have to save/restore $31 somewhere, so there should be a > >prologue. > > > > That's no always true. Consider this simple example: > > void foo_wrapper(int a, int b) > { > /* doing some checkings */ > [...]; > foo(a,b); > } > > void foo(int a, intb) > { > [...]; > } > > In foo_wrapper(), gcc will generate a "j" instruction (well I guess) > because once foo() is called and is finished, there's no needs to > return back to foo_wrapper(). In that case, foo_wrapper() won't have a > prologue. Well, with tail call optimisation it isn't a true nested function any more, the compiler can even reorder and/or combine functions in more creative ways. IOW, binary analysis can't be expected to provide full accuracy, but we can live with a reasonable approximation, I think. Thiemo