Lines Matching +full:event +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0
12 #include "bpf-event.h"
13 #include "bpf-utils.h"
23 #include "util/synthetic-events.h"
31 ret += snprintf(buf + ret, size - ret, "%02x", data[i]); in snprintf_hex()
36 union perf_event *event, in machine__process_bpf_event_load() argument
40 struct perf_env *env = machine->env; in machine__process_bpf_event_load()
42 int id = event->bpf.id; in machine__process_bpf_event_load()
45 /* perf-record, no need to handle bpf-event */ in machine__process_bpf_event_load()
52 info_linear = info_node->info_linear; in machine__process_bpf_event_load()
54 for (i = 0; i < info_linear->info.nr_jited_ksyms; i++) { in machine__process_bpf_event_load()
55 u64 *addrs = (u64 *)(uintptr_t)(info_linear->info.jited_ksyms); in machine__process_bpf_event_load()
63 dso__bpf_prog(dso)->id = id; in machine__process_bpf_event_load()
64 dso__bpf_prog(dso)->sub_id = i; in machine__process_bpf_event_load()
65 dso__bpf_prog(dso)->env = env; in machine__process_bpf_event_load()
72 int machine__process_bpf(struct machine *machine, union perf_event *event, in machine__process_bpf() argument
76 perf_event__fprintf_bpf(event, stdout); in machine__process_bpf()
78 switch (event->bpf.type) { in machine__process_bpf()
80 return machine__process_bpf_event_load(machine, event, sample); in machine__process_bpf()
90 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in machine__process_bpf()
108 return -1; in perf_env__fetch_btf()
110 node->id = btf_id; in perf_env__fetch_btf()
111 node->data_size = data_size; in perf_env__fetch_btf()
112 memcpy(node->data, data, data_size); in perf_env__fetch_btf()
117 return -1; in perf_env__fetch_btf()
127 u8 (*prog_tags)[BPF_TAG_SIZE] = (void *)(uintptr_t)(info->prog_tags); in synthesize_bpf_prog_name()
128 void *func_infos = (void *)(uintptr_t)(info->func_info); in synthesize_bpf_prog_name()
129 u32 sub_prog_cnt = info->nr_jited_ksyms; in synthesize_bpf_prog_name()
136 name_len += snprintf_hex(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
139 finfo = func_infos + sub_id * info->func_info_rec_size; in synthesize_bpf_prog_name()
140 t = btf__type_by_id(btf, finfo->type_id); in synthesize_bpf_prog_name()
141 short_name = btf__name_by_offset(btf, t->name_off); in synthesize_bpf_prog_name()
144 if (info->name[0]) in synthesize_bpf_prog_name()
145 short_name = info->name; in synthesize_bpf_prog_name()
149 name_len += snprintf(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
161 * -1 for failures;
162 * -2 for lack of kernel support.
168 union perf_event *event, in perf_event__synthesize_one_bpf_prog() argument
171 struct perf_record_ksymbol *ksymbol_event = &event->ksymbol; in perf_event__synthesize_one_bpf_prog()
172 struct perf_record_bpf_event *bpf_event = &event->bpf; in perf_event__synthesize_one_bpf_prog()
173 const struct perf_tool *tool = session->tool; in perf_event__synthesize_one_bpf_prog()
184 * for perf-record and perf-report use header.env; in perf_event__synthesize_one_bpf_prog()
187 env = session->data ? &session->header.env : &perf_env; in perf_event__synthesize_one_bpf_prog()
201 return -1; in perf_event__synthesize_one_bpf_prog()
204 if (info_linear->info_len < offsetof(struct bpf_prog_info, prog_tags)) { in perf_event__synthesize_one_bpf_prog()
207 return -2; in perf_event__synthesize_one_bpf_prog()
210 info = &info_linear->info; in perf_event__synthesize_one_bpf_prog()
211 if (!info->jited_ksyms) { in perf_event__synthesize_one_bpf_prog()
213 return -1; in perf_event__synthesize_one_bpf_prog()
217 sub_prog_cnt = info->nr_jited_ksyms; in perf_event__synthesize_one_bpf_prog()
218 if (sub_prog_cnt != info->nr_prog_tags || in perf_event__synthesize_one_bpf_prog()
219 sub_prog_cnt != info->nr_jited_func_lens) { in perf_event__synthesize_one_bpf_prog()
221 return -1; in perf_event__synthesize_one_bpf_prog()
225 if (info->btf_id && info->nr_func_info && info->func_info_rec_size) { in perf_event__synthesize_one_bpf_prog()
227 if (sub_prog_cnt != info->nr_func_info) { in perf_event__synthesize_one_bpf_prog()
230 return -1; in perf_event__synthesize_one_bpf_prog()
232 btf = btf__load_from_kernel_by_id(info->btf_id); in perf_event__synthesize_one_bpf_prog()
234 pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info->btf_id); in perf_event__synthesize_one_bpf_prog()
235 err = -1; in perf_event__synthesize_one_bpf_prog()
238 perf_env__fetch_btf(env, info->btf_id, btf); in perf_event__synthesize_one_bpf_prog()
243 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in perf_event__synthesize_one_bpf_prog()
244 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in perf_event__synthesize_one_bpf_prog()
250 .size = offsetof(struct perf_record_ksymbol, name), in perf_event__synthesize_one_bpf_prog()
258 name_len = synthesize_bpf_prog_name(ksymbol_event->name, in perf_event__synthesize_one_bpf_prog()
260 ksymbol_event->header.size += PERF_ALIGN(name_len + 1, in perf_event__synthesize_one_bpf_prog()
263 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
264 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
265 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
269 if (!opts->no_bpf_event) { in perf_event__synthesize_one_bpf_prog()
278 .id = info->id, in perf_event__synthesize_one_bpf_prog()
280 memcpy(bpf_event->tag, info->tag, BPF_TAG_SIZE); in perf_event__synthesize_one_bpf_prog()
281 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
282 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
287 err = -1; in perf_event__synthesize_one_bpf_prog()
291 info_node->info_linear = info_linear; in perf_event__synthesize_one_bpf_prog()
302 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
309 return err ? -1 : 0; in perf_event__synthesize_one_bpf_prog()
313 union perf_event *event; member
320 process_bpf_image(char *name, u64 addr, struct kallsyms_parse *data) in process_bpf_image() argument
322 struct machine *machine = data->machine; in process_bpf_image()
323 union perf_event *event = data->event; in process_bpf_image() local
327 ksymbol = &event->ksymbol; in process_bpf_image()
332 .size = offsetof(struct perf_record_ksymbol, name), in process_bpf_image()
340 len = scnprintf(ksymbol->name, KSYM_NAME_LEN, "%s", name); in process_bpf_image()
341 ksymbol->header.size += PERF_ALIGN(len + 1, sizeof(u64)); in process_bpf_image()
342 memset((void *) event + event->header.size, 0, machine->id_hdr_size); in process_bpf_image()
343 event->header.size += machine->id_hdr_size; in process_bpf_image()
345 return perf_tool__process_synth_event(data->tool, event, machine, in process_bpf_image()
346 data->process); in process_bpf_image()
354 char *module, *name; in kallsyms_process_symbol() local
366 name = memdup(_name, (module - _name) + 1); in kallsyms_process_symbol()
367 if (!name) in kallsyms_process_symbol()
368 return -ENOMEM; in kallsyms_process_symbol()
370 name[module - _name] = 0; in kallsyms_process_symbol()
373 if ((sscanf(name, "bpf_trampoline_%lu", &id) == 1) || in kallsyms_process_symbol()
374 (sscanf(name, "bpf_dispatcher_%s", disp) == 1)) in kallsyms_process_symbol()
375 err = process_bpf_image(name, start, data); in kallsyms_process_symbol()
377 free(name); in kallsyms_process_symbol()
388 union perf_event *event; in perf_event__synthesize_bpf_events() local
393 if (opts->no_bpf_event) in perf_event__synthesize_bpf_events()
396 event = malloc(sizeof(event->bpf) + KSYM_NAME_LEN + machine->id_hdr_size); in perf_event__synthesize_bpf_events()
397 if (!event) in perf_event__synthesize_bpf_events()
398 return -1; in perf_event__synthesize_bpf_events()
410 errno == EINVAL ? " -- kernel too old?" : ""); in perf_event__synthesize_bpf_events()
412 err = (errno == EINVAL || errno == EPERM) ? 0 : -1; in perf_event__synthesize_bpf_events()
424 event, opts); in perf_event__synthesize_bpf_events()
428 if (err == -2) in perf_event__synthesize_bpf_events()
434 /* Synthesize all the bpf images - trampolines/dispatchers. */ in perf_event__synthesize_bpf_events()
439 .event = event, in perf_event__synthesize_bpf_events()
442 .tool = session->tool, in perf_event__synthesize_bpf_events()
450 free(event); in perf_event__synthesize_bpf_events()
481 btf_id = info_linear->info.btf_id; in perf_env__add_bpf_info()
485 info_node->info_linear = info_linear; in perf_env__add_bpf_info()
509 static int bpf_event__sb_cb(union perf_event *event, void *data) in bpf_event__sb_cb() argument
513 if (event->header.type != PERF_RECORD_BPF_EVENT) in bpf_event__sb_cb()
514 return -1; in bpf_event__sb_cb()
516 switch (event->bpf.type) { in bpf_event__sb_cb()
518 perf_env__add_bpf_info(env, event->bpf.id); in bpf_event__sb_cb()
528 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in bpf_event__sb_cb()
559 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in __bpf_event__print_bpf_prog_info()
560 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in __bpf_event__print_bpf_prog_info()
561 char name[KSYM_NAME_LEN]; in __bpf_event__print_bpf_prog_info() local
565 sub_prog_cnt = info->nr_jited_ksyms; in __bpf_event__print_bpf_prog_info()
566 if (sub_prog_cnt != info->nr_prog_tags || in __bpf_event__print_bpf_prog_info()
567 sub_prog_cnt != info->nr_jited_func_lens) in __bpf_event__print_bpf_prog_info()
570 if (info->btf_id) { in __bpf_event__print_bpf_prog_info()
573 node = __perf_env__find_btf(env, info->btf_id); in __bpf_event__print_bpf_prog_info()
575 btf = btf__new((__u8 *)(node->data), in __bpf_event__print_bpf_prog_info()
576 node->data_size); in __bpf_event__print_bpf_prog_info()
580 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0); in __bpf_event__print_bpf_prog_info()
582 info->id, name, prog_addrs[0], prog_lens[0]); in __bpf_event__print_bpf_prog_info()
586 fprintf(fp, "# bpf_prog_info %u:\n", info->id); in __bpf_event__print_bpf_prog_info()
588 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, i); in __bpf_event__print_bpf_prog_info()
591 i, name, prog_addrs[i], prog_lens[i]); in __bpf_event__print_bpf_prog_info()