selftests/bpf: Update btf_dump case for conflicting names
authorXu Kuohai <xukuohai@huawei.com>
Tue, 1 Mar 2022 05:32:50 +0000 (00:32 -0500)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 1 Mar 2022 12:41:48 +0000 (13:41 +0100)
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
tools/testing/selftests/bpf/prog_tests/btf_dump.c

index 9e26903..5fce700 100644 (file)
@@ -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 x;\n"
+"\n"
+"enum x {\n"
+"      X = 1,\n"
+"};\n"
+"\n"
 "enum {\n"
-"      VAL = 1,\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, "y", 3, 32, 0);
        ASSERT_OK(err, "field_ok");
-       err = btf__add_field(btf, "s", 3, 32, 0);
+       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");