1*387f9dfdSAndroid Build Coastguard Worker #include <uapi/linux/ptrace.h> 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker struct str_t { 4*387f9dfdSAndroid Build Coastguard Worker u64 pid; 5*387f9dfdSAndroid Build Coastguard Worker char str[80]; 6*387f9dfdSAndroid Build Coastguard Worker }; 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard Worker BPF_PERF_OUTPUT(events); 9*387f9dfdSAndroid Build Coastguard Worker printret(struct pt_regs * ctx)10*387f9dfdSAndroid Build Coastguard Workerint printret(struct pt_regs *ctx) 11*387f9dfdSAndroid Build Coastguard Worker { 12*387f9dfdSAndroid Build Coastguard Worker struct str_t data = {}; 13*387f9dfdSAndroid Build Coastguard Worker u32 pid; 14*387f9dfdSAndroid Build Coastguard Worker if (!PT_REGS_RC(ctx)) 15*387f9dfdSAndroid Build Coastguard Worker return 0; 16*387f9dfdSAndroid Build Coastguard Worker pid = bpf_get_current_pid_tgid(); 17*387f9dfdSAndroid Build Coastguard Worker data.pid = pid; 18*387f9dfdSAndroid Build Coastguard Worker bpf_probe_read_user(&data.str, sizeof(data.str), 19*387f9dfdSAndroid Build Coastguard Worker (void *)PT_REGS_RC(ctx)); 20*387f9dfdSAndroid Build Coastguard Worker events.perf_submit(ctx, &data, sizeof(data)); 21*387f9dfdSAndroid Build Coastguard Worker return 0; 22*387f9dfdSAndroid Build Coastguard Worker }; 23