@@ -148,22 +148,38 @@ static void test_btf_dump_incremental(void)
148
148
149
149
/* First, generate BTF corresponding to the following C code:
150
150
*
151
- * enum { VAL = 1 };
151
+ * enum x;
152
+ *
153
+ * enum x { X = 1 };
154
+ *
155
+ * enum { Y = 1 };
156
+ *
157
+ * struct s;
152
158
*
153
159
* struct s { int x; };
154
160
*
155
161
*/
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
+
156
169
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 " );
160
173
161
174
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" );
163
179
164
180
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 );
167
183
ASSERT_OK (err , "field_ok" );
168
184
169
185
for (i = 1 ; i < btf__type_cnt (btf ); i ++ ) {
@@ -173,11 +189,20 @@ static void test_btf_dump_incremental(void)
173
189
174
190
fflush (dump_buf_file );
175
191
dump_buf [dump_buf_sz ] = 0 ; /* some libc implementations don't do this */
192
+
176
193
ASSERT_STREQ (dump_buf ,
194
+ "enum x;\n"
195
+ "\n"
196
+ "enum x {\n"
197
+ " X = 1,\n"
198
+ "};\n"
199
+ "\n"
177
200
"enum {\n"
178
- " VAL = 1,\n"
201
+ " Y = 1,\n"
179
202
"};\n"
180
203
"\n"
204
+ "struct s;\n"
205
+ "\n"
181
206
"struct s {\n"
182
207
" int x;\n"
183
208
"};\n\n" , "c_dump1" );
@@ -199,10 +224,12 @@ static void test_btf_dump_incremental(void)
199
224
fseek (dump_buf_file , 0 , SEEK_SET );
200
225
201
226
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 );
204
231
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 );
206
233
ASSERT_OK (err , "field_ok" );
207
234
208
235
for (i = 1 ; i < btf__type_cnt (btf ); i ++ ) {
@@ -214,9 +241,10 @@ static void test_btf_dump_incremental(void)
214
241
dump_buf [dump_buf_sz ] = 0 ; /* some libc implementations don't do this */
215
242
ASSERT_STREQ (dump_buf ,
216
243
"struct s___2 {\n"
244
+ " enum x x;\n"
217
245
" enum {\n"
218
- " VAL___2 = 1,\n"
219
- " } x ;\n"
246
+ " Y___2 = 1,\n"
247
+ " } y ;\n"
220
248
" struct s s;\n"
221
249
"};\n\n" , "c_dump1" );
222
250
0 commit comments