summaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace_probe_tmpl.h
diff options
context:
space:
mode:
authorSong Chen <chensong_2000@189.cn>2022-12-30 07:33:53 +0100
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>2023-02-24 02:04:13 +0100
commitbd78acc89d4147aa4897a4c43e2a74c7df999b12 (patch)
tree326f886571f1265d2e591241ba75c46073bb2d24 /kernel/trace/trace_probe_tmpl.h
parentkernel/trace: Provide default impelentations defined in trace_probe_tmpl.h (diff)
downloadlinux-bd78acc89d4147aa4897a4c43e2a74c7df999b12.tar.xz
linux-bd78acc89d4147aa4897a4c43e2a74c7df999b12.zip
kernel/trace: extract common part in process_fetch_insn
Each probe has an instance of process_fetch_insn respectively, but they have something in common. This patch aims to extract the common part into process_common_fetch_insn which can be shared by each probe, and they only need to focus on their special cases. Signed-off-by: Song Chen <chensong_2000@189.cn> Suggested-by: Masami Hiramatsu <mhiramat@kernel.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Diffstat (limited to 'kernel/trace/trace_probe_tmpl.h')
-rw-r--r--kernel/trace/trace_probe_tmpl.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h
index bd3e755434eb..00707630788d 100644
--- a/kernel/trace/trace_probe_tmpl.h
+++ b/kernel/trace/trace_probe_tmpl.h
@@ -98,6 +98,26 @@ fetch_store_symstring(unsigned long addr, void *dest, void *base)
return sprint_symbol(__dest, addr);
}
+/* common part of process_fetch_insn*/
+static nokprobe_inline int
+process_common_fetch_insn(struct fetch_insn *code, unsigned long *val)
+{
+ switch (code->op) {
+ case FETCH_OP_IMM:
+ *val = code->immediate;
+ break;
+ case FETCH_OP_COMM:
+ *val = (unsigned long)current->comm;
+ break;
+ case FETCH_OP_DATA:
+ *val = (unsigned long)code->data;
+ break;
+ default:
+ return -EILSEQ;
+ }
+ return 0;
+}
+
/* From the 2nd stage, routine is same */
static nokprobe_inline int
process_fetch_insn_bottom(struct fetch_insn *code, unsigned long val,