Lines Matching refs:relo

599 	struct ksym_relo_desc *relo;  in bpf_gen__record_extern()  local
601 relo = libbpf_reallocarray(gen->relos, gen->relo_cnt + 1, sizeof(*relo)); in bpf_gen__record_extern()
602 if (!relo) { in bpf_gen__record_extern()
606 gen->relos = relo; in bpf_gen__record_extern()
607 relo += gen->relo_cnt; in bpf_gen__record_extern()
608 relo->name = name; in bpf_gen__record_extern()
609 relo->is_weak = is_weak; in bpf_gen__record_extern()
610 relo->is_typeless = is_typeless; in bpf_gen__record_extern()
611 relo->is_ld64 = is_ld64; in bpf_gen__record_extern()
612 relo->kind = kind; in bpf_gen__record_extern()
613 relo->insn_idx = insn_idx; in bpf_gen__record_extern()
618 static struct ksym_desc *get_ksym_desc(struct bpf_gen *gen, struct ksym_relo_desc *relo) in get_ksym_desc() argument
625 if (kdesc->kind == relo->kind && kdesc->is_ld64 == relo->is_ld64 && in get_ksym_desc()
626 !strcmp(kdesc->name, relo->name)) { in get_ksym_desc()
638 kdesc->name = relo->name; in get_ksym_desc()
639 kdesc->kind = relo->kind; in get_ksym_desc()
643 kdesc->is_ld64 = relo->is_ld64; in get_ksym_desc()
650 static void emit_bpf_find_by_name_kind(struct bpf_gen *gen, struct ksym_relo_desc *relo) in emit_bpf_find_by_name_kind() argument
652 int name_off, len = strlen(relo->name) + 1; in emit_bpf_find_by_name_kind()
654 name_off = add_data(gen, relo->name, len); in emit_bpf_find_by_name_kind()
658 emit(gen, BPF_MOV64_IMM(BPF_REG_3, relo->kind)); in emit_bpf_find_by_name_kind()
662 debug_ret(gen, "find_by_name_kind(%s,%d)", relo->name, relo->kind); in emit_bpf_find_by_name_kind()
669 static void emit_bpf_kallsyms_lookup_name(struct bpf_gen *gen, struct ksym_relo_desc *relo) in emit_bpf_kallsyms_lookup_name() argument
671 int name_off, len = strlen(relo->name) + 1, res_off; in emit_bpf_kallsyms_lookup_name()
673 name_off = add_data(gen, relo->name, len); in emit_bpf_kallsyms_lookup_name()
685 debug_ret(gen, "kallsyms_lookup_name(%s,%d)", relo->name, relo->kind); in emit_bpf_kallsyms_lookup_name()
698 static void emit_relo_kfunc_btf(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insn) in emit_relo_kfunc_btf() argument
703 kdesc = get_ksym_desc(gen, relo); in emit_relo_kfunc_btf()
716 emit_bpf_find_by_name_kind(gen, relo); in emit_relo_kfunc_btf()
717 if (!relo->is_weak) in emit_relo_kfunc_btf()
723 btf_fd_idx, relo->name); in emit_relo_kfunc_btf()
761 relo->name, kdesc->ref); in emit_relo_kfunc_btf()
766 relo->name, kdesc->ref); in emit_relo_kfunc_btf()
769 static void emit_ksym_relo_log(struct bpf_gen *gen, struct ksym_relo_desc *relo, in emit_ksym_relo_log() argument
779 relo->is_typeless, relo->is_weak, relo->name, ref); in emit_ksym_relo_log()
782 relo->is_typeless, relo->is_weak, relo->name, ref); in emit_ksym_relo_log()
789 struct ksym_relo_desc *relo, int insn) in emit_relo_ksym_typeless() argument
793 kdesc = get_ksym_desc(gen, relo); in emit_relo_ksym_typeless()
808 emit_bpf_kallsyms_lookup_name(gen, relo); in emit_relo_ksym_typeless()
818 emit_ksym_relo_log(gen, relo, kdesc->ref); in emit_relo_ksym_typeless()
835 static void emit_relo_ksym_btf(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insn) in emit_relo_ksym_btf() argument
840 kdesc = get_ksym_desc(gen, relo); in emit_relo_ksym_btf()
857 emit_bpf_find_by_name_kind(gen, relo); in emit_relo_ksym_btf()
858 if (!relo->is_weak) in emit_relo_ksym_btf()
882 emit_ksym_relo_log(gen, relo, kdesc->ref); in emit_relo_ksym_btf()
901 static void emit_relo(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insns) in emit_relo() argument
906 relo->kind, relo->name, relo->insn_idx, relo->is_ld64 ? "ld64" : "call"); in emit_relo()
907 insn = insns + sizeof(struct bpf_insn) * relo->insn_idx; in emit_relo()
909 if (relo->is_ld64) { in emit_relo()
910 if (relo->is_typeless) in emit_relo()
911 emit_relo_ksym_typeless(gen, relo, insn); in emit_relo()
913 emit_relo_ksym_btf(gen, relo, insn); in emit_relo()
915 emit_relo_kfunc_btf(gen, relo, insn); in emit_relo()