Several int128 raw type tests are added to test_btf.
Currently these tests are enabled only for x64 and arm64
for which kernel has CONFIG_ARCH_SUPPORTS_INT128 set.

  $ test_btf
  ......
  BTF raw test[106] (128-bit int): OK
  BTF raw test[107] (struct, 128-bit int member): OK
  BTF raw test[108] (struct, 120-bit int member bitfield): OK
  BTF raw test[109] (struct, kind_flag, 128-bit int member): OK
  BTF raw test[110] (struct, kind_flag, 120-bit int member bitfield): OK
  ......

Acked-by: Martin KaFai Lau <ka...@fb.com>
Signed-off-by: Yonghong Song <y...@fb.com>
---
 tools/testing/selftests/bpf/test_btf.c | 93 ++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/tools/testing/selftests/bpf/test_btf.c 
b/tools/testing/selftests/bpf/test_btf.c
index a0bd04befe87..69f505806f89 100644
--- a/tools/testing/selftests/bpf/test_btf.c
+++ b/tools/testing/selftests/bpf/test_btf.c
@@ -2707,6 +2707,99 @@ static struct btf_raw_test raw_tests[] = {
        .err_str = "Invalid member offset",
 },
 
+{
+       .descr = "128-bit int",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),                  
/* [1] */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16),                
/* [2] */
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "int_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct, 128-bit int member",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),                  
/* [1] */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16),                
/* [2] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 16),       
/* [3] */
+               BTF_MEMBER_ENC(NAME_TBD, 2, 0),
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct, 120-bit int member bitfield",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),                  
/* [1] */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 120, 16),                
/* [2] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 16),       
/* [3] */
+               BTF_MEMBER_ENC(NAME_TBD, 2, 0),
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct, kind_flag, 128-bit int member",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),                  
/* [1] */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16),                
/* [2] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 1), 16),       
/* [3] */
+               BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 0)),
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
+{
+       .descr = "struct, kind_flag, 120-bit int member bitfield",
+       .raw_types = {
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),                  
/* [1] */
+               BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16),                
/* [2] */
+               BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 1), 16),       
/* [3] */
+               BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(120, 0)),
+               BTF_END_RAW,
+       },
+       BTF_STR_SEC("\0A"),
+       .map_type = BPF_MAP_TYPE_ARRAY,
+       .map_name = "struct_type_check_btf",
+       .key_size = sizeof(int),
+       .value_size = sizeof(int),
+       .key_type_id = 1,
+       .value_type_id = 1,
+       .max_entries = 4,
+},
+
 }; /* struct btf_raw_test raw_tests[] */
 
 static const char *get_next_str(const char *start, const char *end)
-- 
2.17.1

Reply via email to