Lines Matching refs:spec
265 struct bpf_core_spec *spec) in bpf_core_parse_spec() argument
278 memset(spec, 0, sizeof(*spec)); in bpf_core_parse_spec()
279 spec->btf = btf; in bpf_core_parse_spec()
280 spec->root_type_id = relo->type_id; in bpf_core_parse_spec()
281 spec->relo_kind = relo->kind; in bpf_core_parse_spec()
296 if (spec->raw_len == BPF_CORE_SPEC_MAX_LEN) in bpf_core_parse_spec()
299 spec->raw_spec[spec->raw_len++] = access_idx; in bpf_core_parse_spec()
302 if (spec->raw_len == 0) in bpf_core_parse_spec()
309 access_idx = spec->raw_spec[0]; in bpf_core_parse_spec()
310 acc = &spec->spec[0]; in bpf_core_parse_spec()
313 spec->len++; in bpf_core_parse_spec()
316 if (!btf_is_any_enum(t) || spec->raw_len > 1 || access_idx >= btf_vlen(t)) in bpf_core_parse_spec()
332 spec->bit_offset = access_idx * sz * 8; in bpf_core_parse_spec()
334 for (i = 1; i < spec->raw_len; i++) { in bpf_core_parse_spec()
339 access_idx = spec->raw_spec[i]; in bpf_core_parse_spec()
340 acc = &spec->spec[spec->len]; in bpf_core_parse_spec()
350 spec->bit_offset += bit_offset; in bpf_core_parse_spec()
361 spec->len++; in bpf_core_parse_spec()
377 spec->spec[spec->len].type_id = id; in bpf_core_parse_spec()
378 spec->spec[spec->len].idx = access_idx; in bpf_core_parse_spec()
379 spec->len++; in bpf_core_parse_spec()
384 spec->bit_offset += access_idx * sz * 8; in bpf_core_parse_spec()
485 struct bpf_core_spec *spec, in bpf_core_match_member() argument
513 if (spec->raw_len == BPF_CORE_SPEC_MAX_LEN) in bpf_core_match_member()
517 spec->bit_offset += bit_offset; in bpf_core_match_member()
518 spec->raw_spec[spec->raw_len++] = i; in bpf_core_match_member()
525 spec, next_targ_id); in bpf_core_match_member()
532 targ_acc = &spec->spec[spec->len++]; in bpf_core_match_member()
542 spec->len--; /* pop accessor */ in bpf_core_match_member()
546 spec->bit_offset -= bit_offset; in bpf_core_match_member()
547 spec->raw_len--; in bpf_core_match_member()
583 local_acc = &local_spec->spec[0]; in bpf_core_spec_match()
584 targ_acc = &targ_spec->spec[0]; in bpf_core_spec_match()
680 const struct bpf_core_spec *spec, in bpf_core_calc_field_relo() argument
695 *val = spec ? 1 : 0; in bpf_core_calc_field_relo()
699 if (!spec) in bpf_core_calc_field_relo()
702 acc = &spec->spec[spec->len - 1]; in bpf_core_calc_field_relo()
703 t = btf_type_by_id(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
708 *val = spec->bit_offset / 8; in bpf_core_calc_field_relo()
710 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
716 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
731 mt = skip_mods_and_typedefs(spec->btf, m->type, &field_type_id); in bpf_core_calc_field_relo()
732 bit_off = spec->bit_offset; in bpf_core_calc_field_relo()
751 sz = btf__resolve_size(spec->btf, field_type_id); in bpf_core_calc_field_relo()
755 byte_off = spec->bit_offset / 8; in bpf_core_calc_field_relo()
804 const struct bpf_core_spec *spec, in bpf_core_calc_type_relo() argument
814 if (!spec) { in bpf_core_calc_type_relo()
821 *val = spec->root_type_id; in bpf_core_calc_type_relo()
833 sz = btf__resolve_size(spec->btf, spec->root_type_id); in bpf_core_calc_type_relo()
848 const struct bpf_core_spec *spec, in bpf_core_calc_enumval_relo() argument
855 *val = spec ? 1 : 0; in bpf_core_calc_enumval_relo()
858 if (!spec) in bpf_core_calc_enumval_relo()
860 t = btf_type_by_id(spec->btf, spec->spec[0].type_id); in bpf_core_calc_enumval_relo()
862 *val = btf_enum(t)[spec->spec[0].idx].val; in bpf_core_calc_enumval_relo()
864 *val = btf_enum64_value(btf_enum64(t) + spec->spec[0].idx); in bpf_core_calc_enumval_relo()
1156 int bpf_core_format_spec(char *buf, size_t buf_sz, const struct bpf_core_spec *spec) in bpf_core_format_spec() argument
1174 type_id = spec->root_type_id; in bpf_core_format_spec()
1175 t = btf_type_by_id(spec->btf, type_id); in bpf_core_format_spec()
1176 s = btf__name_by_offset(spec->btf, t->name_off); in bpf_core_format_spec()
1179 core_relo_kind_str(spec->relo_kind), in bpf_core_format_spec()
1182 if (core_relo_is_type_based(spec->relo_kind)) in bpf_core_format_spec()
1185 if (core_relo_is_enumval_based(spec->relo_kind)) { in bpf_core_format_spec()
1186 t = skip_mods_and_typedefs(spec->btf, type_id, NULL); in bpf_core_format_spec()
1191 e = btf_enum(t) + spec->raw_spec[0]; in bpf_core_format_spec()
1192 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_format_spec()
1199 e = btf_enum64(t) + spec->raw_spec[0]; in bpf_core_format_spec()
1200 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_format_spec()
1207 if (core_relo_is_field_based(spec->relo_kind)) { in bpf_core_format_spec()
1208 for (i = 0; i < spec->len; i++) { in bpf_core_format_spec()
1209 if (spec->spec[i].name) in bpf_core_format_spec()
1210 append_buf(".%s", spec->spec[i].name); in bpf_core_format_spec()
1211 else if (i > 0 || spec->spec[i].idx > 0) in bpf_core_format_spec()
1212 append_buf("[%u]", spec->spec[i].idx); in bpf_core_format_spec()
1216 for (i = 0; i < spec->raw_len; i++) in bpf_core_format_spec()
1217 append_buf("%s%d", i == 0 ? "" : ":", spec->raw_spec[i]); in bpf_core_format_spec()
1219 if (spec->bit_offset % 8) in bpf_core_format_spec()
1220 append_buf(" @ offset %u.%u)", spec->bit_offset / 8, spec->bit_offset % 8); in bpf_core_format_spec()
1222 append_buf(" @ offset %u)", spec->bit_offset / 8); in bpf_core_format_spec()