t = btf__type_by_id(btf3, 1); if (!ASSERT_OK_PTR(t, "split_base_type")) goto cleanup;
ASSERT_EQ(btf_is_int(t), true, "split_base_int");
ASSERT_STREQ(btf__str_by_offset(btf3, t->name_off), "int", "split_base_type_name");
/* BTF-to-C dump of split BTF */
dump_buf_file = open_memstream(&dump_buf, &dump_buf_sz); if (!ASSERT_OK_PTR(dump_buf_file, "dump_memstream")) return;
d = btf_dump__new(btf3, btf_dump_printf, dump_buf_file, NULL); if (!ASSERT_OK_PTR(d, "btf_dump__new")) goto cleanup; for (i = 1; i < btf__type_cnt(btf3); i++) {
err = btf_dump__dump_type(d, i);
ASSERT_OK(err, "dump_type_ok");
}
fflush(dump_buf_file);
dump_buf[dump_buf_sz] = 0; /* some libc implementations don't do this */
ASSERT_STREQ(dump_buf, "struct s1 {\n" " int f1;\n" "};\n\n" "struct s2 {\n" " struct s1 f1;\n" " int f2;\n" " int *f3;\n" "};\n\n" "union u1 {\n" " struct s2 f1;\n" " int uf2;\n" "};\n\n", "c_dump");
cleanup: if (dump_buf_file)
fclose(dump_buf_file);
free(dump_buf);
btf_dump__free(d);
btf__free(btf1);
btf__free(btf2); if (btf2 != btf3)
btf__free(btf3);
}
void test_btf_split(void)
{ if (test__start_subtest("single_split"))
__test_btf_split(false); if (test__start_subtest("multi_split"))
__test_btf_split(true);
}
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.