diff options
author | Andrii Nakryiko <andriin@fb.com> | 2019-03-10 20:44:10 -0400 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2019-03-14 16:53:18 -0400 |
commit | 8fd7a61aa556ad518e897f58264a2e67f9c527f5 (patch) | |
tree | f8595a44b351aebf6d14eef95fa827f3f86de5be /tools | |
parent | 9768095ba97ce946838e8210f0b44f2fd36ec31d (diff) |
selftests/bpf: add fwd enum resolution test for btf_dedup
This patch adds test verifying new btf_dedup logic of resolving
forward-declared enums.
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/testing/selftests/bpf/test_btf.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/test_btf.c b/tools/testing/selftests/bpf/test_btf.c index 38797aa627a7..23e3b314ca60 100644 --- a/tools/testing/selftests/bpf/test_btf.c +++ b/tools/testing/selftests/bpf/test_btf.c | |||
@@ -5874,6 +5874,50 @@ const struct btf_dedup_test dedup_tests[] = { | |||
5874 | .dont_resolve_fwds = false, | 5874 | .dont_resolve_fwds = false, |
5875 | }, | 5875 | }, |
5876 | }, | 5876 | }, |
5877 | { | ||
5878 | .descr = "dedup: enum fwd resolution", | ||
5879 | .input = { | ||
5880 | .raw_types = { | ||
5881 | /* [1] fwd enum 'e1' before full enum */ | ||
5882 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4), | ||
5883 | /* [2] full enum 'e1' after fwd */ | ||
5884 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5885 | BTF_ENUM_ENC(NAME_NTH(2), 123), | ||
5886 | /* [3] full enum 'e2' before fwd */ | ||
5887 | BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5888 | BTF_ENUM_ENC(NAME_NTH(4), 456), | ||
5889 | /* [4] fwd enum 'e2' after full enum */ | ||
5890 | BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4), | ||
5891 | /* [5] incompatible fwd enum with different size */ | ||
5892 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 1), | ||
5893 | /* [6] incompatible full enum with different value */ | ||
5894 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5895 | BTF_ENUM_ENC(NAME_NTH(2), 321), | ||
5896 | BTF_END_RAW, | ||
5897 | }, | ||
5898 | BTF_STR_SEC("\0e1\0e1_val\0e2\0e2_val"), | ||
5899 | }, | ||
5900 | .expect = { | ||
5901 | .raw_types = { | ||
5902 | /* [1] full enum 'e1' */ | ||
5903 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5904 | BTF_ENUM_ENC(NAME_NTH(2), 123), | ||
5905 | /* [2] full enum 'e2' */ | ||
5906 | BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5907 | BTF_ENUM_ENC(NAME_NTH(4), 456), | ||
5908 | /* [3] incompatible fwd enum with different size */ | ||
5909 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 1), | ||
5910 | /* [4] incompatible full enum with different value */ | ||
5911 | BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), | ||
5912 | BTF_ENUM_ENC(NAME_NTH(2), 321), | ||
5913 | BTF_END_RAW, | ||
5914 | }, | ||
5915 | BTF_STR_SEC("\0e1\0e1_val\0e2\0e2_val"), | ||
5916 | }, | ||
5917 | .opts = { | ||
5918 | .dont_resolve_fwds = false, | ||
5919 | }, | ||
5920 | }, | ||
5877 | 5921 | ||
5878 | }; | 5922 | }; |
5879 | 5923 | ||