/usr/share/systemtap/tapset
NameSizeModeActions
arm/-0755rm
arm64/-0755rm
bpf/-0755rm
dyninst/-0755rm
i386/-0755rm
ia64/-0755rm
linux/-0755rm
mips/-0755rm
powerpc/-0755rm
riscv/-0755rm
s390/-0755rm
x86_64/-0755rm
ansi.stp41780644editdlrm
argv.stp27210644editdlrm
choose_defined.stpm2080644editdlrm
container_of.stpm2350644editdlrm
context.stp61030644editdlrm
errno.stp91180644editdlrm
floatingpoint.stp69360644editdlrm
indent-default.stp590644editdlrm
indent.stp45900644editdlrm
init.stp2690644editdlrm
input.stp2630644editdlrm
java.stp13460644editdlrm
libperl5.26.3-64.stp13390644editdlrm
libpython2.7-64.stp5220644editdlrm
livepatch.stp30060644editdlrm
logging.stp41320644editdlrm
macros.stpm5620644editdlrm
null.stp170644editdlrm
offsetof.stpm1830644editdlrm
oneshot.stp380644editdlrm
pn.stp15880644editdlrm
print_stats.stpm17190644editdlrm
private30.stpm800644editdlrm
prometheus.stp1290644editdlrm
prometheus.stpm83800644editdlrm
python.stp4740644editdlrm
python2.stp294350644editdlrm
python3.stp366550644editdlrm
queue_stats.stp94870644editdlrm
random.stp4320644editdlrm
README3710644editdlrm
regex.stp41070644editdlrm
registers.stp110810644editdlrm
sizeof.stpm2120644editdlrm
speculative.stp17460644editdlrm
sreg_arch.stpm2630644editdlrm
stap_staticmarkers.stp96700644editdlrm
stopwatch.stp30630644editdlrm
string.stp75140644editdlrm
switchfile.stp6120644editdlrm
system.stp5930644editdlrm
this.stp1600644editdlrm
timers.stp9240644editdlrm
tls.stp80990644editdlrm
tokenize.stp21240644editdlrm
try_assign.stpm7680644editdlrm
type_defined.stpm3740644editdlrm
tzinfo.stp9300644editdlrm
uconversions-guru.stp60780644editdlrm
uconversions.stp366400644editdlrm
Edit: /usr/share/systemtap/tapset/indent.stp (4590B)
/* * The indent tapset provides functions to generate indented lines for * nested kinds of trace messages. Each line contains a relative * timestamp, and the process name / pid. The timestamp is as per * provided by the __indent_timestamp function, which by default * measures microseconds. * */ @__private30 global _indent_counters, _indent_timestamps @__private30 function _generic_indent_depth:long (idx, delta) { # pre-increment for positive delta and post-decrement for negative delta x = _indent_counters[idx] + (delta > 0 ? delta : 0) _indent_counters[idx] += delta return (x>0 ? x-1 : 0) } @__private30 function _generic_indent (idx, desc, delta) { ts = __indent_timestamp () if (! _indent_counters[idx]) _indent_timestamps[idx] = ts depth = _generic_indent_depth(idx, delta) return sprintf("%6d %s:%-*s", (ts - _indent_timestamps[idx]), desc, depth, "") } /** * sfunction thread_indent - returns an amount of space with the current task information * * @delta: the amount of space added/removed for each call * * Description: This function returns a string with appropriate * indentation for a thread. Call it with a small positive or * matching negative delta. If this is the real outermost, * initial level of indentation, then the function resets the * relative timestamp base to zero. The timestamp is as per * provided by the __indent_timestamp function, which by default * measures microseconds. */ function thread_indent:string (delta:long) { return _generic_indent (tid(), sprintf("%s(%d)", execname(), tid()), delta) } /** * sfunction thread_indent_depth - returns the nested-depth of the current task * * @delta: the amount of depth added/removed for each call * * Description: This function returns an integer equal to the nested * function-call depth starting from the outermost initial level. This function * is useful for saving space (consumed by whitespace) in traces with long * nested function calls. Use this function in a similar fashion to * thread_indent(), i.e., in call-probe, use thread_indent_depth(1) and in * return-probe, use thread_indent_depth(-1) */ function thread_indent_depth:long (delta:long) { return _generic_indent_depth (tid(), delta) } /** * sfunction indent - returns an amount of space to indent * * @delta: the amount of space added/removed for each call * * Description: This function returns a string with appropriate * indentation. Call it with a small positive or matching negative * delta. Unlike the thread_indent function, the indent does not * track individual indent values on a per thread basis. */ function indent:string (delta:long){ return _generic_indent(-1, "", delta) } /** * sfunction indent_depth - returns the global nested-depth * * @delta: the amount of depth added/removed for each call * * Description: This function returns a number for appropriate indentation, * similar to indent(). Call it with a small positive or matching negative * delta. Unlike the thread_indent_depth function, the indent does not track * individual indent values on a per thread basis. */ function indent_depth:long (delta:long) { return _generic_indent_depth (-1, delta) } /* The following example uses thread_indent() to trace the functions * called in the drivers/usb/core kernel source. It prints a relative * timestamp and the name and ID of the current process, followed by * the appropriate indent and the function name. Note that * 'char' swapper(0) indicates the kernel is running in interrupt * context and there is no valid current process. * * probe kernel.function("*@drivers/usb/core/*") { * printf("%s -> %s\n, thread_indent(1), probefunc()) * } * probe kernel.function("*@drivers/usb/core/*").return { * printf("%s <- %s\n", thread_indent(-1), probefunc()) * } * * //This prints: * 0 swapper(0): -> usb_hcd_irq * 8 swapper(0): <- usb_hcd_irq * 0 swapper(0): -> usb_hcd_irq * 10 swapper(0): -> usb_hcd_giveback_urb * 16 swapper(0): -> urb_unlink * 22 swapper(0): <- usb_unlink * 29 swapper(0): -> usb_free_urb * 35 swapper(0): <- usb_hcd_urb * 39 swapper(0): <- usb_hcd_giveback_urb * 45 swapper(0): <- usb_hcd_irq * 0 usb-storage(1338): -> usb_submit_urb * 6 usb-storage(1338): -> usb_hcd_submit_urb * 12 usb-storage(1338): -> usb_get_urb * 18 usb-storage(1338): <- usb_get_urb * 25 usb-storage(1338): <- usb_hcd_submit_urb * 29 usb-storage(1338): -> usb_submit_urb * 0 swapper(0): -> usb_hcd_irq * 7 swapper(0): <- usb_hcd_irq */