#! stap -p2
global entry_time, my_count, my_fd, read_times
# future built-ins
function trace (s) { return 0 }
global tid
probe begin /* kernel.function("read") */ {
count=0 timestamp=0 fd=0
tid=1
entry_time[tid] = timestamp # "macro" variable
my_count[tid] = count # function argument
my_fd[tid] = fd # function argument
trace ("my_count = " . sprint(my_count[tid]) .
"my_fd = " . sprint(my_fd[tid]))
}
probe end /* kernel.function("read").return */ {
syscall_name="" retvalue=0
tid=1
if (entry_time[tid]) {
read_times[syscall_name] # variable from provider alias
+= timestamp - entry_time[tid]
}
trace ("syscall " . (syscall_name) .
" return value = " .
sprintf ("0x%x", retvalue)) # function pseudo-argument
}
probe end {
foreach (syscall in read_times) {
trace ("syscall " . syscall .
" total-time=" . sprint (read_times[syscall]))
}
}