• Home
  • Raw
  • Download

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

1 // SPDX-License-Identifier: GPL-2.0
12 #include "bpf-event.h"
22 #include "util/synthetic-events.h"
32 ret += snprintf(buf + ret, size - ret, "%02x", data[i]); in snprintf_hex()
37 union perf_event *event, in machine__process_bpf_event_load() argument
42 struct perf_env *env = machine->env; in machine__process_bpf_event_load()
43 int id = event->bpf.id; in machine__process_bpf_event_load()
46 /* perf-record, no need to handle bpf-event */ in machine__process_bpf_event_load()
53 info_linear = info_node->info_linear; in machine__process_bpf_event_load()
55 for (i = 0; i < info_linear->info.nr_jited_ksyms; i++) { in machine__process_bpf_event_load()
56 u64 *addrs = (u64 *)(uintptr_t)(info_linear->info.jited_ksyms); in machine__process_bpf_event_load()
58 struct map *map = maps__find(&machine->kmaps, addr); in machine__process_bpf_event_load()
61 map->dso->binary_type = DSO_BINARY_TYPE__BPF_PROG_INFO; in machine__process_bpf_event_load()
62 map->dso->bpf_prog.id = id; in machine__process_bpf_event_load()
63 map->dso->bpf_prog.sub_id = i; in machine__process_bpf_event_load()
64 map->dso->bpf_prog.env = env; in machine__process_bpf_event_load()
70 int machine__process_bpf(struct machine *machine, union perf_event *event, in machine__process_bpf() argument
74 perf_event__fprintf_bpf(event, stdout); in machine__process_bpf()
76 switch (event->bpf.type) { in machine__process_bpf()
78 return machine__process_bpf_event_load(machine, event, sample); in machine__process_bpf()
88 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in machine__process_bpf()
106 return -1; in perf_env__fetch_btf()
108 node->id = btf_id; in perf_env__fetch_btf()
109 node->data_size = data_size; in perf_env__fetch_btf()
110 memcpy(node->data, data, data_size); in perf_env__fetch_btf()
115 return -1; in perf_env__fetch_btf()
125 u8 (*prog_tags)[BPF_TAG_SIZE] = (void *)(uintptr_t)(info->prog_tags); in synthesize_bpf_prog_name()
126 void *func_infos = (void *)(uintptr_t)(info->func_info); in synthesize_bpf_prog_name()
127 u32 sub_prog_cnt = info->nr_jited_ksyms; in synthesize_bpf_prog_name()
134 name_len += snprintf_hex(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
137 finfo = func_infos + sub_id * info->func_info_rec_size; in synthesize_bpf_prog_name()
138 t = btf__type_by_id(btf, finfo->type_id); in synthesize_bpf_prog_name()
139 short_name = btf__name_by_offset(btf, t->name_off); in synthesize_bpf_prog_name()
142 if (info->name[0]) in synthesize_bpf_prog_name()
143 short_name = info->name; in synthesize_bpf_prog_name()
147 name_len += snprintf(buf + name_len, size - name_len, in synthesize_bpf_prog_name()
159 * -1 for failures;
160 * -2 for lack of kernel support.
166 union perf_event *event, in perf_event__synthesize_one_bpf_prog() argument
169 struct perf_record_ksymbol *ksymbol_event = &event->ksymbol; in perf_event__synthesize_one_bpf_prog()
170 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()
182 * for perf-record and perf-report use header.env; in perf_event__synthesize_one_bpf_prog()
185 env = session->data ? &session->header.env : &perf_env; in perf_event__synthesize_one_bpf_prog()
199 return -1; in perf_event__synthesize_one_bpf_prog()
202 if (info_linear->info_len < offsetof(struct bpf_prog_info, prog_tags)) { in perf_event__synthesize_one_bpf_prog()
204 return -2; in perf_event__synthesize_one_bpf_prog()
207 info = &info_linear->info; in perf_event__synthesize_one_bpf_prog()
210 sub_prog_cnt = info->nr_jited_ksyms; in perf_event__synthesize_one_bpf_prog()
211 if (sub_prog_cnt != info->nr_prog_tags || in perf_event__synthesize_one_bpf_prog()
212 sub_prog_cnt != info->nr_jited_func_lens) in perf_event__synthesize_one_bpf_prog()
213 return -1; in perf_event__synthesize_one_bpf_prog()
216 if (info->btf_id && info->nr_func_info && info->func_info_rec_size) { in perf_event__synthesize_one_bpf_prog()
218 if (sub_prog_cnt != info->nr_func_info) { in perf_event__synthesize_one_bpf_prog()
220 err = -1; in perf_event__synthesize_one_bpf_prog()
223 if (btf__get_from_id(info->btf_id, &btf)) { in perf_event__synthesize_one_bpf_prog()
224 pr_debug("%s: failed to get BTF of id %u, aborting\n", __func__, info->btf_id); in perf_event__synthesize_one_bpf_prog()
225 err = -1; in perf_event__synthesize_one_bpf_prog()
229 perf_env__fetch_btf(env, info->btf_id, btf); in perf_event__synthesize_one_bpf_prog()
234 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in perf_event__synthesize_one_bpf_prog()
235 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in perf_event__synthesize_one_bpf_prog()
241 .size = offsetof(struct perf_record_ksymbol, name), in perf_event__synthesize_one_bpf_prog()
249 name_len = synthesize_bpf_prog_name(ksymbol_event->name, in perf_event__synthesize_one_bpf_prog()
251 ksymbol_event->header.size += PERF_ALIGN(name_len + 1, in perf_event__synthesize_one_bpf_prog()
254 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
255 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
256 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
260 if (!opts->no_bpf_event) { in perf_event__synthesize_one_bpf_prog()
269 .id = info->id, in perf_event__synthesize_one_bpf_prog()
271 memcpy(bpf_event->tag, info->tag, BPF_TAG_SIZE); in perf_event__synthesize_one_bpf_prog()
272 memset((void *)event + event->header.size, 0, machine->id_hdr_size); in perf_event__synthesize_one_bpf_prog()
273 event->header.size += machine->id_hdr_size; in perf_event__synthesize_one_bpf_prog()
278 err = -1; in perf_event__synthesize_one_bpf_prog()
282 info_node->info_linear = info_linear; in perf_event__synthesize_one_bpf_prog()
290 err = perf_tool__process_synth_event(tool, event, in perf_event__synthesize_one_bpf_prog()
297 return err ? -1 : 0; in perf_event__synthesize_one_bpf_prog()
301 union perf_event *event; member
308 process_bpf_image(char *name, u64 addr, struct kallsyms_parse *data) in process_bpf_image() argument
310 struct machine *machine = data->machine; in process_bpf_image()
311 union perf_event *event = data->event; in process_bpf_image() local
315 ksymbol = &event->ksymbol; in process_bpf_image()
320 .size = offsetof(struct perf_record_ksymbol, name), in process_bpf_image()
328 len = scnprintf(ksymbol->name, KSYM_NAME_LEN, "%s", name); in process_bpf_image()
329 ksymbol->header.size += PERF_ALIGN(len + 1, sizeof(u64)); in process_bpf_image()
330 memset((void *) event + event->header.size, 0, machine->id_hdr_size); in process_bpf_image()
331 event->header.size += machine->id_hdr_size; in process_bpf_image()
333 return perf_tool__process_synth_event(data->tool, event, machine, in process_bpf_image()
334 data->process); in process_bpf_image()
342 char *module, *name; in kallsyms_process_symbol() local
354 name = memdup(_name, (module - _name) + 1); in kallsyms_process_symbol()
355 if (!name) in kallsyms_process_symbol()
356 return -ENOMEM; in kallsyms_process_symbol()
358 name[module - _name] = 0; in kallsyms_process_symbol()
361 if ((sscanf(name, "bpf_trampoline_%lu", &id) == 1) || in kallsyms_process_symbol()
362 (sscanf(name, "bpf_dispatcher_%s", disp) == 1)) in kallsyms_process_symbol()
363 err = process_bpf_image(name, start, data); in kallsyms_process_symbol()
365 free(name); in kallsyms_process_symbol()
376 union perf_event *event; in perf_event__synthesize_bpf_events() local
381 event = malloc(sizeof(event->bpf) + KSYM_NAME_LEN + machine->id_hdr_size); in perf_event__synthesize_bpf_events()
382 if (!event) in perf_event__synthesize_bpf_events()
383 return -1; in perf_event__synthesize_bpf_events()
395 errno == EINVAL ? " -- kernel too old?" : ""); in perf_event__synthesize_bpf_events()
397 err = (errno == EINVAL || errno == EPERM) ? 0 : -1; in perf_event__synthesize_bpf_events()
409 event, opts); in perf_event__synthesize_bpf_events()
413 if (err == -2) in perf_event__synthesize_bpf_events()
419 /* Synthesize all the bpf images - trampolines/dispatchers. */ in perf_event__synthesize_bpf_events()
424 .event = event, in perf_event__synthesize_bpf_events()
427 .tool = session->tool, in perf_event__synthesize_bpf_events()
435 free(event); in perf_event__synthesize_bpf_events()
466 btf_id = info_linear->info.btf_id; in perf_env__add_bpf_info()
470 info_node->info_linear = info_linear; in perf_env__add_bpf_info()
490 static int bpf_event__sb_cb(union perf_event *event, void *data) in bpf_event__sb_cb() argument
494 if (event->header.type != PERF_RECORD_BPF_EVENT) in bpf_event__sb_cb()
495 return -1; in bpf_event__sb_cb()
497 switch (event->bpf.type) { in bpf_event__sb_cb()
499 perf_env__add_bpf_info(env, event->bpf.id); in bpf_event__sb_cb()
509 pr_debug("unexpected bpf event type of %d\n", event->bpf.type); in bpf_event__sb_cb()
540 __u32 *prog_lens = (__u32 *)(uintptr_t)(info->jited_func_lens); in __bpf_event__print_bpf_prog_info()
541 __u64 *prog_addrs = (__u64 *)(uintptr_t)(info->jited_ksyms); in __bpf_event__print_bpf_prog_info()
542 char name[KSYM_NAME_LEN]; in __bpf_event__print_bpf_prog_info() local
546 sub_prog_cnt = info->nr_jited_ksyms; in __bpf_event__print_bpf_prog_info()
547 if (sub_prog_cnt != info->nr_prog_tags || in __bpf_event__print_bpf_prog_info()
548 sub_prog_cnt != info->nr_jited_func_lens) in __bpf_event__print_bpf_prog_info()
551 if (info->btf_id) { in __bpf_event__print_bpf_prog_info()
554 node = __perf_env__find_btf(env, info->btf_id); in __bpf_event__print_bpf_prog_info()
556 btf = btf__new((__u8 *)(node->data), in __bpf_event__print_bpf_prog_info()
557 node->data_size); in __bpf_event__print_bpf_prog_info()
561 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, 0); in __bpf_event__print_bpf_prog_info()
563 info->id, name, prog_addrs[0], prog_lens[0]); in __bpf_event__print_bpf_prog_info()
567 fprintf(fp, "# bpf_prog_info %u:\n", info->id); in __bpf_event__print_bpf_prog_info()
569 synthesize_bpf_prog_name(name, KSYM_NAME_LEN, info, btf, i); in __bpf_event__print_bpf_prog_info()
572 i, name, prog_addrs[i], prog_lens[i]); in __bpf_event__print_bpf_prog_info()