diff options
Diffstat (limited to 'tools/testing/selftests/bpf/test_btf.c')
| -rw-r--r-- | tools/testing/selftests/bpf/test_btf.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/tools/testing/selftests/bpf/test_btf.c b/tools/testing/selftests/bpf/test_btf.c index 8bcd38010582..91420fa83b08 100644 --- a/tools/testing/selftests/bpf/test_btf.c +++ b/tools/testing/selftests/bpf/test_btf.c | |||
| @@ -1881,13 +1881,12 @@ static struct btf_raw_test raw_tests[] = { | |||
| 1881 | }, | 1881 | }, |
| 1882 | 1882 | ||
| 1883 | { | 1883 | { |
| 1884 | .descr = "func proto (CONST=>TYPEDEF=>FUNC_PROTO)", | 1884 | .descr = "func proto (TYPEDEF=>FUNC_PROTO)", |
| 1885 | .raw_types = { | 1885 | .raw_types = { |
| 1886 | BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */ | 1886 | BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */ |
| 1887 | BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */ | 1887 | BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */ |
| 1888 | BTF_CONST_ENC(4), /* [3] */ | 1888 | BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */ |
| 1889 | BTF_TYPEDEF_ENC(NAME_TBD, 5), /* [4] */ | 1889 | BTF_FUNC_PROTO_ENC(0, 2), /* [4] */ |
| 1890 | BTF_FUNC_PROTO_ENC(0, 2), /* [5] */ | ||
| 1891 | BTF_FUNC_PROTO_ARG_ENC(0, 1), | 1890 | BTF_FUNC_PROTO_ARG_ENC(0, 1), |
| 1892 | BTF_FUNC_PROTO_ARG_ENC(0, 2), | 1891 | BTF_FUNC_PROTO_ARG_ENC(0, 2), |
| 1893 | BTF_END_RAW, | 1892 | BTF_END_RAW, |
| @@ -1901,8 +1900,6 @@ static struct btf_raw_test raw_tests[] = { | |||
| 1901 | .key_type_id = 1, | 1900 | .key_type_id = 1, |
| 1902 | .value_type_id = 1, | 1901 | .value_type_id = 1, |
| 1903 | .max_entries = 4, | 1902 | .max_entries = 4, |
| 1904 | .btf_load_err = true, | ||
| 1905 | .err_str = "Invalid type_id", | ||
| 1906 | }, | 1903 | }, |
| 1907 | 1904 | ||
| 1908 | { | 1905 | { |
| @@ -3526,6 +3523,8 @@ struct pprint_mapv { | |||
| 3526 | ENUM_TWO, | 3523 | ENUM_TWO, |
| 3527 | ENUM_THREE, | 3524 | ENUM_THREE, |
| 3528 | } aenum; | 3525 | } aenum; |
| 3526 | uint32_t ui32b; | ||
| 3527 | uint32_t bits2c:2; | ||
| 3529 | }; | 3528 | }; |
| 3530 | 3529 | ||
| 3531 | static struct btf_raw_test pprint_test_template[] = { | 3530 | static struct btf_raw_test pprint_test_template[] = { |
| @@ -3568,7 +3567,7 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3568 | BTF_ENUM_ENC(NAME_TBD, 2), | 3567 | BTF_ENUM_ENC(NAME_TBD, 2), |
| 3569 | BTF_ENUM_ENC(NAME_TBD, 3), | 3568 | BTF_ENUM_ENC(NAME_TBD, 3), |
| 3570 | /* struct pprint_mapv */ /* [16] */ | 3569 | /* struct pprint_mapv */ /* [16] */ |
| 3571 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 8), 32), | 3570 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 10), 40), |
| 3572 | BTF_MEMBER_ENC(NAME_TBD, 11, 0), /* uint32_t ui32 */ | 3571 | BTF_MEMBER_ENC(NAME_TBD, 11, 0), /* uint32_t ui32 */ |
| 3573 | BTF_MEMBER_ENC(NAME_TBD, 10, 32), /* uint16_t ui16 */ | 3572 | BTF_MEMBER_ENC(NAME_TBD, 10, 32), /* uint16_t ui16 */ |
| 3574 | BTF_MEMBER_ENC(NAME_TBD, 12, 64), /* int32_t si32 */ | 3573 | BTF_MEMBER_ENC(NAME_TBD, 12, 64), /* int32_t si32 */ |
| @@ -3577,9 +3576,11 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3577 | BTF_MEMBER_ENC(NAME_TBD, 6, 126), /* unused_bits2b */ | 3576 | BTF_MEMBER_ENC(NAME_TBD, 6, 126), /* unused_bits2b */ |
| 3578 | BTF_MEMBER_ENC(0, 14, 128), /* union (anon) */ | 3577 | BTF_MEMBER_ENC(0, 14, 128), /* union (anon) */ |
| 3579 | BTF_MEMBER_ENC(NAME_TBD, 15, 192), /* aenum */ | 3578 | BTF_MEMBER_ENC(NAME_TBD, 15, 192), /* aenum */ |
| 3579 | BTF_MEMBER_ENC(NAME_TBD, 11, 224), /* uint32_t ui32b */ | ||
| 3580 | BTF_MEMBER_ENC(NAME_TBD, 6, 256), /* bits2c */ | ||
| 3580 | BTF_END_RAW, | 3581 | BTF_END_RAW, |
| 3581 | }, | 3582 | }, |
| 3582 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum"), | 3583 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum\0ui32b\0bits2c"), |
| 3583 | .key_size = sizeof(unsigned int), | 3584 | .key_size = sizeof(unsigned int), |
| 3584 | .value_size = sizeof(struct pprint_mapv), | 3585 | .value_size = sizeof(struct pprint_mapv), |
| 3585 | .key_type_id = 3, /* unsigned int */ | 3586 | .key_type_id = 3, /* unsigned int */ |
| @@ -3628,7 +3629,7 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3628 | BTF_ENUM_ENC(NAME_TBD, 2), | 3629 | BTF_ENUM_ENC(NAME_TBD, 2), |
| 3629 | BTF_ENUM_ENC(NAME_TBD, 3), | 3630 | BTF_ENUM_ENC(NAME_TBD, 3), |
| 3630 | /* struct pprint_mapv */ /* [16] */ | 3631 | /* struct pprint_mapv */ /* [16] */ |
| 3631 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 8), 32), | 3632 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 10), 40), |
| 3632 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 0)), /* uint32_t ui32 */ | 3633 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 0)), /* uint32_t ui32 */ |
| 3633 | BTF_MEMBER_ENC(NAME_TBD, 10, BTF_MEMBER_OFFSET(0, 32)), /* uint16_t ui16 */ | 3634 | BTF_MEMBER_ENC(NAME_TBD, 10, BTF_MEMBER_OFFSET(0, 32)), /* uint16_t ui16 */ |
| 3634 | BTF_MEMBER_ENC(NAME_TBD, 12, BTF_MEMBER_OFFSET(0, 64)), /* int32_t si32 */ | 3635 | BTF_MEMBER_ENC(NAME_TBD, 12, BTF_MEMBER_OFFSET(0, 64)), /* int32_t si32 */ |
| @@ -3637,9 +3638,11 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3637 | BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 126)), /* unused_bits2b */ | 3638 | BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 126)), /* unused_bits2b */ |
| 3638 | BTF_MEMBER_ENC(0, 14, BTF_MEMBER_OFFSET(0, 128)), /* union (anon) */ | 3639 | BTF_MEMBER_ENC(0, 14, BTF_MEMBER_OFFSET(0, 128)), /* union (anon) */ |
| 3639 | BTF_MEMBER_ENC(NAME_TBD, 15, BTF_MEMBER_OFFSET(0, 192)), /* aenum */ | 3640 | BTF_MEMBER_ENC(NAME_TBD, 15, BTF_MEMBER_OFFSET(0, 192)), /* aenum */ |
| 3641 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 224)), /* uint32_t ui32b */ | ||
| 3642 | BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 256)), /* bits2c */ | ||
| 3640 | BTF_END_RAW, | 3643 | BTF_END_RAW, |
| 3641 | }, | 3644 | }, |
| 3642 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum"), | 3645 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum\0ui32b\0bits2c"), |
| 3643 | .key_size = sizeof(unsigned int), | 3646 | .key_size = sizeof(unsigned int), |
| 3644 | .value_size = sizeof(struct pprint_mapv), | 3647 | .value_size = sizeof(struct pprint_mapv), |
| 3645 | .key_type_id = 3, /* unsigned int */ | 3648 | .key_type_id = 3, /* unsigned int */ |
| @@ -3690,7 +3693,7 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3690 | BTF_ENUM_ENC(NAME_TBD, 2), | 3693 | BTF_ENUM_ENC(NAME_TBD, 2), |
| 3691 | BTF_ENUM_ENC(NAME_TBD, 3), | 3694 | BTF_ENUM_ENC(NAME_TBD, 3), |
| 3692 | /* struct pprint_mapv */ /* [16] */ | 3695 | /* struct pprint_mapv */ /* [16] */ |
| 3693 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 8), 32), | 3696 | BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 10), 40), |
| 3694 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 0)), /* uint32_t ui32 */ | 3697 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 0)), /* uint32_t ui32 */ |
| 3695 | BTF_MEMBER_ENC(NAME_TBD, 10, BTF_MEMBER_OFFSET(0, 32)), /* uint16_t ui16 */ | 3698 | BTF_MEMBER_ENC(NAME_TBD, 10, BTF_MEMBER_OFFSET(0, 32)), /* uint16_t ui16 */ |
| 3696 | BTF_MEMBER_ENC(NAME_TBD, 12, BTF_MEMBER_OFFSET(0, 64)), /* int32_t si32 */ | 3699 | BTF_MEMBER_ENC(NAME_TBD, 12, BTF_MEMBER_OFFSET(0, 64)), /* int32_t si32 */ |
| @@ -3699,13 +3702,15 @@ static struct btf_raw_test pprint_test_template[] = { | |||
| 3699 | BTF_MEMBER_ENC(NAME_TBD, 19, BTF_MEMBER_OFFSET(2, 126)),/* unused_bits2b */ | 3702 | BTF_MEMBER_ENC(NAME_TBD, 19, BTF_MEMBER_OFFSET(2, 126)),/* unused_bits2b */ |
| 3700 | BTF_MEMBER_ENC(0, 14, BTF_MEMBER_OFFSET(0, 128)), /* union (anon) */ | 3703 | BTF_MEMBER_ENC(0, 14, BTF_MEMBER_OFFSET(0, 128)), /* union (anon) */ |
| 3701 | BTF_MEMBER_ENC(NAME_TBD, 15, BTF_MEMBER_OFFSET(0, 192)), /* aenum */ | 3704 | BTF_MEMBER_ENC(NAME_TBD, 15, BTF_MEMBER_OFFSET(0, 192)), /* aenum */ |
| 3705 | BTF_MEMBER_ENC(NAME_TBD, 11, BTF_MEMBER_OFFSET(0, 224)), /* uint32_t ui32b */ | ||
| 3706 | BTF_MEMBER_ENC(NAME_TBD, 17, BTF_MEMBER_OFFSET(2, 256)), /* bits2c */ | ||
| 3702 | /* typedef unsigned int ___int */ /* [17] */ | 3707 | /* typedef unsigned int ___int */ /* [17] */ |
| 3703 | BTF_TYPEDEF_ENC(NAME_TBD, 18), | 3708 | BTF_TYPEDEF_ENC(NAME_TBD, 18), |
| 3704 | BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_VOLATILE, 0, 0), 6), /* [18] */ | 3709 | BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_VOLATILE, 0, 0), 6), /* [18] */ |
| 3705 | BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 15), /* [19] */ | 3710 | BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 15), /* [19] */ |
| 3706 | BTF_END_RAW, | 3711 | BTF_END_RAW, |
| 3707 | }, | 3712 | }, |
| 3708 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum\0___int"), | 3713 | BTF_STR_SEC("\0unsigned char\0unsigned short\0unsigned int\0int\0unsigned long long\0uint8_t\0uint16_t\0uint32_t\0int32_t\0uint64_t\0ui64\0ui8a\0ENUM_ZERO\0ENUM_ONE\0ENUM_TWO\0ENUM_THREE\0pprint_mapv\0ui32\0ui16\0si32\0unused_bits2a\0bits28\0unused_bits2b\0aenum\0ui32b\0bits2c\0___int"), |
| 3709 | .key_size = sizeof(unsigned int), | 3714 | .key_size = sizeof(unsigned int), |
| 3710 | .value_size = sizeof(struct pprint_mapv), | 3715 | .value_size = sizeof(struct pprint_mapv), |
| 3711 | .key_type_id = 3, /* unsigned int */ | 3716 | .key_type_id = 3, /* unsigned int */ |
| @@ -3793,6 +3798,8 @@ static void set_pprint_mapv(struct pprint_mapv *v, uint32_t i, | |||
| 3793 | v->unused_bits2b = 3; | 3798 | v->unused_bits2b = 3; |
| 3794 | v->ui64 = i; | 3799 | v->ui64 = i; |
| 3795 | v->aenum = i & 0x03; | 3800 | v->aenum = i & 0x03; |
| 3801 | v->ui32b = 4; | ||
| 3802 | v->bits2c = 1; | ||
| 3796 | v = (void *)v + rounded_value_size; | 3803 | v = (void *)v + rounded_value_size; |
| 3797 | } | 3804 | } |
| 3798 | } | 3805 | } |
| @@ -3955,7 +3962,8 @@ static int do_test_pprint(int test_num) | |||
| 3955 | 3962 | ||
| 3956 | nexpected_line = snprintf(expected_line, sizeof(expected_line), | 3963 | nexpected_line = snprintf(expected_line, sizeof(expected_line), |
| 3957 | "%s%u: {%u,0,%d,0x%x,0x%x,0x%x," | 3964 | "%s%u: {%u,0,%d,0x%x,0x%x,0x%x," |
| 3958 | "{%lu|[%u,%u,%u,%u,%u,%u,%u,%u]},%s}\n", | 3965 | "{%lu|[%u,%u,%u,%u,%u,%u,%u,%u]},%s," |
| 3966 | "%u,0x%x}\n", | ||
| 3959 | percpu_map ? "\tcpu" : "", | 3967 | percpu_map ? "\tcpu" : "", |
| 3960 | percpu_map ? cpu : next_key, | 3968 | percpu_map ? cpu : next_key, |
| 3961 | cmapv->ui32, cmapv->si32, | 3969 | cmapv->ui32, cmapv->si32, |
| @@ -3967,7 +3975,9 @@ static int do_test_pprint(int test_num) | |||
| 3967 | cmapv->ui8a[2], cmapv->ui8a[3], | 3975 | cmapv->ui8a[2], cmapv->ui8a[3], |
| 3968 | cmapv->ui8a[4], cmapv->ui8a[5], | 3976 | cmapv->ui8a[4], cmapv->ui8a[5], |
| 3969 | cmapv->ui8a[6], cmapv->ui8a[7], | 3977 | cmapv->ui8a[6], cmapv->ui8a[7], |
| 3970 | pprint_enum_str[cmapv->aenum]); | 3978 | pprint_enum_str[cmapv->aenum], |
| 3979 | cmapv->ui32b, | ||
| 3980 | cmapv->bits2c); | ||
| 3971 | 3981 | ||
| 3972 | err = check_line(expected_line, nexpected_line, | 3982 | err = check_line(expected_line, nexpected_line, |
| 3973 | sizeof(expected_line), line); | 3983 | sizeof(expected_line), line); |
