tools/lib/bpf/btf_iter.c

Source file repositories/reference/linux-study-clean/tools/lib/bpf/btf_iter.c

File Facts

System
Linux kernel
Corpus path
tools/lib/bpf/btf_iter.c
Extension
.c
Size
4143 bytes
Lines
178
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

switch (btf_kind(t)) {
		case BTF_KIND_UNKN:
		case BTF_KIND_INT:
		case BTF_KIND_FLOAT:
		case BTF_KIND_ENUM:
		case BTF_KIND_ENUM64:
			it->desc = (struct btf_field_desc) {};
			break;
		case BTF_KIND_FWD:
		case BTF_KIND_CONST:
		case BTF_KIND_VOLATILE:
		case BTF_KIND_RESTRICT:
		case BTF_KIND_PTR:
		case BTF_KIND_TYPEDEF:
		case BTF_KIND_FUNC:
		case BTF_KIND_VAR:
		case BTF_KIND_DECL_TAG:
		case BTF_KIND_TYPE_TAG:
			it->desc = (struct btf_field_desc) { 1, {offsetof(struct btf_type, type)} };
			break;
		case BTF_KIND_ARRAY:
			it->desc = (struct btf_field_desc) {
				2, {sizeof(struct btf_type) + offsetof(struct btf_array, type),
				sizeof(struct btf_type) + offsetof(struct btf_array, index_type)}
			};
			break;
		case BTF_KIND_STRUCT:
		case BTF_KIND_UNION:
			it->desc = (struct btf_field_desc) {
				0, {},
				sizeof(struct btf_member),
				1, {offsetof(struct btf_member, type)}
			};
			break;
		case BTF_KIND_FUNC_PROTO:
			it->desc = (struct btf_field_desc) {
				1, {offsetof(struct btf_type, type)},
				sizeof(struct btf_param),
				1, {offsetof(struct btf_param, type)}
			};
			break;
		case BTF_KIND_DATASEC:
			it->desc = (struct btf_field_desc) {
				0, {},
				sizeof(struct btf_var_secinfo),
				1, {offsetof(struct btf_var_secinfo, type)}
			};
			break;
		default:
			return -EINVAL;
		}
		break;
	case BTF_FIELD_ITER_STRS:
		switch (btf_kind(t)) {
		case BTF_KIND_UNKN:
			it->desc = (struct btf_field_desc) {};
			break;
		case BTF_KIND_INT:
		case BTF_KIND_FLOAT:
		case BTF_KIND_FWD:
		case BTF_KIND_ARRAY:
		case BTF_KIND_CONST:
		case BTF_KIND_VOLATILE:
		case BTF_KIND_RESTRICT:
		case BTF_KIND_PTR:
		case BTF_KIND_TYPEDEF:
		case BTF_KIND_FUNC:
		case BTF_KIND_VAR:
		case BTF_KIND_DECL_TAG:
		case BTF_KIND_TYPE_TAG:
		case BTF_KIND_DATASEC:
			it->desc = (struct btf_field_desc) {
				1, {offsetof(struct btf_type, name_off)}
			};
			break;
		case BTF_KIND_ENUM:
			it->desc = (struct btf_field_desc) {
				1, {offsetof(struct btf_type, name_off)},
				sizeof(struct btf_enum),
				1, {offsetof(struct btf_enum, name_off)}
			};
			break;
		case BTF_KIND_ENUM64:
			it->desc = (struct btf_field_desc) {
				1, {offsetof(struct btf_type, name_off)},
				sizeof(struct btf_enum64),
				1, {offsetof(struct btf_enum64, name_off)}
			};
			break;
		case BTF_KIND_STRUCT:

Annotation

Implementation Notes