Lines Matching defs:subprog

4451 	/* loading subprog addresses */
4457 pr_warn("prog '%s': bad subprog addr relo against '%s' at offset %zu+%d\n",
5819 /* When __weak subprog is "overridden" by another instance
5820 * of the subprog from a different object file, linker still
5825 * subprog instructions when discovering subprograms.
6199 static int append_subprog_relos(struct bpf_program *main_prog, struct bpf_program *subprog)
6201 int new_cnt = main_prog->nr_reloc + subprog->nr_reloc;
6205 if (main_prog == subprog)
6214 if (subprog->nr_reloc)
6215 memcpy(relos + main_prog->nr_reloc, subprog->reloc_desc,
6216 sizeof(*relos) * subprog->nr_reloc);
6219 relos[i].insn_idx += subprog->sub_insn_off;
6230 struct bpf_program *subprog)
6236 subprog->sub_insn_off = main_prog->insns_cnt;
6238 new_cnt = main_prog->insns_cnt + subprog->insns_cnt;
6247 memcpy(main_prog->insns + subprog->sub_insn_off, subprog->insns,
6248 subprog->insns_cnt * sizeof(*insns));
6251 main_prog->name, subprog->insns_cnt, subprog->name);
6253 /* The subprog insns are now appended. Append its relos too. */
6254 err = append_subprog_relos(main_prog, subprog);
6265 struct bpf_program *subprog;
6298 * for subprog addr relocation, the relo->sym_off + insn->imm is
6310 pr_warn("prog '%s': missing subprog addr relo for insn #%zu\n",
6324 subprog = find_prog_by_sec_insn(obj, obj->efile.text_shndx, sub_insn_idx);
6325 if (!subprog) {
6332 * subprogram (meaning this subprog hasn't been processed
6341 if (subprog->sub_insn_off == 0) {
6342 err = bpf_object__append_subprog_code(obj, main_prog, subprog);
6345 err = bpf_object__reloc_code(obj, main_prog, subprog);
6357 * well), so position of any subprog can be different for
6360 insn->imm = subprog->sub_insn_off - (prog->sub_insn_off + insn_idx) - 1;
6362 pr_debug("prog '%s': insn #%zu relocated, imm %d points to subprog '%s' (now at %zu offset)\n",
6363 prog->name, insn_idx, insn->imm, subprog->name, subprog->sub_insn_off);
6373 * main prog) is processed separately. For each subprog (non-entry functions,
6378 * where given subprog was appended. This will further be used to relocate all
6379 * the call instructions jumping into this subprog.
6382 * is into a subprog that hasn't been processed (i.e., subprog->sub_insn_off
6383 * is zero), subprog instructions are appended at the end of main program's
6387 * the *main* prog's instructions (subprog's instructions are always left
6389 * and subprog instructions are always sent only as part of a main prog) and
6394 * desired target subprog.
6398 * subprog->sub_insn_off as zero at all times and won't be appended to current
6453 struct bpf_program *subprog;
6460 subprog = &obj->programs[i];
6461 if (!prog_is_subprog(obj, subprog))
6464 subprog->sub_insn_off = 0;
6549 * case, hence simply skip appending a subprog.
6564 struct bpf_program *subprog = &obj->programs[j];
6566 if (!prog_is_subprog(obj, subprog))
6568 if (strcmp(name, subprog->name) != 0)
6574 if (!subprog->sym_global || subprog->mark_btf_static) {
6576 prog->name, subprog->name);
6582 prog->name, subprog->name);
6705 pr_warn("prog '%s': subprog '%s' arg#%d is expected to be of `struct %s *` type\n",
6772 /* Check if main program or global subprog's function prototype has `arg:ctx`
6821 * of our subprogs; if yes and subprog is global and needs adjustment,
6851 /* current main program doesn't call into this subprog */
6957 * Append subprog relos to main programs to allow data relos to be
6982 struct bpf_program *subprog = &obj->programs[prog->exception_cb_idx];
6989 if (subprog->sub_insn_off == 0) {
6990 err = bpf_object__append_subprog_code(obj, prog, subprog);
6993 err = bpf_object__reloc_code(obj, prog, subprog);