mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 06:24:53 +08:00
selftests/bpf: Update btf_dump case for conflicting names
Update btf_dump case for conflicting names caused by forward declaration. Signed-off-by: Xu Kuohai <xukuohai@huawei.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Acked-by: Song Liu <songliubraving@fb.com> Link: https://lore.kernel.org/bpf/20220301053250.1464204-3-xukuohai@huawei.com
This commit is contained in:
parent
4226961b00
commit
bd004cad78
@ -148,22 +148,38 @@ static void test_btf_dump_incremental(void)
|
||||
|
||||
/* First, generate BTF corresponding to the following C code:
|
||||
*
|
||||
* enum { VAL = 1 };
|
||||
* enum x;
|
||||
*
|
||||
* enum x { X = 1 };
|
||||
*
|
||||
* enum { Y = 1 };
|
||||
*
|
||||
* struct s;
|
||||
*
|
||||
* struct s { int x; };
|
||||
*
|
||||
*/
|
||||
id = btf__add_enum(btf, "x", 4);
|
||||
ASSERT_EQ(id, 1, "enum_declaration_id");
|
||||
id = btf__add_enum(btf, "x", 4);
|
||||
ASSERT_EQ(id, 2, "named_enum_id");
|
||||
err = btf__add_enum_value(btf, "X", 1);
|
||||
ASSERT_OK(err, "named_enum_val_ok");
|
||||
|
||||
id = btf__add_enum(btf, NULL, 4);
|
||||
ASSERT_EQ(id, 1, "enum_id");
|
||||
err = btf__add_enum_value(btf, "VAL", 1);
|
||||
ASSERT_OK(err, "enum_val_ok");
|
||||
ASSERT_EQ(id, 3, "anon_enum_id");
|
||||
err = btf__add_enum_value(btf, "Y", 1);
|
||||
ASSERT_OK(err, "anon_enum_val_ok");
|
||||
|
||||
id = btf__add_int(btf, "int", 4, BTF_INT_SIGNED);
|
||||
ASSERT_EQ(id, 2, "int_id");
|
||||
ASSERT_EQ(id, 4, "int_id");
|
||||
|
||||
id = btf__add_fwd(btf, "s", BTF_FWD_STRUCT);
|
||||
ASSERT_EQ(id, 5, "fwd_id");
|
||||
|
||||
id = btf__add_struct(btf, "s", 4);
|
||||
ASSERT_EQ(id, 3, "struct_id");
|
||||
err = btf__add_field(btf, "x", 2, 0, 0);
|
||||
ASSERT_EQ(id, 6, "struct_id");
|
||||
err = btf__add_field(btf, "x", 4, 0, 0);
|
||||
ASSERT_OK(err, "field_ok");
|
||||
|
||||
for (i = 1; i < btf__type_cnt(btf); i++) {
|
||||
@ -173,11 +189,20 @@ static void test_btf_dump_incremental(void)
|
||||
|
||||
fflush(dump_buf_file);
|
||||
dump_buf[dump_buf_sz] = 0; /* some libc implementations don't do this */
|
||||
|
||||
ASSERT_STREQ(dump_buf,
|
||||
"enum {\n"
|
||||
" VAL = 1,\n"
|
||||
"enum x;\n"
|
||||
"\n"
|
||||
"enum x {\n"
|
||||
" X = 1,\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"enum {\n"
|
||||
" Y = 1,\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"struct s;\n"
|
||||
"\n"
|
||||
"struct s {\n"
|
||||
" int x;\n"
|
||||
"};\n\n", "c_dump1");
|
||||
@ -199,10 +224,12 @@ static void test_btf_dump_incremental(void)
|
||||
fseek(dump_buf_file, 0, SEEK_SET);
|
||||
|
||||
id = btf__add_struct(btf, "s", 4);
|
||||
ASSERT_EQ(id, 4, "struct_id");
|
||||
err = btf__add_field(btf, "x", 1, 0, 0);
|
||||
ASSERT_EQ(id, 7, "struct_id");
|
||||
err = btf__add_field(btf, "x", 2, 0, 0);
|
||||
ASSERT_OK(err, "field_ok");
|
||||
err = btf__add_field(btf, "s", 3, 32, 0);
|
||||
err = btf__add_field(btf, "y", 3, 32, 0);
|
||||
ASSERT_OK(err, "field_ok");
|
||||
err = btf__add_field(btf, "s", 6, 64, 0);
|
||||
ASSERT_OK(err, "field_ok");
|
||||
|
||||
for (i = 1; i < btf__type_cnt(btf); i++) {
|
||||
@ -214,9 +241,10 @@ static void test_btf_dump_incremental(void)
|
||||
dump_buf[dump_buf_sz] = 0; /* some libc implementations don't do this */
|
||||
ASSERT_STREQ(dump_buf,
|
||||
"struct s___2 {\n"
|
||||
" enum x x;\n"
|
||||
" enum {\n"
|
||||
" VAL___2 = 1,\n"
|
||||
" } x;\n"
|
||||
" Y___2 = 1,\n"
|
||||
" } y;\n"
|
||||
" struct s s;\n"
|
||||
"};\n\n" , "c_dump1");
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user