xref: /aosp_15_r20/external/bcc/examples/lua/bashreadline.c (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
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 Worker int 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