#! /usr/bin/env stap # -*- systemtap -*- probe begin { printf("begin\n-----\n"); } /* should be right after the netlink_broadcast_filtered call */ probe kernel.statement("kobject_uevent_env@lib/kobject_uevent.c:283") { printf("netlink_broadcast_filtered: %s\n", return_str(2, $retval)) } /* should be right before the kfree(env) at the end of the function */ probe kernel.statement("kobject_uevent_env@lib/kobject_uevent.c:312") { printf("event was:\n"); printf(" uevent_seqnum: %d\n", $uevent_seqnum) /* I don't know how to do this better, indexing envp with a variable doesn't work... */ if ($env->envp_idx > 0) printf(" %s\n", $env->envp[0]$) if ($env->envp_idx > 1) printf(" %s\n", $env->envp[1]$) if ($env->envp_idx > 2) printf(" %s\n", $env->envp[2]$) if ($env->envp_idx > 3) printf(" %s\n", $env->envp[3]$) if ($env->envp_idx > 4) printf(" %s\n", $env->envp[4]$) if ($env->envp_idx > 5) printf(" %s\n", $env->envp[5]$) if ($env->envp_idx > 6) printf(" %s\n", $env->envp[6]$) if ($env->envp_idx > 7) printf(" %s\n", $env->envp[7]$) if ($env->envp_idx > 8) printf(" %s\n", $env->envp[8]$) if ($env->envp_idx > 9) printf(" %s\n", $env->envp[9]$) if ($env->envp_idx > 10) printf("..... more\n") printf("-----\n"); } probe end { printf("end\n"); }