Lines Matching refs:relo
2903 /* Only do relo for section with exec instructions */
2907 pr_info("elf: skipping relo section(%d) %s for section(%d) %s\n",
3359 pr_warn("prog '%s': bad call relo against '%s' in section '%s'\n",
3364 pr_warn("prog '%s': bad call relo against '%s' at offset %zu\n",
3375 pr_warn("prog '%s': invalid relo against '%s' for insns[%d].code 0x%x\n",
3391 pr_warn("prog '%s': extern relo failed to find extern for '%s' (%d)\n",
3404 pr_warn("prog '%s': invalid relo against '%s' in special section 0x%x; forgot to initialize global var?..\n",
3415 pr_warn("prog '%s': bad map relo against '%s' in section '%s'\n",
3431 pr_warn("prog '%s': map relo failed to find map for section '%s', off %zu\n",
3444 pr_warn("prog '%s': bad data relo against section '%s'\n",
3458 pr_warn("prog '%s': data relo failed to find map for section '%s'\n",
3529 pr_warn("sec '%s': failed to get relo #%d\n", relo_sec_name, i);
3533 pr_warn("sec '%s': symbol 0x%zx not found for relo #%d\n",
3538 pr_warn("sec '%s': invalid offset 0x%zx for relo #%d\n",
3556 pr_debug("sec '%s': relo #%d: insn #%u against '%s'\n",
3561 pr_warn("sec '%s': relo #%d: program not found in section '%s' for insn #%u\n",
4635 pr_warn("relo for [%u] %s (at idx %d) captures type [%d] of unexpected kind %s\n",
5106 const struct bpf_core_relo *relo,
5121 if (relo->kind == BPF_FIELD_EXISTS) {
5134 if (relo->kind == BPF_FIELD_BYTE_OFFSET) {
5142 } else if (relo->kind == BPF_FIELD_BYTE_SIZE) {
5148 pr_warn("prog '%s': relo %d at insn #%d can't be applied to array access\n",
5149 prog->name, relo->kind, relo->insn_off / 8);
5170 pr_warn("prog '%s': relo %d at insn #%d can't be satisfied for bitfield\n",
5171 prog->name, relo->kind, relo->insn_off / 8);
5193 switch (relo->kind) {
5231 static int bpf_core_calc_type_relo(const struct bpf_core_relo *relo,
5243 switch (relo->kind) {
5265 static int bpf_core_calc_enumval_relo(const struct bpf_core_relo *relo,
5272 switch (relo->kind) {
5322 const struct bpf_core_relo *relo,
5338 if (core_relo_is_field_based(relo->kind)) {
5339 err = bpf_core_calc_field_relo(prog, relo, local_spec,
5342 err = err ?: bpf_core_calc_field_relo(prog, relo, targ_spec,
5384 } else if (core_relo_is_type_based(relo->kind)) {
5385 err = bpf_core_calc_type_relo(relo, local_spec, &res->orig_val);
5386 err = err ?: bpf_core_calc_type_relo(relo, targ_spec, &res->new_val);
5387 } else if (core_relo_is_enumval_based(relo->kind)) {
5388 err = bpf_core_calc_enumval_relo(relo, local_spec, &res->orig_val);
5389 err = err ?: bpf_core_calc_enumval_relo(relo, targ_spec, &res->new_val);
5399 pr_warn("prog '%s': relo #%d: unrecognized CO-RE relocation %s (%d) at insn #%d\n",
5400 prog->name, relo_idx, core_relo_kind_str(relo->kind),
5401 relo->kind, relo->insn_off / 8);
5414 pr_debug("prog '%s': relo #%d: substituting insn #%d w/ invalid insn\n",
5424 insn->imm = 195896080; /* => 0xbad2310 => "bad relo" */
5472 const struct bpf_core_relo *relo,
5481 if (relo->insn_off % BPF_INSN_SZ)
5483 insn_idx = relo->insn_off / BPF_INSN_SZ;
5512 pr_warn("prog '%s': relo #%d: unexpected insn #%d (ALU/ALU64) value: got %u, exp %u -> %u\n",
5519 pr_debug("prog '%s': relo #%d: patched insn #%d (ALU/ALU64) imm %u -> %u\n",
5527 pr_warn("prog '%s': relo #%d: unexpected insn #%d (LDX/ST/STX) value: got %u, exp %u -> %u\n",
5532 pr_warn("prog '%s': relo #%d: insn #%d (LDX/ST/STX) value too big: %u\n",
5537 pr_warn("prog '%s': relo #%d: insn #%d (LDX/ST/STX) accesses field incorrectly. "
5545 pr_debug("prog '%s': relo #%d: patched insn #%d (LDX/ST/STX) off %u -> %u\n",
5553 pr_warn("prog '%s': relo #%d: insn #%d (LDX/ST/STX) unexpected mem size: got %d, exp %u\n",
5560 pr_warn("prog '%s': relo #%d: insn #%d (LDX/ST/STX) invalid new mem size: %u\n",
5566 pr_debug("prog '%s': relo #%d: patched insn #%d (LDX/ST/STX) mem_sz %u -> %u\n",
5578 pr_warn("prog '%s': relo #%d: insn #%d (LDIMM64) has unexpected form\n",
5585 pr_warn("prog '%s': relo #%d: unexpected insn #%d (LDIMM64) value: got %llu, exp %u -> %u\n",
5594 pr_debug("prog '%s': relo #%d: patched insn #%d (LDIMM64) imm64 %llu -> %u\n",
5600 pr_warn("prog '%s': relo #%d: trying to relocate unrecognized insn #%d, code:0x%x, src:0x%x, dst:0x%x, off:0x%x, imm:0x%x\n",
5726 const struct bpf_core_relo *relo,
5733 const void *type_key = u32_as_hash_key(relo->type_id);
5742 local_id = relo->type_id;
5751 spec_str = btf__name_by_offset(local_btf, relo->access_str_off);
5755 err = bpf_core_parse_spec(local_btf, local_id, spec_str, relo->kind, &local_spec);
5757 pr_warn("prog '%s': relo #%d: parsing [%d] %s %s + %s failed: %d\n",
5764 pr_debug("prog '%s': relo #%d: kind <%s> (%d), spec is ", prog->name,
5765 relo_idx, core_relo_kind_str(relo->kind), relo->kind);
5769 /* TYPE_ID_LOCAL relo is special and doesn't need candidate search */
5770 if (relo->kind == BPF_TYPE_ID_LOCAL) {
5780 pr_warn("prog '%s': relo #%d: <%s> (%d) relocation doesn't support anonymous types\n",
5781 prog->name, relo_idx, core_relo_kind_str(relo->kind), relo->kind);
5788 pr_warn("prog '%s': relo #%d: target candidate search failed for [%d] %s %s: %ld",
5804 pr_warn("prog '%s': relo #%d: error matching candidate #%d ",
5811 pr_debug("prog '%s': relo #%d: %s candidate #%d ", prog->name,
5819 err = bpf_core_calc_relo(prog, relo, relo_idx, &local_spec, &cand_spec, &cand_res);
5827 /* if there are many field relo candidates, they
5830 pr_warn("prog '%s': relo #%d: field offset ambiguity: %u != %u\n",
5839 pr_warn("prog '%s': relo #%d: relocation decision ambiguity: %s %u != %s %u\n",
5850 * For BPF_FIELD_EXISTS relo or when used BPF program has field
5855 * depending on relo's kind.
5872 pr_debug("prog '%s': relo #%d: no matching targets found\n",
5875 /* calculate single target relo result explicitly */
5876 err = bpf_core_calc_relo(prog, relo, relo_idx, &local_spec, NULL, &targ_res);
5883 err = bpf_core_patch_insn(prog, relo, relo_idx, &targ_res);
5885 pr_warn("prog '%s': relo #%d: failed to patch insn at offset %d: %d\n",
5886 prog->name, relo_idx, relo->insn_off, err);
5978 pr_warn("prog '%s': relo #%d: failed to relocate: %d\n",
6009 struct reloc_desc *relo = &prog->reloc_desc[i];
6010 struct bpf_insn *insn = &prog->insns[relo->insn_idx];
6013 switch (relo->type) {
6016 insn[0].imm = obj->maps[relo->map_idx].fd;
6017 relo->processed = true;
6021 insn[1].imm = insn[0].imm + relo->sym_off;
6022 insn[0].imm = obj->maps[relo->map_idx].fd;
6023 relo->processed = true;
6026 ext = &obj->externs[relo->sym_off];
6040 relo->processed = true;
6046 pr_warn("prog '%s': relo #%d: bad relo type %d\n",
6047 prog->name, i, relo->type);
6199 const struct reloc_desc *relo = elem;
6201 if (insn_idx == relo->insn_idx)
6203 return insn_idx < relo->insn_idx ? -1 : 1;
6219 struct reloc_desc *relo;
6231 relo = find_prog_insn_relo(prog, insn_idx);
6232 if (relo && relo->type != RELO_CALL) {
6233 pr_warn("prog '%s': unexpected relo for insn #%zu, type %d\n",
6234 prog->name, insn_idx, relo->type);
6237 if (relo) {
6245 sub_insn_idx = relo->sym_off / BPF_INSN_SZ + insn->imm + 1;
6308 if (relo)
6309 relo->processed = true;
6513 pr_warn(".maps relo #%d: failed to get ELF relo\n", i);
6517 pr_warn(".maps relo #%d: symbol %zx not found\n",
6523 pr_warn(".maps relo #%d: '%s' isn't a BTF-defined map\n",
6528 pr_debug(".maps relo #%d: for %zd value %zd rel.r_offset %zu name %d ('%s')\n",
6543 pr_warn(".maps relo #%d: cannot find map '%s' at rel.r_offset %zu\n",
6552 pr_warn(".maps relo #%d: hash-of-maps '%s' should have key size %zu.\n",
6593 pr_debug(".maps relo #%d: map '%s' slot [%d] points to map '%s'\n",