diff options
author | Masami Hiramatsu (Google) | 2023-06-06 21:39:55 +0900 |
---|---|---|
committer | Masami Hiramatsu (Google) | 2023-06-06 21:39:55 +0900 |
commit | cb16330d12741f6dae56aad5acf62f5be3a06c4e (patch) | |
tree | 989f603fa2a1d02a0e12fc411435337102f45e8b /samples/fprobe | |
parent | 9561de3a55bed6bdd44a12820ba81ec416e705a7 (diff) |
fprobe: Pass return address to the handlers
Pass return address as 'ret_ip' to the fprobe entry and return handlers
so that the fprobe user handler can get the reutrn address without
analyzing arch-dependent pt_regs.
Link: https://lore.kernel.org/all/168507467664.913472.11642316698862778600.stgit@mhiramat.roam.corp.google.com/
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Diffstat (limited to 'samples/fprobe')
-rw-r--r-- | samples/fprobe/fprobe_example.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/samples/fprobe/fprobe_example.c b/samples/fprobe/fprobe_example.c index 4efc8feb6277..64e715e7ed11 100644 --- a/samples/fprobe/fprobe_example.c +++ b/samples/fprobe/fprobe_example.c @@ -49,6 +49,7 @@ static void show_backtrace(void) } static int sample_entry_handler(struct fprobe *fp, unsigned long ip, + unsigned long ret_ip, struct pt_regs *regs, void *data) { if (use_trace) @@ -65,10 +66,11 @@ static int sample_entry_handler(struct fprobe *fp, unsigned long ip, return 0; } -static void sample_exit_handler(struct fprobe *fp, unsigned long ip, struct pt_regs *regs, +static void sample_exit_handler(struct fprobe *fp, unsigned long ip, + unsigned long ret_ip, struct pt_regs *regs, void *data) { - unsigned long rip = instruction_pointer(regs); + unsigned long rip = ret_ip; if (use_trace) /* |