function print_regs () %{ if (CONTEXT->regs) { _stp_print_regs (CONTEXT->regs); } %} function print_backtrace () %{ if (CONTEXT->regs) { _stp_stack_print(CONTEXT->regs); } %} function backtrace () %{ if (CONTEXT->regs) { String str = _stp_string_init (0); _stp_stack_sprint (str, CONTEXT->regs, 0); strlcpy (THIS->__retvalue, _stp_string_ptr(str), MAXSTRINGLEN); } else strlcpy (THIS->__retvalue, "", MAXSTRINGLEN); %} function execname:string () %{ if (unlikely(in_interrupt())) strlcpy (THIS->__retvalue, "", MAXSTRINGLEN); else strlcpy (THIS->__retvalue, current->comm, MAXSTRINGLEN); %} function pid:long () %{ if (unlikely(in_interrupt())) THIS->__retvalue = 0; else THIS->__retvalue = current->pid; %} function ppid:long () %{ if (unlikely(in_interrupt() || !current->parent)) THIS->__retvalue = 0; else THIS->__retvalue = current->parent->pid; %} function pexecname:string () %{ if(unlikely(in_interrupt() || !current->parent || !current->parent->comm)) strlcpy (THIS->__retvalue, "", MAXSTRINGLEN); else strlcpy (THIS->__retvalue, current->parent->comm, MAXSTRINGLEN); %} function gid:long () %{ if(unlikely(in_interrupt())) THIS->__retvalue = 0; else THIS->__retvalue = current->gid; %} function egid:long () %{ if(unlikely(in_interrupt())) THIS->__retvalue = 0; else THIS->__retvalue = current->egid; %} function uid:long () %{ if(unlikely(in_interrupt())) THIS->__retvalue = 0; else THIS->__retvalue = current->uid; %} function euid:long () %{ if(unlikely(in_interrupt())) THIS->__retvalue = 0; else THIS->__retvalue = current->euid; %} function print_stack(stk:string) %{ char *ptr = THIS->stk; char *tok = strsep(&ptr, " "); _stp_printf ("trace for %d (%s)\n", current->pid, current->comm); while (tok && *tok) { _stp_print_cstr(" "); _stp_symbol_print (simple_strtol(tok, NULL, 16)); _stp_print_cstr("\n"); tok = strsep(&ptr, " "); } %}