@@ -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