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()
713 t = skip_mods_and_typedefs(spec->btf, acc->type_id, &elem_id); in bpf_core_calc_field_relo()
715 t = skip_mods_and_typedefs(spec->btf, btf_array(t)->type, &elem_id); in bpf_core_calc_field_relo()
716 sz = btf__resolve_size(spec->btf, elem_id); in bpf_core_calc_field_relo()
722 sz = btf__resolve_size(spec->btf, acc->type_id); in bpf_core_calc_field_relo()
737 mt = skip_mods_and_typedefs(spec->btf, m->type, &field_type_id); in bpf_core_calc_field_relo()
738 bit_off = spec->bit_offset; in bpf_core_calc_field_relo()
757 sz = btf__resolve_size(spec->btf, field_type_id); in bpf_core_calc_field_relo()
761 byte_off = spec->bit_offset / 8; in bpf_core_calc_field_relo()
780 t = skip_mods_and_typedefs(spec->btf, field_type_id, &elem_id); in bpf_core_calc_field_relo()
782 t = skip_mods_and_typedefs(spec->btf, btf_array(t)->type, &elem_id); in bpf_core_calc_field_relo()
783 sz = btf__resolve_size(spec->btf, elem_id); in bpf_core_calc_field_relo()
820 const struct bpf_core_spec *spec, in bpf_core_calc_type_relo() argument
830 if (!spec) { in bpf_core_calc_type_relo()
837 *val = spec->root_type_id; in bpf_core_calc_type_relo()
849 sz = btf__resolve_size(spec->btf, spec->root_type_id); in bpf_core_calc_type_relo()
864 const struct bpf_core_spec *spec, in bpf_core_calc_enumval_relo() argument
871 *val = spec ? 1 : 0; in bpf_core_calc_enumval_relo()
874 if (!spec) in bpf_core_calc_enumval_relo()
876 t = btf_type_by_id(spec->btf, spec->spec[0].type_id); in bpf_core_calc_enumval_relo()
878 *val = btf_enum(t)[spec->spec[0].idx].val; in bpf_core_calc_enumval_relo()
880 *val = btf_enum64_value(btf_enum64(t) + spec->spec[0].idx); in bpf_core_calc_enumval_relo()
1172 int bpf_core_format_spec(char *buf, size_t buf_sz, const struct bpf_core_spec *spec) in bpf_core_format_spec() argument
1190 type_id = spec->root_type_id; in bpf_core_format_spec()
1191 t = btf_type_by_id(spec->btf, type_id); in bpf_core_format_spec()
1192 s = btf__name_by_offset(spec->btf, t->name_off); in bpf_core_format_spec()
1195 core_relo_kind_str(spec->relo_kind), in bpf_core_format_spec()
1198 if (core_relo_is_type_based(spec->relo_kind)) in bpf_core_format_spec()
1201 if (core_relo_is_enumval_based(spec->relo_kind)) { in bpf_core_format_spec()
1202 t = skip_mods_and_typedefs(spec->btf, type_id, NULL); in bpf_core_format_spec()
1207 e = btf_enum(t) + spec->raw_spec[0]; in bpf_core_format_spec()
1208 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_format_spec()
1215 e = btf_enum64(t) + spec->raw_spec[0]; in bpf_core_format_spec()
1216 s = btf__name_by_offset(spec->btf, e->name_off); in bpf_core_format_spec()
1223 if (core_relo_is_field_based(spec->relo_kind)) { in bpf_core_format_spec()
1224 for (i = 0; i < spec->len; i++) { in bpf_core_format_spec()
1225 if (spec->spec[i].name) in bpf_core_format_spec()
1226 append_buf(".%s", spec->spec[i].name); in bpf_core_format_spec()
1227 else if (i > 0 || spec->spec[i].idx > 0) in bpf_core_format_spec()
1228 append_buf("[%u]", spec->spec[i].idx); in bpf_core_format_spec()
1232 for (i = 0; i < spec->raw_len; i++) in bpf_core_format_spec()
1233 append_buf("%s%d", i == 0 ? "" : ":", spec->raw_spec[i]); in bpf_core_format_spec()
1235 if (spec->bit_offset % 8) in bpf_core_format_spec()
1236 append_buf(" @ offset %u.%u)", spec->bit_offset / 8, spec->bit_offset % 8); in bpf_core_format_spec()
1238 append_buf(" @ offset %u)", spec->bit_offset / 8); in bpf_core_format_spec()