• Home
  • Raw
  • Download

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()
62 dso->binary_type = DSO_BINARY_TYPE__BPF_PROG_INFO; in machine__process_bpf_event_load()
63 dso->bpf_prog.id = id; in machine__process_bpf_event_load()
64 dso->bpf_prog.sub_id = i; in machine__process_bpf_event_load()
65 dso->bpf_prog.env = env; in machine__process_bpf_event_load()
71 int machine__process_bpf(struct machine *machine, union perf_event *event, in machine__process_bpf() argument
75 perf_event__fprintf_bpf(event, stdout); in machine__process_bpf()
77 switch (event->bpf.type) { in machine__process_bpf()
79 return machine__process_bpf_event_load(machine, event, sample); in machine__process_bpf()
89 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in machine__process_bpf()
107 return -1; in perf_env__fetch_btf()
109 node->id = btf_id; in perf_env__fetch_btf()
110 node->data_size = data_size; in perf_env__fetch_btf()
111 memcpy(node->data, data, data_size); in perf_env__fetch_btf()
116 return -1; in perf_env__fetch_btf()
126 u8 (*prog_tags)[BPF_TAG_SIZE] = (void *)(uintptr_t)(info->prog_tags); in synthesize_bpf_prog_name()
127 void *func_infos = (void *)(uintptr_t)(info->func_info); in synthesize_bpf_prog_name()
128 u32 sub_prog_cnt = info->nr_jited_ksyms; in synthesize_bpf_prog_name()
135 name_len += snprintf_hex(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
138 finfo = func_infos + sub_id * info->func_info_rec_size; in synthesize_bpf_prog_name()
139 t = btf__type_by_id(btf, finfo->type_id); in synthesize_bpf_prog_name()
140 short_name = btf__name_by_offset(btf, t->name_off); in synthesize_bpf_prog_name()
143 if (info->name[0]) in synthesize_bpf_prog_name()
144 short_name = info->name; in synthesize_bpf_prog_name()
148 name_len += snprintf(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
160 * -1 for failures;
161 * -2 for lack of kernel support.
167 union perf_event *event, in perf_event__synthesize_one_bpf_prog() argument
170 struct perf_record_ksymbol *ksymbol_event = &event->ksymbol; in perf_event__synthesize_one_bpf_prog()
171 struct perf_record_bpf_event *bpf_event = &event->bpf; in perf_event__synthesize_one_bpf_prog()
172 struct perf_tool *tool = session->tool; in perf_event__synthesize_one_bpf_prog()
183 * for perf-record and perf-report use header.env; in perf_event__synthesize_one_bpf_prog()
186 env = session->data ? &session->header.env : &perf_env; in perf_event__synthesize_one_bpf_prog()
200 return -1; in perf_event__synthesize_one_bpf_prog()
203 if (info_linear->info_len < offsetof(struct bpf_prog_info, prog_tags)) { in perf_event__synthesize_one_bpf_prog()
206 return -2; in perf_event__synthesize_one_bpf_prog()
209 info = &info_linear->info; in perf_event__synthesize_one_bpf_prog()
210 if (!info->jited_ksyms) { in perf_event__synthesize_one_bpf_prog()
212 return -1; in perf_event__synthesize_one_bpf_prog()
216 sub_prog_cnt = info->nr_jited_ksyms; in perf_event__synthesize_one_bpf_prog()
217 if (sub_prog_cnt != info->nr_prog_tags || in perf_event__synthesize_one_bpf_prog()
218 sub_prog_cnt != info->nr_jited_func_lens) { in perf_event__synthesize_one_bpf_prog()
220 return -1; in perf_event__synthesize_one_bpf_prog()
224 if (info->btf_id && info->nr_func_info && info->func_info_rec_size) { in perf_event__synthesize_one_bpf_prog()
226 if (sub_prog_cnt != info->nr_func_info) { in perf_event__synthesize_one_bpf_prog()
229 return -1; in perf_event__synthesize_one_bpf_prog()
231 btf = btf__load_from_kernel_by_id(info->btf_id); in perf_event__synthesize_one_bpf_prog()
233 pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info->btf_id); in perf_event__synthesize_one_bpf_prog()
234 err = -1; in perf_event__synthesize_one_bpf_prog()
237 perf_env__fetch_btf(env, info->btf_id, btf); in perf_event__synthesize_one_bpf_prog()
242 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in perf_event__synthesize_one_bpf_prog()
243 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in perf_event__synthesize_one_bpf_prog()
249 .size = offsetof(struct perf_record_ksymbol, name), in perf_event__synthesize_one_bpf_prog()
257 name_len = synthesize_bpf_prog_name(ksymbol_event->name, in perf_event__synthesize_one_bpf_prog()
259 ksymbol_event->header.size += PERF_ALIGN(name_len + 1, in perf_event__synthesize_one_bpf_prog()
262 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
263 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
264 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
268 if (!opts->no_bpf_event) { in perf_event__synthesize_one_bpf_prog()
277 .id = info->id, in perf_event__synthesize_one_bpf_prog()
279 memcpy(bpf_event->tag, info->tag, BPF_TAG_SIZE); in perf_event__synthesize_one_bpf_prog()
280 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
281 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
286 err = -1; in perf_event__synthesize_one_bpf_prog()
290 info_node->info_linear = info_linear; in perf_event__synthesize_one_bpf_prog()
298 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
305 return err ? -1 : 0; in perf_event__synthesize_one_bpf_prog()
309 union perf_event *event; member
316 process_bpf_image(char *name, u64 addr, struct kallsyms_parse *data) in process_bpf_image() argument
318 struct machine *machine = data->machine; in process_bpf_image()
319 union perf_event *event = data->event; in process_bpf_image() local
323 ksymbol = &event->ksymbol; in process_bpf_image()
328 .size = offsetof(struct perf_record_ksymbol, name), in process_bpf_image()
336 len = scnprintf(ksymbol->name, KSYM_NAME_LEN, "%s", name); in process_bpf_image()
337 ksymbol->header.size += PERF_ALIGN(len + 1, sizeof(u64)); in process_bpf_image()
338 memset((void *) event + event->header.size, 0, machine->id_hdr_size); in process_bpf_image()
339 event->header.size += machine->id_hdr_size; in process_bpf_image()
341 return perf_tool__process_synth_event(data->tool, event, machine, in process_bpf_image()
342 data->process); in process_bpf_image()
350 char *module, *name; in kallsyms_process_symbol() local
362 name = memdup(_name, (module - _name) + 1); in kallsyms_process_symbol()
363 if (!name) in kallsyms_process_symbol()
364 return -ENOMEM; in kallsyms_process_symbol()
366 name[module - _name] = 0; in kallsyms_process_symbol()
369 if ((sscanf(name, "bpf_trampoline_%lu", &id) == 1) || in kallsyms_process_symbol()
370 (sscanf(name, "bpf_dispatcher_%s", disp) == 1)) in kallsyms_process_symbol()
371 err = process_bpf_image(name, start, data); in kallsyms_process_symbol()
373 free(name); in kallsyms_process_symbol()
384 union perf_event *event; in perf_event__synthesize_bpf_events() local
389 event = malloc(sizeof(event->bpf) + KSYM_NAME_LEN + machine->id_hdr_size); in perf_event__synthesize_bpf_events()
390 if (!event) in perf_event__synthesize_bpf_events()
391 return -1; in perf_event__synthesize_bpf_events()
403 errno == EINVAL ? " -- kernel too old?" : ""); in perf_event__synthesize_bpf_events()
405 err = (errno == EINVAL || errno == EPERM) ? 0 : -1; in perf_event__synthesize_bpf_events()
417 event, opts); in perf_event__synthesize_bpf_events()
421 if (err == -2) in perf_event__synthesize_bpf_events()
427 /* Synthesize all the bpf images - trampolines/dispatchers. */ in perf_event__synthesize_bpf_events()
432 .event = event, in perf_event__synthesize_bpf_events()
435 .tool = session->tool, in perf_event__synthesize_bpf_events()
443 free(event); in perf_event__synthesize_bpf_events()
474 btf_id = info_linear->info.btf_id; in perf_env__add_bpf_info()
478 info_node->info_linear = info_linear; in perf_env__add_bpf_info()
499 static int bpf_event__sb_cb(union perf_event *event, void *data) in bpf_event__sb_cb() argument
503 if (event->header.type != PERF_RECORD_BPF_EVENT) in bpf_event__sb_cb()
504 return -1; in bpf_event__sb_cb()
506 switch (event->bpf.type) { in bpf_event__sb_cb()
508 perf_env__add_bpf_info(env, event->bpf.id); in bpf_event__sb_cb()
518 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in bpf_event__sb_cb()
549 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in __bpf_event__print_bpf_prog_info()
550 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in __bpf_event__print_bpf_prog_info()
551 char name[KSYM_NAME_LEN]; in __bpf_event__print_bpf_prog_info() local
555 sub_prog_cnt = info->nr_jited_ksyms; in __bpf_event__print_bpf_prog_info()
556 if (sub_prog_cnt != info->nr_prog_tags || in __bpf_event__print_bpf_prog_info()
557 sub_prog_cnt != info->nr_jited_func_lens) in __bpf_event__print_bpf_prog_info()
560 if (info->btf_id) { in __bpf_event__print_bpf_prog_info()
563 node = __perf_env__find_btf(env, info->btf_id); in __bpf_event__print_bpf_prog_info()
565 btf = btf__new((__u8 *)(node->data), in __bpf_event__print_bpf_prog_info()
566 node->data_size); in __bpf_event__print_bpf_prog_info()
570 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0); in __bpf_event__print_bpf_prog_info()
572 info->id, name, prog_addrs[0], prog_lens[0]); in __bpf_event__print_bpf_prog_info()
576 fprintf(fp, "# bpf_prog_info %u:\n", info->id); in __bpf_event__print_bpf_prog_info()
578 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, i); in __bpf_event__print_bpf_prog_info()
581 i, name, prog_addrs[i], prog_lens[i]); in __bpf_event__print_bpf_prog_info()