Lines Matching refs:prog
231 static void bpf_program__unload(struct bpf_program *prog) in bpf_program__unload() argument
235 if (!prog) in bpf_program__unload()
242 if (prog->instances.nr > 0) { in bpf_program__unload()
243 for (i = 0; i < prog->instances.nr; i++) in bpf_program__unload()
244 zclose(prog->instances.fds[i]); in bpf_program__unload()
245 } else if (prog->instances.nr != -1) { in bpf_program__unload()
247 prog->instances.nr); in bpf_program__unload()
250 prog->instances.nr = -1; in bpf_program__unload()
251 zfree(&prog->instances.fds); in bpf_program__unload()
254 static void bpf_program__exit(struct bpf_program *prog) in bpf_program__exit() argument
256 if (!prog) in bpf_program__exit()
259 if (prog->clear_priv) in bpf_program__exit()
260 prog->clear_priv(prog, prog->priv); in bpf_program__exit()
262 prog->priv = NULL; in bpf_program__exit()
263 prog->clear_priv = NULL; in bpf_program__exit()
265 bpf_program__unload(prog); in bpf_program__exit()
266 zfree(&prog->name); in bpf_program__exit()
267 zfree(&prog->section_name); in bpf_program__exit()
268 zfree(&prog->insns); in bpf_program__exit()
269 zfree(&prog->reloc_desc); in bpf_program__exit()
271 prog->nr_reloc = 0; in bpf_program__exit()
272 prog->insns_cnt = 0; in bpf_program__exit()
273 prog->idx = -1; in bpf_program__exit()
278 struct bpf_program *prog) in bpf_program__init() argument
285 bzero(prog, sizeof(*prog)); in bpf_program__init()
287 prog->section_name = strdup(section_name); in bpf_program__init()
288 if (!prog->section_name) { in bpf_program__init()
294 prog->insns = malloc(size); in bpf_program__init()
295 if (!prog->insns) { in bpf_program__init()
300 prog->insns_cnt = size / sizeof(struct bpf_insn); in bpf_program__init()
301 memcpy(prog->insns, data, in bpf_program__init()
302 prog->insns_cnt * sizeof(struct bpf_insn)); in bpf_program__init()
303 prog->idx = idx; in bpf_program__init()
304 prog->instances.fds = NULL; in bpf_program__init()
305 prog->instances.nr = -1; in bpf_program__init()
306 prog->type = BPF_PROG_TYPE_KPROBE; in bpf_program__init()
310 bpf_program__exit(prog); in bpf_program__init()
318 struct bpf_program prog, *progs; in bpf_object__add_program() local
321 err = bpf_program__init(data, size, section_name, idx, &prog); in bpf_object__add_program()
337 bpf_program__exit(&prog); in bpf_object__add_program()
341 pr_debug("found program %s\n", prog.section_name); in bpf_object__add_program()
344 prog.obj = obj; in bpf_object__add_program()
345 progs[nr_progs] = prog; in bpf_object__add_program()
353 struct bpf_program *prog; in bpf_object__init_prog_names() local
359 prog = &obj->programs[pi]; in bpf_object__init_prog_names()
367 if (sym.st_shndx != prog->idx) in bpf_object__init_prog_names()
377 prog->section_name); in bpf_object__init_prog_names()
382 if (!name && prog->idx == obj->efile.text_shndx) in bpf_object__init_prog_names()
387 prog->section_name); in bpf_object__init_prog_names()
391 prog->name = strdup(name); in bpf_object__init_prog_names()
392 if (!prog->name) { in bpf_object__init_prog_names()
869 struct bpf_program *prog; in bpf_object__find_prog_by_idx() local
873 prog = &obj->programs[i]; in bpf_object__find_prog_by_idx()
874 if (prog->idx == idx) in bpf_object__find_prog_by_idx()
875 return prog; in bpf_object__find_prog_by_idx()
893 bpf_program__collect_reloc(struct bpf_program *prog, GElf_Shdr *shdr, in bpf_program__collect_reloc() argument
904 prog->section_name); in bpf_program__collect_reloc()
907 prog->reloc_desc = malloc(sizeof(*prog->reloc_desc) * nrels); in bpf_program__collect_reloc()
908 if (!prog->reloc_desc) { in bpf_program__collect_reloc()
912 prog->nr_reloc = nrels; in bpf_program__collect_reloc()
918 struct bpf_insn *insns = prog->insns; in bpf_program__collect_reloc()
939 prog->section_name, sym.st_shndx); in bpf_program__collect_reloc()
951 prog->reloc_desc[i].type = RELO_CALL; in bpf_program__collect_reloc()
952 prog->reloc_desc[i].insn_idx = insn_idx; in bpf_program__collect_reloc()
953 prog->reloc_desc[i].text_off = sym.st_value; in bpf_program__collect_reloc()
979 prog->reloc_desc[i].type = RELO_LD64; in bpf_program__collect_reloc()
980 prog->reloc_desc[i].insn_idx = insn_idx; in bpf_program__collect_reloc()
981 prog->reloc_desc[i].map_idx = map_idx; in bpf_program__collect_reloc()
1172 bpf_program__reloc_text(struct bpf_program *prog, struct bpf_object *obj, in bpf_program__reloc_text() argument
1182 if (prog->idx == obj->efile.text_shndx) { in bpf_program__reloc_text()
1188 if (prog->main_prog_cnt == 0) { in bpf_program__reloc_text()
1194 new_cnt = prog->insns_cnt + text->insns_cnt; in bpf_program__reloc_text()
1195 new_insn = reallocarray(prog->insns, new_cnt, sizeof(*insn)); in bpf_program__reloc_text()
1200 memcpy(new_insn + prog->insns_cnt, text->insns, in bpf_program__reloc_text()
1202 prog->insns = new_insn; in bpf_program__reloc_text()
1203 prog->main_prog_cnt = prog->insns_cnt; in bpf_program__reloc_text()
1204 prog->insns_cnt = new_cnt; in bpf_program__reloc_text()
1207 prog->section_name); in bpf_program__reloc_text()
1209 insn = &prog->insns[relo->insn_idx]; in bpf_program__reloc_text()
1210 insn->imm += prog->main_prog_cnt - relo->insn_idx; in bpf_program__reloc_text()
1215 bpf_program__relocate(struct bpf_program *prog, struct bpf_object *obj) in bpf_program__relocate() argument
1219 if (!prog || !prog->reloc_desc) in bpf_program__relocate()
1222 for (i = 0; i < prog->nr_reloc; i++) { in bpf_program__relocate()
1223 if (prog->reloc_desc[i].type == RELO_LD64) { in bpf_program__relocate()
1224 struct bpf_insn *insns = prog->insns; in bpf_program__relocate()
1227 insn_idx = prog->reloc_desc[i].insn_idx; in bpf_program__relocate()
1228 map_idx = prog->reloc_desc[i].map_idx; in bpf_program__relocate()
1230 if (insn_idx >= (int)prog->insns_cnt) { in bpf_program__relocate()
1232 prog->section_name); in bpf_program__relocate()
1238 err = bpf_program__reloc_text(prog, obj, in bpf_program__relocate()
1239 &prog->reloc_desc[i]); in bpf_program__relocate()
1245 zfree(&prog->reloc_desc); in bpf_program__relocate()
1246 prog->nr_reloc = 0; in bpf_program__relocate()
1254 struct bpf_program *prog; in bpf_object__relocate() local
1259 prog = &obj->programs[i]; in bpf_object__relocate()
1261 err = bpf_program__relocate(prog, obj); in bpf_object__relocate()
1264 prog->section_name); in bpf_object__relocate()
1284 struct bpf_program *prog; in bpf_object__collect_reloc() local
1291 prog = bpf_object__find_prog_by_idx(obj, idx); in bpf_object__collect_reloc()
1292 if (!prog) { in bpf_object__collect_reloc()
1297 err = bpf_program__collect_reloc(prog, in bpf_object__collect_reloc()
1379 bpf_program__load(struct bpf_program *prog, in bpf_program__load() argument
1384 if (prog->instances.nr < 0 || !prog->instances.fds) { in bpf_program__load()
1385 if (prog->preprocessor) { in bpf_program__load()
1387 prog->section_name); in bpf_program__load()
1391 prog->instances.fds = malloc(sizeof(int)); in bpf_program__load()
1392 if (!prog->instances.fds) { in bpf_program__load()
1396 prog->instances.nr = 1; in bpf_program__load()
1397 prog->instances.fds[0] = -1; in bpf_program__load()
1400 if (!prog->preprocessor) { in bpf_program__load()
1401 if (prog->instances.nr != 1) { in bpf_program__load()
1403 prog->section_name, prog->instances.nr); in bpf_program__load()
1405 err = load_program(prog->type, prog->expected_attach_type, in bpf_program__load()
1406 prog->name, prog->insns, prog->insns_cnt, in bpf_program__load()
1408 prog->prog_ifindex); in bpf_program__load()
1410 prog->instances.fds[0] = fd; in bpf_program__load()
1414 for (i = 0; i < prog->instances.nr; i++) { in bpf_program__load()
1416 bpf_program_prep_t preprocessor = prog->preprocessor; in bpf_program__load()
1419 err = preprocessor(prog, i, prog->insns, in bpf_program__load()
1420 prog->insns_cnt, &result); in bpf_program__load()
1423 i, prog->section_name); in bpf_program__load()
1429 i, prog->section_name); in bpf_program__load()
1430 prog->instances.fds[i] = -1; in bpf_program__load()
1436 err = load_program(prog->type, prog->expected_attach_type, in bpf_program__load()
1437 prog->name, result.new_insn_ptr, in bpf_program__load()
1440 prog->prog_ifindex); in bpf_program__load()
1444 i, prog->section_name); in bpf_program__load()
1450 prog->instances.fds[i] = fd; in bpf_program__load()
1455 prog->section_name); in bpf_program__load()
1456 zfree(&prog->insns); in bpf_program__load()
1457 prog->insns_cnt = 0; in bpf_program__load()
1461 static bool bpf_program__is_function_storage(struct bpf_program *prog, in bpf_program__is_function_storage() argument
1464 return prog->idx == obj->efile.text_shndx && obj->has_pseudo_calls; in bpf_program__is_function_storage()
1671 int bpf_program__pin_instance(struct bpf_program *prog, const char *path, in bpf_program__pin_instance() argument
1681 if (prog == NULL) { in bpf_program__pin_instance()
1686 if (instance < 0 || instance >= prog->instances.nr) { in bpf_program__pin_instance()
1688 instance, prog->section_name, prog->instances.nr); in bpf_program__pin_instance()
1692 if (bpf_obj_pin(prog->instances.fds[instance], path)) { in bpf_program__pin_instance()
1717 int bpf_program__pin(struct bpf_program *prog, const char *path) in bpf_program__pin() argument
1725 if (prog == NULL) { in bpf_program__pin()
1730 if (prog->instances.nr <= 0) { in bpf_program__pin()
1732 prog->section_name); in bpf_program__pin()
1740 for (i = 0; i < prog->instances.nr; i++) { in bpf_program__pin()
1750 err = bpf_program__pin_instance(prog, buf, i); in bpf_program__pin()
1784 struct bpf_program *prog; in bpf_object__pin() local
1816 bpf_object__for_each_program(prog, obj) { in bpf_object__pin()
1821 prog->section_name); in bpf_object__pin()
1827 err = bpf_program__pin(prog, buf); in bpf_object__pin()
1945 struct bpf_program *prog = prev; in bpf_program__next() local
1948 prog = __bpf_program__next(prog, obj); in bpf_program__next()
1949 } while (prog && bpf_program__is_function_storage(prog, obj)); in bpf_program__next()
1951 return prog; in bpf_program__next()
1954 int bpf_program__set_priv(struct bpf_program *prog, void *priv, in bpf_program__set_priv() argument
1957 if (prog->priv && prog->clear_priv) in bpf_program__set_priv()
1958 prog->clear_priv(prog, prog->priv); in bpf_program__set_priv()
1960 prog->priv = priv; in bpf_program__set_priv()
1961 prog->clear_priv = clear_priv; in bpf_program__set_priv()
1965 void *bpf_program__priv(struct bpf_program *prog) in bpf_program__priv() argument
1967 return prog ? prog->priv : ERR_PTR(-EINVAL); in bpf_program__priv()
1970 void bpf_program__set_ifindex(struct bpf_program *prog, __u32 ifindex) in bpf_program__set_ifindex() argument
1972 prog->prog_ifindex = ifindex; in bpf_program__set_ifindex()
1975 const char *bpf_program__title(struct bpf_program *prog, bool needs_copy) in bpf_program__title() argument
1979 title = prog->section_name; in bpf_program__title()
1991 int bpf_program__fd(struct bpf_program *prog) in bpf_program__fd() argument
1993 return bpf_program__nth_fd(prog, 0); in bpf_program__fd()
1996 int bpf_program__set_prep(struct bpf_program *prog, int nr_instances, in bpf_program__set_prep() argument
2004 if (prog->instances.nr > 0 || prog->instances.fds) { in bpf_program__set_prep()
2018 prog->instances.nr = nr_instances; in bpf_program__set_prep()
2019 prog->instances.fds = instances_fds; in bpf_program__set_prep()
2020 prog->preprocessor = prep; in bpf_program__set_prep()
2024 int bpf_program__nth_fd(struct bpf_program *prog, int n) in bpf_program__nth_fd() argument
2028 if (!prog) in bpf_program__nth_fd()
2031 if (n >= prog->instances.nr || n < 0) { in bpf_program__nth_fd()
2033 n, prog->section_name, prog->instances.nr); in bpf_program__nth_fd()
2037 fd = prog->instances.fds[n]; in bpf_program__nth_fd()
2040 n, prog->section_name); in bpf_program__nth_fd()
2047 void bpf_program__set_type(struct bpf_program *prog, enum bpf_prog_type type) in bpf_program__set_type() argument
2049 prog->type = type; in bpf_program__set_type()
2052 static bool bpf_program__is_type(struct bpf_program *prog, in bpf_program__is_type() argument
2055 return prog ? (prog->type == type) : false; in bpf_program__is_type()
2059 int bpf_program__set_##NAME(struct bpf_program *prog) \
2061 if (!prog) \
2063 bpf_program__set_type(prog, TYPE); \
2067 bool bpf_program__is_##NAME(struct bpf_program *prog) \
2069 return bpf_program__is_type(prog, TYPE); \
2081 void bpf_program__set_expected_attach_type(struct bpf_program *prog, in bpf_program__set_expected_attach_type() argument
2084 prog->expected_attach_type = type; in bpf_program__set_expected_attach_type()
2158 bpf_program__identify_section(struct bpf_program *prog, in bpf_program__identify_section() argument
2162 return libbpf_prog_type_by_name(prog->section_name, prog_type, in bpf_program__identify_section()
2300 struct bpf_program *prog, *first_prog = NULL; in bpf_prog_load_xattr() local
2316 bpf_object__for_each_program(prog, obj) { in bpf_prog_load_xattr()
2322 prog->prog_ifindex = attr->ifindex; in bpf_prog_load_xattr()
2325 err = bpf_program__identify_section(prog, &prog_type, in bpf_prog_load_xattr()
2329 prog->section_name); in bpf_prog_load_xattr()
2335 bpf_program__set_type(prog, prog_type); in bpf_prog_load_xattr()
2336 bpf_program__set_expected_attach_type(prog, in bpf_prog_load_xattr()
2339 if (!bpf_program__is_function_storage(prog, obj) && !first_prog) in bpf_prog_load_xattr()
2340 first_prog = prog; in bpf_prog_load_xattr()