summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c
diff options
context:
space:
mode:
authorAndrii Nakryiko <andriin@fb.com>2019-05-24 11:59:04 -0700
committerAlexei Starovoitov <ast@kernel.org>2019-05-24 14:05:58 -0700
commit2d2a3ad872f884d618f11e1a2028cff862503dcd (patch)
treeac6c8d467949cdb304024b3aff5bd113e3bff3c6 /tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c
parent351131b51c7a27daf0fbdce80b619b8d130374c6 (diff)
downloadlinux-2d2a3ad872f884d618f11e1a2028cff862503dcd.tar.gz
linux-2d2a3ad872f884d618f11e1a2028cff862503dcd.tar.bz2
linux-2d2a3ad872f884d618f11e1a2028cff862503dcd.zip
selftests/bpf: add btf_dump BTF-to-C conversion tests
Add new test_btf_dump set of tests, validating BTF-to-C conversion correctness. Tests rely on clang to generate BTF from provided C test cases. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c')
-rw-r--r--tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c b/tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c
new file mode 100644
index 000000000000..92a4ad428710
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/btf_dump_test_case_namespacing.c
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
+
+/*
+ * BTF-to-C dumper test validating no name versioning happens between
+ * independent C namespaces (struct/union/enum vs typedef/enum values).
+ *
+ * Copyright (c) 2019 Facebook
+ */
+/* ----- START-EXPECTED-OUTPUT ----- */
+struct S {
+ int S;
+ int U;
+};
+
+typedef struct S S;
+
+union U {
+ int S;
+ int U;
+};
+
+typedef union U U;
+
+enum E {
+ V = 0,
+};
+
+typedef enum E E;
+
+struct A {};
+
+union B {};
+
+enum C {
+ A = 1,
+ B = 2,
+ C = 3,
+};
+
+struct X {};
+
+union Y {};
+
+enum Z;
+
+typedef int X;
+
+typedef int Y;
+
+typedef int Z;
+
+/*------ END-EXPECTED-OUTPUT ------ */
+
+int f(struct {
+ struct S _1;
+ S _2;
+ union U _3;
+ U _4;
+ enum E _5;
+ E _6;
+ struct A a;
+ union B b;
+ enum C c;
+ struct X x;
+ union Y y;
+ enum Z *z;
+ X xx;
+ Y yy;
+ Z zz;
+} *_)
+{
+ return 0;
+}