Lines Matching defs:relo
4043 /* Only do relo for section with exec instructions */
4050 pr_info("elf: skipping relo section(%d) %s for section(%d) %s\n",
4624 pr_warn("prog '%s': invalid relo against '%s' for insns[%d].code 0x%x\n",
4640 pr_warn("prog '%s': extern relo failed to find extern for '%s' (%d)\n",
4664 pr_warn("prog '%s': bad call relo against '%s' in section '%s'\n",
4669 pr_warn("prog '%s': bad call relo against '%s' at offset %zu\n",
4680 pr_warn("prog '%s': invalid relo against '%s' in special section 0x%x; forgot to initialize global var?..\n",
4691 pr_warn("prog '%s': bad subprog addr relo against '%s' at offset %zu+%d\n",
4737 pr_warn("prog '%s': bad map relo against '%s' in section '%s'\n",
4753 pr_warn("prog '%s': map relo failed to find map for section '%s', off %zu\n",
4766 pr_warn("prog '%s': bad data relo against section '%s'\n",
4780 pr_warn("prog '%s': data relo failed to find map for section '%s'\n",
4861 pr_warn("sec '%s': failed to get relo #%d\n", relo_sec_name, i);
4868 pr_warn("sec '%s': symbol #%zu not found for relo #%d\n",
4874 pr_warn("sec '%s': corrupted symbol #%zu pointing to invalid section #%zu for relo #%d\n",
4880 pr_warn("sec '%s': invalid offset 0x%zx for relo #%d\n",
4898 pr_debug("sec '%s': relo #%d: insn #%u against '%s'\n",
4903 pr_debug("sec '%s': relo #%d: couldn't find program in section '%s' for insn #%u, probably overridden weak function, skipping...\n",
6006 struct reloc_desc *relos, *relo;
6012 relo = &relos[prog->nr_reloc];
6013 relo->type = RELO_CORE;
6014 relo->insn_idx = insn_idx;
6015 relo->core_relo = core_relo;
6023 struct reloc_desc *relo;
6027 relo = &prog->reloc_desc[i];
6028 if (relo->type != RELO_CORE || relo->insn_idx != insn_idx)
6031 return relo->core_relo;
6038 const struct bpf_core_relo *relo,
6049 __u32 local_id = relo->type_id;
6060 if (relo->kind != BPF_CORE_TYPE_ID_LOCAL &&
6064 pr_warn("prog '%s': relo #%d: target candidate search failed for [%d] %s %s: %ld\n",
6076 return bpf_core_calc_relo_insn(prog_name, relo, relo_idx, local_btf, cands, specs_scratch,
6161 pr_warn("prog '%s': relo #%d: failed to record relocation: %s\n",
6171 pr_warn("prog '%s': relo #%d: failed to relocate: %s\n",
6178 pr_warn("prog '%s': relo #%d: failed to patch insn #%u: %s\n",
6209 pr_debug("prog '%s': relo #%d: poisoning insn #%d that loads map #%d '%s'\n",
6237 pr_debug("prog '%s': relo #%d: poisoning insn #%d that calls kfunc '%s'\n",
6302 static int create_jt_map(struct bpf_object *obj, struct bpf_program *prog, struct reloc_desc *relo)
6305 unsigned int sym_off = relo->sym_off;
6306 int jt_size = relo->sym_size;
6350 if (relo->insn_idx < 0 || relo->insn_idx >= prog->insns_cnt) {
6351 pr_warn("map '.jumptables': invalid instruction index %d\n", relo->insn_idx);
6356 subprog_idx = find_subprog_idx(prog, relo->insn_idx);
6415 struct reloc_desc *relo = &prog->reloc_desc[i];
6416 struct bpf_insn *insn = &prog->insns[relo->insn_idx];
6420 switch (relo->type) {
6422 map = &obj->maps[relo->map_idx];
6425 insn[0].imm = relo->map_idx;
6430 poison_map_ldimm64(prog, i, relo->insn_idx, insn,
6431 relo->map_idx, map);
6435 map = &obj->maps[relo->map_idx];
6436 insn[1].imm = insn[0].imm + relo->sym_off;
6438 if (relo->map_idx == obj->arena_map_idx)
6443 insn[0].imm = relo->map_idx;
6448 poison_map_ldimm64(prog, i, relo->insn_idx, insn,
6449 relo->map_idx, map);
6453 ext = &obj->externs[relo->ext_idx];
6475 ext = &obj->externs[relo->ext_idx];
6481 poison_kfunc_call(prog, i, relo->insn_idx, insn,
6482 relo->ext_idx, ext);
6487 pr_warn("prog '%s': relo #%d: bad insn\n",
6502 map_fd = create_jt_map(obj, prog, relo);
6504 pr_warn("prog '%s': relo #%d: can't create jump table: sym_off %u\n",
6505 prog->name, i, relo->sym_off);
6514 pr_warn("prog '%s': relo #%d: bad relo type %d\n",
6515 prog->name, i, relo->type);
6666 const struct reloc_desc *relo = elem;
6668 if (insn_idx == relo->insn_idx)
6670 return insn_idx < relo->insn_idx ? -1 : 1;
6774 struct reloc_desc *relo;
6787 relo = find_prog_insn_relo(prog, insn_idx);
6788 if (relo && relo->type == RELO_EXTERN_CALL)
6793 if (relo && relo->type != RELO_CALL && relo->type != RELO_SUBPROG_ADDR) {
6794 pr_warn("prog '%s': unexpected relo for insn #%zu, type %d\n",
6795 prog->name, insn_idx, relo->type);
6798 if (relo) {
6806 * for subprog addr relocation, the relo->sym_off + insn->imm is
6809 if (relo->type == RELO_CALL)
6810 sub_insn_idx = relo->sym_off / BPF_INSN_SZ + insn->imm + 1;
6812 sub_insn_idx = (relo->sym_off + insn->imm) / BPF_INSN_SZ;
6815 * RELO_SUBPROG_ADDR relo is always emitted even if both
6818 pr_warn("prog '%s': missing subprog addr relo for insn #%zu\n",
7455 * would increase and most of them will fail to find a relo.
7460 struct reloc_desc *relo = &prog->reloc_desc[j];
7461 struct bpf_insn *insn = &prog->insns[relo->insn_idx];
7464 if (relo->type == RELO_SUBPROG_ADDR)
7572 pr_warn(".maps relo #%d: failed to get ELF relo\n", i);
7578 pr_warn(".maps relo #%d: symbol %zx not found\n",
7584 pr_debug(".maps relo #%d: for %zd value %zd rel->r_offset %zu name %d ('%s')\n",
7599 pr_warn(".maps relo #%d: cannot find map '%s' at rel->r_offset %zu\n",
7609 pr_warn(".maps relo #%d: '%s' isn't a BTF-defined map\n",
7615 pr_warn(".maps relo #%d: hash-of-maps '%s' should have key size %zu.\n",
7621 pr_warn(".maps relo #%d: '%s' isn't a valid map reference\n",
7628 pr_warn(".maps relo #%d: '%s' isn't a valid program reference\n",
7635 pr_warn(".maps relo #%d: '%s' isn't an entry-point program\n",
7675 pr_debug(".maps relo #%d: map '%s' slot [%d] points to %s '%s'\n",
8081 const struct bpf_core_relo *relo;
8089 relo = find_relo_core(prog, insn_idx);
8090 if (!relo)
8093 err = bpf_core_parse_spec(prog->name, prog->obj->btf, relo, &spec);
8228 struct reloc_desc *relo = &prog->reloc_desc[i];
8229 struct extern_desc *ext = &obj->externs[relo->ext_idx];
8232 switch (relo->type) {
8240 true, kind, relo->insn_idx);
8245 relo->insn_idx);
8249 .insn_off = relo->insn_idx * 8,
8250 .type_id = relo->core_relo->type_id,
8251 .access_str_off = relo->core_relo->access_str_off,
8252 .kind = relo->core_relo->kind,