Lines Matching refs:prog

298 void bpf_program__unload(struct bpf_program *prog)  in bpf_program__unload()  argument
302 if (!prog) in bpf_program__unload()
309 if (prog->instances.nr > 0) { in bpf_program__unload()
310 for (i = 0; i < prog->instances.nr; i++) in bpf_program__unload()
311 zclose(prog->instances.fds[i]); in bpf_program__unload()
312 } else if (prog->instances.nr != -1) { in bpf_program__unload()
314 prog->instances.nr); in bpf_program__unload()
317 prog->instances.nr = -1; in bpf_program__unload()
318 zfree(&prog->instances.fds); in bpf_program__unload()
320 zfree(&prog->func_info); in bpf_program__unload()
321 zfree(&prog->line_info); in bpf_program__unload()
324 static void bpf_program__exit(struct bpf_program *prog) in bpf_program__exit() argument
326 if (!prog) in bpf_program__exit()
329 if (prog->clear_priv) in bpf_program__exit()
330 prog->clear_priv(prog, prog->priv); in bpf_program__exit()
332 prog->priv = NULL; in bpf_program__exit()
333 prog->clear_priv = NULL; in bpf_program__exit()
335 bpf_program__unload(prog); in bpf_program__exit()
336 zfree(&prog->name); in bpf_program__exit()
337 zfree(&prog->section_name); in bpf_program__exit()
338 zfree(&prog->pin_name); in bpf_program__exit()
339 zfree(&prog->insns); in bpf_program__exit()
340 zfree(&prog->reloc_desc); in bpf_program__exit()
342 prog->nr_reloc = 0; in bpf_program__exit()
343 prog->insns_cnt = 0; in bpf_program__exit()
344 prog->idx = -1; in bpf_program__exit()
347 static char *__bpf_program__pin_name(struct bpf_program *prog) in __bpf_program__pin_name() argument
351 name = p = strdup(prog->section_name); in __bpf_program__pin_name()
360 struct bpf_program *prog) in bpf_program__init() argument
370 memset(prog, 0, sizeof(*prog)); in bpf_program__init()
372 prog->section_name = strdup(section_name); in bpf_program__init()
373 if (!prog->section_name) { in bpf_program__init()
379 prog->pin_name = __bpf_program__pin_name(prog); in bpf_program__init()
380 if (!prog->pin_name) { in bpf_program__init()
386 prog->insns = malloc(size); in bpf_program__init()
387 if (!prog->insns) { in bpf_program__init()
392 prog->insns_cnt = size / bpf_insn_sz; in bpf_program__init()
393 memcpy(prog->insns, data, size); in bpf_program__init()
394 prog->idx = idx; in bpf_program__init()
395 prog->instances.fds = NULL; in bpf_program__init()
396 prog->instances.nr = -1; in bpf_program__init()
397 prog->type = BPF_PROG_TYPE_UNSPEC; in bpf_program__init()
401 bpf_program__exit(prog); in bpf_program__init()
409 struct bpf_program prog, *progs; in bpf_object__add_program() local
412 err = bpf_program__init(data, size, section_name, idx, &prog); in bpf_object__add_program()
416 prog.caps = &obj->caps; in bpf_object__add_program()
429 bpf_program__exit(&prog); in bpf_object__add_program()
433 pr_debug("found program %s\n", prog.section_name); in bpf_object__add_program()
436 prog.obj = obj; in bpf_object__add_program()
437 progs[nr_progs] = prog; in bpf_object__add_program()
445 struct bpf_program *prog; in bpf_object__init_prog_names() local
451 prog = &obj->programs[pi]; in bpf_object__init_prog_names()
459 if (sym.st_shndx != prog->idx) in bpf_object__init_prog_names()
469 prog->section_name); in bpf_object__init_prog_names()
474 if (!name && prog->idx == obj->efile.text_shndx) in bpf_object__init_prog_names()
479 prog->section_name); in bpf_object__init_prog_names()
483 prog->name = strdup(name); in bpf_object__init_prog_names()
484 if (!prog->name) { in bpf_object__init_prog_names()
1665 struct bpf_program *prog; in bpf_object__find_prog_by_idx() local
1669 prog = &obj->programs[i]; in bpf_object__find_prog_by_idx()
1670 if (prog->idx == idx) in bpf_object__find_prog_by_idx()
1671 return prog; in bpf_object__find_prog_by_idx()
1726 bpf_program__collect_reloc(struct bpf_program *prog, GElf_Shdr *shdr, in bpf_program__collect_reloc() argument
1734 pr_debug("collecting relocating info for: '%s'\n", prog->section_name); in bpf_program__collect_reloc()
1737 prog->reloc_desc = malloc(sizeof(*prog->reloc_desc) * nrels); in bpf_program__collect_reloc()
1738 if (!prog->reloc_desc) { in bpf_program__collect_reloc()
1742 prog->nr_reloc = nrels; in bpf_program__collect_reloc()
1745 struct bpf_insn *insns = prog->insns; in bpf_program__collect_reloc()
1785 prog->section_name, shdr_idx); in bpf_program__collect_reloc()
1794 prog->reloc_desc[i].type = RELO_CALL; in bpf_program__collect_reloc()
1795 prog->reloc_desc[i].insn_idx = insn_idx; in bpf_program__collect_reloc()
1796 prog->reloc_desc[i].text_off = sym.st_value; in bpf_program__collect_reloc()
1844 prog->reloc_desc[i].type = type != LIBBPF_MAP_UNSPEC ? in bpf_program__collect_reloc()
1846 prog->reloc_desc[i].insn_idx = insn_idx; in bpf_program__collect_reloc()
1847 prog->reloc_desc[i].map_idx = map_idx; in bpf_program__collect_reloc()
2231 check_btf_ext_reloc_err(struct bpf_program *prog, int err, in check_btf_ext_reloc_err() argument
2236 info_name, prog->section_name); in check_btf_ext_reloc_err()
2248 info_name, prog->section_name); in check_btf_ext_reloc_err()
2254 info_name, prog->section_name, info_name); in check_btf_ext_reloc_err()
2259 bpf_program_reloc_btf_ext(struct bpf_program *prog, struct bpf_object *obj, in bpf_program_reloc_btf_ext() argument
2264 if (!insn_offset || prog->func_info) { in bpf_program_reloc_btf_ext()
2273 &prog->func_info, in bpf_program_reloc_btf_ext()
2274 &prog->func_info_cnt); in bpf_program_reloc_btf_ext()
2276 return check_btf_ext_reloc_err(prog, err, in bpf_program_reloc_btf_ext()
2277 prog->func_info, in bpf_program_reloc_btf_ext()
2280 prog->func_info_rec_size = btf_ext__func_info_rec_size(obj->btf_ext); in bpf_program_reloc_btf_ext()
2283 if (!insn_offset || prog->line_info) { in bpf_program_reloc_btf_ext()
2286 &prog->line_info, in bpf_program_reloc_btf_ext()
2287 &prog->line_info_cnt); in bpf_program_reloc_btf_ext()
2289 return check_btf_ext_reloc_err(prog, err, in bpf_program_reloc_btf_ext()
2290 prog->line_info, in bpf_program_reloc_btf_ext()
2293 prog->line_info_rec_size = btf_ext__line_info_rec_size(obj->btf_ext); in bpf_program_reloc_btf_ext()
2783 static int bpf_core_reloc_insn(struct bpf_program *prog, int insn_off, in bpf_core_reloc_insn() argument
2794 insn = &prog->insns[insn_idx]; in bpf_core_reloc_insn()
2804 bpf_program__title(prog, false), in bpf_core_reloc_insn()
2808 bpf_program__title(prog, false), in bpf_core_reloc_insn()
2998 static int bpf_core_reloc_offset(struct bpf_program *prog, in bpf_core_reloc_offset() argument
3005 const char *prog_name = bpf_program__title(prog, false); in bpf_core_reloc_offset()
3096 err = bpf_core_reloc_insn(prog, relo->insn_off, in bpf_core_reloc_offset()
3115 struct bpf_program *prog; in bpf_core_reloc_offsets() local
3143 prog = bpf_object__find_program_by_title(obj, sec_name); in bpf_core_reloc_offsets()
3144 if (!prog) { in bpf_core_reloc_offsets()
3155 err = bpf_core_reloc_offset(prog, rec, i, obj->btf, in bpf_core_reloc_offsets()
3188 bpf_program__reloc_text(struct bpf_program *prog, struct bpf_object *obj, in bpf_program__reloc_text() argument
3199 if (prog->idx == obj->efile.text_shndx) { in bpf_program__reloc_text()
3205 if (prog->main_prog_cnt == 0) { in bpf_program__reloc_text()
3211 new_cnt = prog->insns_cnt + text->insns_cnt; in bpf_program__reloc_text()
3212 new_insn = reallocarray(prog->insns, new_cnt, sizeof(*insn)); in bpf_program__reloc_text()
3219 err = bpf_program_reloc_btf_ext(prog, obj, in bpf_program__reloc_text()
3221 prog->insns_cnt); in bpf_program__reloc_text()
3226 memcpy(new_insn + prog->insns_cnt, text->insns, in bpf_program__reloc_text()
3228 prog->insns = new_insn; in bpf_program__reloc_text()
3229 prog->main_prog_cnt = prog->insns_cnt; in bpf_program__reloc_text()
3230 prog->insns_cnt = new_cnt; in bpf_program__reloc_text()
3233 prog->section_name); in bpf_program__reloc_text()
3235 insn = &prog->insns[relo->insn_idx]; in bpf_program__reloc_text()
3236 insn->imm += prog->main_prog_cnt - relo->insn_idx; in bpf_program__reloc_text()
3241 bpf_program__relocate(struct bpf_program *prog, struct bpf_object *obj) in bpf_program__relocate() argument
3245 if (!prog) in bpf_program__relocate()
3249 err = bpf_program_reloc_btf_ext(prog, obj, in bpf_program__relocate()
3250 prog->section_name, 0); in bpf_program__relocate()
3255 if (!prog->reloc_desc) in bpf_program__relocate()
3258 for (i = 0; i < prog->nr_reloc; i++) { in bpf_program__relocate()
3259 if (prog->reloc_desc[i].type == RELO_LD64 || in bpf_program__relocate()
3260 prog->reloc_desc[i].type == RELO_DATA) { in bpf_program__relocate()
3261 bool relo_data = prog->reloc_desc[i].type == RELO_DATA; in bpf_program__relocate()
3262 struct bpf_insn *insns = prog->insns; in bpf_program__relocate()
3265 insn_idx = prog->reloc_desc[i].insn_idx; in bpf_program__relocate()
3266 map_idx = prog->reloc_desc[i].map_idx; in bpf_program__relocate()
3268 if (insn_idx + 1 >= (int)prog->insns_cnt) { in bpf_program__relocate()
3270 prog->section_name); in bpf_program__relocate()
3281 } else if (prog->reloc_desc[i].type == RELO_CALL) { in bpf_program__relocate()
3282 err = bpf_program__reloc_text(prog, obj, in bpf_program__relocate()
3283 &prog->reloc_desc[i]); in bpf_program__relocate()
3289 zfree(&prog->reloc_desc); in bpf_program__relocate()
3290 prog->nr_reloc = 0; in bpf_program__relocate()
3297 struct bpf_program *prog; in bpf_object__relocate() local
3310 prog = &obj->programs[i]; in bpf_object__relocate()
3312 err = bpf_program__relocate(prog, obj); in bpf_object__relocate()
3315 prog->section_name); in bpf_object__relocate()
3335 struct bpf_program *prog; in bpf_object__collect_reloc() local
3342 prog = bpf_object__find_prog_by_idx(obj, idx); in bpf_object__collect_reloc()
3343 if (!prog) { in bpf_object__collect_reloc()
3348 err = bpf_program__collect_reloc(prog, shdr, data, obj); in bpf_object__collect_reloc()
3356 load_program(struct bpf_program *prog, struct bpf_insn *insns, int insns_cnt, in load_program() argument
3369 load_attr.prog_type = prog->type; in load_program()
3370 load_attr.expected_attach_type = prog->expected_attach_type; in load_program()
3371 if (prog->caps->name) in load_program()
3372 load_attr.name = prog->name; in load_program()
3377 load_attr.prog_ifindex = prog->prog_ifindex; in load_program()
3379 if (prog->obj->btf_ext) in load_program()
3380 btf_fd = bpf_object__btf_fd(prog->obj); in load_program()
3384 load_attr.func_info = prog->func_info; in load_program()
3385 load_attr.func_info_rec_size = prog->func_info_rec_size; in load_program()
3386 load_attr.func_info_cnt = prog->func_info_cnt; in load_program()
3387 load_attr.line_info = prog->line_info; in load_program()
3388 load_attr.line_info_rec_size = prog->line_info_rec_size; in load_program()
3389 load_attr.line_info_cnt = prog->line_info_cnt; in load_program()
3390 load_attr.log_level = prog->log_level; in load_program()
3391 load_attr.prog_flags = prog->prog_flags; in load_program()
3451 bpf_program__load(struct bpf_program *prog, in bpf_program__load() argument
3456 if (prog->instances.nr < 0 || !prog->instances.fds) { in bpf_program__load()
3457 if (prog->preprocessor) { in bpf_program__load()
3459 prog->section_name); in bpf_program__load()
3463 prog->instances.fds = malloc(sizeof(int)); in bpf_program__load()
3464 if (!prog->instances.fds) { in bpf_program__load()
3468 prog->instances.nr = 1; in bpf_program__load()
3469 prog->instances.fds[0] = -1; in bpf_program__load()
3472 if (!prog->preprocessor) { in bpf_program__load()
3473 if (prog->instances.nr != 1) { in bpf_program__load()
3475 prog->section_name, prog->instances.nr); in bpf_program__load()
3477 err = load_program(prog, prog->insns, prog->insns_cnt, in bpf_program__load()
3480 prog->instances.fds[0] = fd; in bpf_program__load()
3484 for (i = 0; i < prog->instances.nr; i++) { in bpf_program__load()
3486 bpf_program_prep_t preprocessor = prog->preprocessor; in bpf_program__load()
3489 err = preprocessor(prog, i, prog->insns, in bpf_program__load()
3490 prog->insns_cnt, &result); in bpf_program__load()
3493 i, prog->section_name); in bpf_program__load()
3499 i, prog->section_name); in bpf_program__load()
3500 prog->instances.fds[i] = -1; in bpf_program__load()
3506 err = load_program(prog, result.new_insn_ptr, in bpf_program__load()
3512 i, prog->section_name); in bpf_program__load()
3518 prog->instances.fds[i] = fd; in bpf_program__load()
3523 prog->section_name); in bpf_program__load()
3524 zfree(&prog->insns); in bpf_program__load()
3525 prog->insns_cnt = 0; in bpf_program__load()
3529 static bool bpf_program__is_function_storage(const struct bpf_program *prog, in bpf_program__is_function_storage() argument
3532 return prog->idx == obj->efile.text_shndx && obj->has_pseudo_calls; in bpf_program__is_function_storage()
3763 int bpf_program__pin_instance(struct bpf_program *prog, const char *path, in bpf_program__pin_instance() argument
3773 if (prog == NULL) { in bpf_program__pin_instance()
3778 if (instance < 0 || instance >= prog->instances.nr) { in bpf_program__pin_instance()
3780 instance, prog->section_name, prog->instances.nr); in bpf_program__pin_instance()
3784 if (bpf_obj_pin(prog->instances.fds[instance], path)) { in bpf_program__pin_instance()
3794 int bpf_program__unpin_instance(struct bpf_program *prog, const char *path, in bpf_program__unpin_instance() argument
3803 if (prog == NULL) { in bpf_program__unpin_instance()
3808 if (instance < 0 || instance >= prog->instances.nr) { in bpf_program__unpin_instance()
3810 instance, prog->section_name, prog->instances.nr); in bpf_program__unpin_instance()
3837 int bpf_program__pin(struct bpf_program *prog, const char *path) in bpf_program__pin() argument
3845 if (prog == NULL) { in bpf_program__pin()
3850 if (prog->instances.nr <= 0) { in bpf_program__pin()
3852 prog->section_name); in bpf_program__pin()
3856 if (prog->instances.nr == 1) { in bpf_program__pin()
3858 return bpf_program__pin_instance(prog, path, 0); in bpf_program__pin()
3865 for (i = 0; i < prog->instances.nr; i++) { in bpf_program__pin()
3878 err = bpf_program__pin_instance(prog, buf, i); in bpf_program__pin()
3896 bpf_program__unpin_instance(prog, buf, i); in bpf_program__pin()
3904 int bpf_program__unpin(struct bpf_program *prog, const char *path) in bpf_program__unpin() argument
3912 if (prog == NULL) { in bpf_program__unpin()
3917 if (prog->instances.nr <= 0) { in bpf_program__unpin()
3919 prog->section_name); in bpf_program__unpin()
3923 if (prog->instances.nr == 1) { in bpf_program__unpin()
3925 return bpf_program__unpin_instance(prog, path, 0); in bpf_program__unpin()
3928 for (i = 0; i < prog->instances.nr; i++) { in bpf_program__unpin()
3938 err = bpf_program__unpin_instance(prog, buf, i); in bpf_program__unpin()
4081 struct bpf_program *prog; in bpf_object__pin_programs() local
4096 bpf_object__for_each_program(prog, obj) { in bpf_object__pin_programs()
4101 prog->pin_name); in bpf_object__pin_programs()
4110 err = bpf_program__pin(prog, buf); in bpf_object__pin_programs()
4118 while ((prog = bpf_program__prev(prog, obj))) { in bpf_object__pin_programs()
4123 prog->pin_name); in bpf_object__pin_programs()
4129 bpf_program__unpin(prog, buf); in bpf_object__pin_programs()
4137 struct bpf_program *prog; in bpf_object__unpin_programs() local
4143 bpf_object__for_each_program(prog, obj) { in bpf_object__unpin_programs()
4148 prog->pin_name); in bpf_object__unpin_programs()
4154 err = bpf_program__unpin(prog, buf); in bpf_object__unpin_programs()
4302 struct bpf_program *prog = prev; in bpf_program__next() local
4305 prog = __bpf_program__iter(prog, obj, true); in bpf_program__next()
4306 } while (prog && bpf_program__is_function_storage(prog, obj)); in bpf_program__next()
4308 return prog; in bpf_program__next()
4314 struct bpf_program *prog = next; in bpf_program__prev() local
4317 prog = __bpf_program__iter(prog, obj, false); in bpf_program__prev()
4318 } while (prog && bpf_program__is_function_storage(prog, obj)); in bpf_program__prev()
4320 return prog; in bpf_program__prev()
4323 int bpf_program__set_priv(struct bpf_program *prog, void *priv, in bpf_program__set_priv() argument
4326 if (prog->priv && prog->clear_priv) in bpf_program__set_priv()
4327 prog->clear_priv(prog, prog->priv); in bpf_program__set_priv()
4329 prog->priv = priv; in bpf_program__set_priv()
4330 prog->clear_priv = clear_priv; in bpf_program__set_priv()
4334 void *bpf_program__priv(const struct bpf_program *prog) in bpf_program__priv() argument
4336 return prog ? prog->priv : ERR_PTR(-EINVAL); in bpf_program__priv()
4339 void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex) in bpf_program__set_ifindex() argument
4341 prog->prog_ifindex = ifindex; in bpf_program__set_ifindex()
4344 const char *bpf_program__title(const struct bpf_program *prog, bool needs_copy) in bpf_program__title() argument
4348 title = prog->section_name; in bpf_program__title()
4360 int bpf_program__fd(const struct bpf_program *prog) in bpf_program__fd() argument
4362 return bpf_program__nth_fd(prog, 0); in bpf_program__fd()
4365 int bpf_program__set_prep(struct bpf_program *prog, int nr_instances, in bpf_program__set_prep() argument
4373 if (prog->instances.nr > 0 || prog->instances.fds) { in bpf_program__set_prep()
4387 prog->instances.nr = nr_instances; in bpf_program__set_prep()
4388 prog->instances.fds = instances_fds; in bpf_program__set_prep()
4389 prog->preprocessor = prep; in bpf_program__set_prep()
4393 int bpf_program__nth_fd(const struct bpf_program *prog, int n) in bpf_program__nth_fd() argument
4397 if (!prog) in bpf_program__nth_fd()
4400 if (n >= prog->instances.nr || n < 0) { in bpf_program__nth_fd()
4402 n, prog->section_name, prog->instances.nr); in bpf_program__nth_fd()
4406 fd = prog->instances.fds[n]; in bpf_program__nth_fd()
4409 n, prog->section_name); in bpf_program__nth_fd()
4416 void bpf_program__set_type(struct bpf_program *prog, enum bpf_prog_type type) in bpf_program__set_type() argument
4418 prog->type = type; in bpf_program__set_type()
4421 static bool bpf_program__is_type(const struct bpf_program *prog, in bpf_program__is_type() argument
4424 return prog ? (prog->type == type) : false; in bpf_program__is_type()
4428 int bpf_program__set_##NAME(struct bpf_program *prog) \
4430 if (!prog) \
4432 bpf_program__set_type(prog, TYPE); \
4436 bool bpf_program__is_##NAME(const struct bpf_program *prog) \
4438 return bpf_program__is_type(prog, TYPE); \
4450 void bpf_program__set_expected_attach_type(struct bpf_program *prog, in bpf_program__set_expected_attach_type() argument
4453 prog->expected_attach_type = type; in bpf_program__set_expected_attach_type()
4634 bpf_program__identify_section(struct bpf_program *prog, in bpf_program__identify_section() argument
4638 return libbpf_prog_type_by_name(prog->section_name, prog_type, in bpf_program__identify_section()
4808 struct bpf_program *prog, *first_prog = NULL; in bpf_prog_load_xattr() local
4827 bpf_object__for_each_program(prog, obj) { in bpf_prog_load_xattr()
4833 prog->prog_ifindex = attr->ifindex; in bpf_prog_load_xattr()
4836 err = bpf_program__identify_section(prog, &prog_type, in bpf_prog_load_xattr()
4844 bpf_program__set_type(prog, prog_type); in bpf_prog_load_xattr()
4845 bpf_program__set_expected_attach_type(prog, in bpf_prog_load_xattr()
4848 prog->log_level = attr->log_level; in bpf_prog_load_xattr()
4849 prog->prog_flags = attr->prog_flags; in bpf_prog_load_xattr()
4851 first_prog = prog; in bpf_prog_load_xattr()
4911 struct bpf_link *bpf_program__attach_perf_event(struct bpf_program *prog, in bpf_program__attach_perf_event() argument
4920 bpf_program__title(prog, false), pfd); in bpf_program__attach_perf_event()
4923 prog_fd = bpf_program__fd(prog); in bpf_program__attach_perf_event()
4926 bpf_program__title(prog, false)); in bpf_program__attach_perf_event()
4940 bpf_program__title(prog, false), pfd, in bpf_program__attach_perf_event()
4948 bpf_program__title(prog, false), pfd, in bpf_program__attach_perf_event()
5061 struct bpf_link *bpf_program__attach_kprobe(struct bpf_program *prog, in bpf_program__attach_kprobe() argument
5073 bpf_program__title(prog, false), in bpf_program__attach_kprobe()
5078 link = bpf_program__attach_perf_event(prog, pfd); in bpf_program__attach_kprobe()
5083 bpf_program__title(prog, false), in bpf_program__attach_kprobe()
5091 struct bpf_link *bpf_program__attach_uprobe(struct bpf_program *prog, in bpf_program__attach_uprobe() argument
5104 bpf_program__title(prog, false), in bpf_program__attach_uprobe()
5110 link = bpf_program__attach_perf_event(prog, pfd); in bpf_program__attach_uprobe()
5115 bpf_program__title(prog, false), in bpf_program__attach_uprobe()
5174 struct bpf_link *bpf_program__attach_tracepoint(struct bpf_program *prog, in bpf_program__attach_tracepoint() argument
5185 bpf_program__title(prog, false), in bpf_program__attach_tracepoint()
5190 link = bpf_program__attach_perf_event(prog, pfd); in bpf_program__attach_tracepoint()
5195 bpf_program__title(prog, false), in bpf_program__attach_tracepoint()
5210 struct bpf_link *bpf_program__attach_raw_tracepoint(struct bpf_program *prog, in bpf_program__attach_raw_tracepoint() argument
5217 prog_fd = bpf_program__fd(prog); in bpf_program__attach_raw_tracepoint()
5220 bpf_program__title(prog, false)); in bpf_program__attach_raw_tracepoint()
5234 bpf_program__title(prog, false), tp_name, in bpf_program__attach_raw_tracepoint()