fche changed the topic of #systemtap to: http://sourceware.org/systemtap; email systemtap@sourceware.org if answers here not timely, conversations may be logged
wyang123 has joined #systemtap
_whitelogger has joined #systemtap
orivej has quit [Ping timeout: 240 seconds]
slowfranklin has joined #systemtap
mjw has joined #systemtap
sscox has quit [Ping timeout: 246 seconds]
orivej has joined #systemtap
sscox has joined #systemtap
wyang123 has quit [Quit: wyang123]
wyang123 has joined #systemtap
brolley has joined #systemtap
tromey has joined #systemtap
fche has quit [Remote host closed the connection]
fche has joined #systemtap
wyang123 has quit [Quit: wyang123]
slowfranklin has quit [Quit: slowfranklin]
slowfranklin has joined #systemtap
wcohen has joined #systemtap
slowfranklin has quit [Quit: slowfranklin]
agentzh has joined #systemtap
<agentzh>
fche: thanks for the tip on debug_print()
<agentzh>
one sad thing is that the expression nodes do not have a pointer to point to their parent nodes.
<agentzh>
it makes debugging harder.
<agentzh>
i already tried dumping the current expression nodes but the output do not make much sense, seems to be some placeholder nodes. so i need to traverse to its ancestor nodes to get a bigger picture.
<fche>
backtrace
<fche>
and print from a higher level visitor
<fche>
frame
<agentzh>
okay, i'll try it. thanks.
<agentzh>
the visitor mode does not use recursive descent, so i guess i'll only get the root node instead of near ancestors?
<fche>
hm, recursive descent is almost all we do though
<fche>
double-indirect dispatch makes the backtrace a little depeer
<fche>
but it should all be there
<agentzh>
ah, my mistake then :)
<agentzh>
fche: btw, can we allow the various stack/uwnind tapset functions take a variant that accepts user-specified IP and SP reg values?
<agentzh>
the reason i'm asking is that some times we cannot use the current IP and SP regs, for example, when programmatically skipping frames for JIT compiled machine code.
<agentzh>
i hacked in a sprint_ubacktrace2:string(pc:long,sp:long) tapset function last night and it seems to work well to recover the full C backtrace from machine code frames generated by LuaJIT.
<agentzh>
it's not a very good tapset name though. wondering if you have any better suggestions here.
<agentzh>
we can do the same trick with other JIT'd code like PCRE JIT and etc.
<fche>
there was a plan to support multi-language tracebacks by splitting up the backtrace functions into per-frame/step ones
<fche>
and the tapsets would provide different-possible-langage implementations for the step ones
<fche>
and use the 'function unwind_one() { if ($not_my_language) next; } type runtime overloading facility to let it try different languages
<fche>
we haven't developed the idea farther though
<agentzh>
it reminds me of dwarf's personality handler design.
slowfranklin has joined #systemtap
slowfranklin has quit [Client Quit]
<agentzh>
i think it's for solving different problems but i agree the iterative unwinding API could be tweaked to accept custom IP/SP values.
<agentzh>
i could already unwind LuaJIT/Python/Perl-land backtraces with the current stap impl without any assistent from the target side (unlike stap's current python addon, for example).
<agentzh>
*i can
<agentzh>
my current hurdle is to recover C-land backtraces below the JIT mcode frame.
<agentzh>
hence the sprint_ubacktrace2() hack mentioned above.
tromey has quit [Quit: ERC (IRC client for Emacs 26.1.50)]