Lines Matching refs:relo
677 struct ksym_relo_desc *relo;
679 relo = libbpf_reallocarray(gen->relos, gen->relo_cnt + 1, sizeof(*relo));
680 if (!relo) {
684 gen->relos = relo;
685 relo += gen->relo_cnt;
686 relo->name = name;
687 relo->is_weak = is_weak;
688 relo->is_typeless = is_typeless;
689 relo->is_ld64 = is_ld64;
690 relo->kind = kind;
691 relo->insn_idx = insn_idx;
696 static struct ksym_desc *get_ksym_desc(struct bpf_gen *gen, struct ksym_relo_desc *relo)
703 if (kdesc->kind == relo->kind && kdesc->is_ld64 == relo->is_ld64 &&
704 !strcmp(kdesc->name, relo->name)) {
716 kdesc->name = relo->name;
717 kdesc->kind = relo->kind;
721 kdesc->is_ld64 = relo->is_ld64;
728 static void emit_bpf_find_by_name_kind(struct bpf_gen *gen, struct ksym_relo_desc *relo)
730 int name_off, len = strlen(relo->name) + 1;
732 name_off = add_data(gen, relo->name, len);
736 emit(gen, BPF_MOV64_IMM(BPF_REG_3, relo->kind));
740 debug_ret(gen, "find_by_name_kind(%s,%d)", relo->name, relo->kind);
747 static void emit_bpf_kallsyms_lookup_name(struct bpf_gen *gen, struct ksym_relo_desc *relo)
749 int name_off, len = strlen(relo->name) + 1, res_off;
751 name_off = add_data(gen, relo->name, len);
763 debug_ret(gen, "kallsyms_lookup_name(%s,%d)", relo->name, relo->kind);
776 static void emit_relo_kfunc_btf(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insn)
781 kdesc = get_ksym_desc(gen, relo);
794 emit_bpf_find_by_name_kind(gen, relo);
795 if (!relo->is_weak)
801 btf_fd_idx, relo->name);
839 relo->name, kdesc->ref);
844 relo->name, kdesc->ref);
847 static void emit_ksym_relo_log(struct bpf_gen *gen, struct ksym_relo_desc *relo,
857 relo->is_typeless, relo->is_weak, relo->name, ref);
860 relo->is_typeless, relo->is_weak, relo->name, ref);
867 struct ksym_relo_desc *relo, int insn)
871 kdesc = get_ksym_desc(gen, relo);
886 emit_bpf_kallsyms_lookup_name(gen, relo);
896 emit_ksym_relo_log(gen, relo, kdesc->ref);
913 static void emit_relo_ksym_btf(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insn)
918 kdesc = get_ksym_desc(gen, relo);
935 emit_bpf_find_by_name_kind(gen, relo);
936 if (!relo->is_weak)
960 emit_ksym_relo_log(gen, relo, kdesc->ref);
979 static void emit_relo(struct bpf_gen *gen, struct ksym_relo_desc *relo, int insns)
984 relo->kind, relo->name, relo->insn_idx, relo->is_ld64 ? "ld64" : "call");
985 insn = insns + sizeof(struct bpf_insn) * relo->insn_idx;
987 if (relo->is_ld64) {
988 if (relo->is_typeless)
989 emit_relo_ksym_typeless(gen, relo, insn);
991 emit_relo_ksym_btf(gen, relo, insn);
993 emit_relo_kfunc_btf(gen, relo, insn);
1046 /* Convert func, line, and core relo info blobs to target endianness */