trace_kprobe.c (b690490d6d466972ade172ee2e7f6ffa49e7e910) | trace_kprobe.c (73f9b911faa74ac5107879de05c9489c419f41bb) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Kprobes-based tracing events 4 * 5 * Created by Masami Hiramatsu <mhiramat@redhat.com> 6 * 7 */ 8#define pr_fmt(fmt) "trace_kprobe: " fmt --- 18 unchanged lines hidden (view full) --- 27/* Kprobe early definition from command line */ 28static char kprobe_boot_events_buf[COMMAND_LINE_SIZE] __initdata; 29 30static int __init set_kprobe_boot_events(char *str) 31{ 32 strlcpy(kprobe_boot_events_buf, str, COMMAND_LINE_SIZE); 33 disable_tracing_selftest("running kprobe events"); 34 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Kprobes-based tracing events 4 * 5 * Created by Masami Hiramatsu <mhiramat@redhat.com> 6 * 7 */ 8#define pr_fmt(fmt) "trace_kprobe: " fmt --- 18 unchanged lines hidden (view full) --- 27/* Kprobe early definition from command line */ 28static char kprobe_boot_events_buf[COMMAND_LINE_SIZE] __initdata; 29 30static int __init set_kprobe_boot_events(char *str) 31{ 32 strlcpy(kprobe_boot_events_buf, str, COMMAND_LINE_SIZE); 33 disable_tracing_selftest("running kprobe events"); 34 |
35 return 0; | 35 return 1; |
36} 37__setup("kprobe_event=", set_kprobe_boot_events); 38 39static int trace_kprobe_create(const char *raw_command); 40static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev); 41static int trace_kprobe_release(struct dyn_event *ev); 42static bool trace_kprobe_is_busy(struct dyn_event *ev); 43static bool trace_kprobe_match(const char *system, const char *event, --- 1384 unchanged lines hidden (view full) --- 1428 entry = trace_event_buffer_reserve(&fbuffer, trace_file, 1429 sizeof(*entry) + tk->tp.size + dsize); 1430 if (!entry) 1431 return; 1432 1433 fbuffer.regs = regs; 1434 entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event); 1435 entry->func = (unsigned long)tk->rp.kp.addr; | 36} 37__setup("kprobe_event=", set_kprobe_boot_events); 38 39static int trace_kprobe_create(const char *raw_command); 40static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev); 41static int trace_kprobe_release(struct dyn_event *ev); 42static bool trace_kprobe_is_busy(struct dyn_event *ev); 43static bool trace_kprobe_match(const char *system, const char *event, --- 1384 unchanged lines hidden (view full) --- 1428 entry = trace_event_buffer_reserve(&fbuffer, trace_file, 1429 sizeof(*entry) + tk->tp.size + dsize); 1430 if (!entry) 1431 return; 1432 1433 fbuffer.regs = regs; 1434 entry = fbuffer.entry = ring_buffer_event_data(fbuffer.event); 1435 entry->func = (unsigned long)tk->rp.kp.addr; |
1436 entry->ret_ip = (unsigned long)ri->ret_addr; | 1436 entry->ret_ip = get_kretprobe_retaddr(ri); |
1437 store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize); 1438 1439 trace_event_buffer_commit(&fbuffer); 1440} 1441 1442static void 1443kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, 1444 struct pt_regs *regs) --- 178 unchanged lines hidden (view full) --- 1623 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1624 size -= sizeof(u32); 1625 1626 entry = perf_trace_buf_alloc(size, NULL, &rctx); 1627 if (!entry) 1628 return; 1629 1630 entry->func = (unsigned long)tk->rp.kp.addr; | 1437 store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize); 1438 1439 trace_event_buffer_commit(&fbuffer); 1440} 1441 1442static void 1443kretprobe_trace_func(struct trace_kprobe *tk, struct kretprobe_instance *ri, 1444 struct pt_regs *regs) --- 178 unchanged lines hidden (view full) --- 1623 size = ALIGN(__size + sizeof(u32), sizeof(u64)); 1624 size -= sizeof(u32); 1625 1626 entry = perf_trace_buf_alloc(size, NULL, &rctx); 1627 if (!entry) 1628 return; 1629 1630 entry->func = (unsigned long)tk->rp.kp.addr; |
1631 entry->ret_ip = (unsigned long)ri->ret_addr; | 1631 entry->ret_ip = get_kretprobe_retaddr(ri); |
1632 store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize); 1633 perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs, 1634 head, NULL); 1635} 1636NOKPROBE_SYMBOL(kretprobe_perf_func); 1637 1638int bpf_get_kprobe_info(const struct perf_event *event, u32 *fd_type, 1639 const char **symbol, u64 *probe_offset, --- 458 unchanged lines hidden --- | 1632 store_trace_args(&entry[1], &tk->tp, regs, sizeof(*entry), dsize); 1633 perf_trace_buf_submit(entry, size, rctx, call->event.type, 1, regs, 1634 head, NULL); 1635} 1636NOKPROBE_SYMBOL(kretprobe_perf_func); 1637 1638int bpf_get_kprobe_info(const struct perf_event *event, u32 *fd_type, 1639 const char **symbol, u64 *probe_offset, --- 458 unchanged lines hidden --- |