Skip to content

Commit 65044db

Browse files
Xu KuohaiNobody
Xu Kuohai
authored and
Nobody
committed
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 <[email protected]> Acked-by: Song Liu <[email protected]>
1 parent f02e713 commit 65044db

File tree

1 file changed

+41
-13
lines changed

1 file changed

+41
-13
lines changed

tools/testing/selftests/bpf/prog_tests/btf_dump.c

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,38 @@ static void test_btf_dump_incremental(void)
148148

149149
/* First, generate BTF corresponding to the following C code:
150150
*
151-
* enum { VAL = 1 };
151+
* enum x;
152+
*
153+
* enum x { X = 1 };
154+
*
155+
* enum { Y = 1 };
156+
*
157+
* struct s;
152158
*
153159
* struct s { int x; };
154160
*
155161
*/
162+
id = btf__add_enum(btf, "x", 4);
163+
ASSERT_EQ(id, 1, "enum_declaration_id");
164+
id = btf__add_enum(btf, "x", 4);
165+
ASSERT_EQ(id, 2, "named_enum_id");
166+
err = btf__add_enum_value(btf, "X", 1);
167+
ASSERT_OK(err, "named_enum_val_ok");
168+
156169
id = btf__add_enum(btf, NULL, 4);
157-
ASSERT_EQ(id, 1, "enum_id");
158-
err = btf__add_enum_value(btf, "VAL", 1);
159-
ASSERT_OK(err, "enum_val_ok");
170+
ASSERT_EQ(id, 3, "anon_enum_id");
171+
err = btf__add_enum_value(btf, "Y", 1);
172+
ASSERT_OK(err, "anon_enum_val_ok");
160173

161174
id = btf__add_int(btf, "int", 4, BTF_INT_SIGNED);
162-
ASSERT_EQ(id, 2, "int_id");
175+
ASSERT_EQ(id, 4, "int_id");
176+
177+
id = btf__add_fwd(btf, "s", BTF_FWD_STRUCT);
178+
ASSERT_EQ(id, 5, "fwd_id");
163179

164180
id = btf__add_struct(btf, "s", 4);
165-
ASSERT_EQ(id, 3, "struct_id");
166-
err = btf__add_field(btf, "x", 2, 0, 0);
181+
ASSERT_EQ(id, 6, "struct_id");
182+
err = btf__add_field(btf, "x", 4, 0, 0);
167183
ASSERT_OK(err, "field_ok");
168184

169185
for (i = 1; i < btf__type_cnt(btf); i++) {
@@ -173,11 +189,20 @@ static void test_btf_dump_incremental(void)
173189

174190
fflush(dump_buf_file);
175191
dump_buf[dump_buf_sz] = 0; /* some libc implementations don't do this */
192+
176193
ASSERT_STREQ(dump_buf,
194+
"enum x;\n"
195+
"\n"
196+
"enum x {\n"
197+
" X = 1,\n"
198+
"};\n"
199+
"\n"
177200
"enum {\n"
178-
" VAL = 1,\n"
201+
" Y = 1,\n"
179202
"};\n"
180203
"\n"
204+
"struct s;\n"
205+
"\n"
181206
"struct s {\n"
182207
" int x;\n"
183208
"};\n\n", "c_dump1");
@@ -199,10 +224,12 @@ static void test_btf_dump_incremental(void)
199224
fseek(dump_buf_file, 0, SEEK_SET);
200225

201226
id = btf__add_struct(btf, "s", 4);
202-
ASSERT_EQ(id, 4, "struct_id");
203-
err = btf__add_field(btf, "x", 1, 0, 0);
227+
ASSERT_EQ(id, 5, "struct_id");
228+
err = btf__add_field(btf, "x", 2, 0, 0);
229+
ASSERT_OK(err, "field_ok");
230+
err = btf__add_field(btf, "y", 3, 32, 0);
204231
ASSERT_OK(err, "field_ok");
205-
err = btf__add_field(btf, "s", 3, 32, 0);
232+
err = btf__add_field(btf, "s", 6, 64, 0);
206233
ASSERT_OK(err, "field_ok");
207234

208235
for (i = 1; i < btf__type_cnt(btf); i++) {
@@ -214,9 +241,10 @@ static void test_btf_dump_incremental(void)
214241
dump_buf[dump_buf_sz] = 0; /* some libc implementations don't do this */
215242
ASSERT_STREQ(dump_buf,
216243
"struct s___2 {\n"
244+
" enum x x;\n"
217245
" enum {\n"
218-
" VAL___2 = 1,\n"
219-
" } x;\n"
246+
" Y___2 = 1,\n"
247+
" } y;\n"
220248
" struct s s;\n"
221249
"};\n\n" , "c_dump1");
222250

0 commit comments

Comments
 (0)