/* Fabricate BTF with various types and check BTF field iteration finds types, *stringsexpected.
*/ void test_btf_field_iter(void)
{ struct btf *btf = NULL; int id;
btf = btf__new_empty(); if (!ASSERT_OK_PTR(btf, "empty_btf")) return;
for (id = 1; id < btf__type_cnt(btf); id++) { struct btf_type *t = btf_type_by_id(btf, id); struct btf_field_iter it_strs, it_ids; int str_idx = 0, id_idx = 0;
__u32 *next_str, *next_id;
if (!ASSERT_OK_PTR(t, "btf_type_by_id")) break; if (!ASSERT_OK(btf_field_iter_init(&it_strs, t, BTF_FIELD_ITER_STRS), "iter_init_strs")) break; if (!ASSERT_OK(btf_field_iter_init(&it_ids, t, BTF_FIELD_ITER_IDS), "iter_init_ids")) break; while ((next_str = btf_field_iter_next(&it_strs))) { constchar *str = btf__str_by_offset(btf, *next_str);
if (!ASSERT_OK(strcmp(fields[id].strs[str_idx], str), "field_str_match")) break;
str_idx++;
} /* ensure no more strings are expected */
ASSERT_EQ(fields[id].strs[str_idx], NULL, "field_str_cnt");
while ((next_id = btf_field_iter_next(&it_ids))) { if (!ASSERT_EQ(*next_id, fields[id].ids[id_idx], "field_id_match")) break;
id_idx++;
} /* ensure no more ids are expected */
ASSERT_EQ(fields[id].ids[id_idx], 0, "field_id_cnt");
}
btf__free(btf);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.