summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2021-09-14 23:10:36 -0700
committerAlexei Starovoitov <ast@kernel.org>2021-09-15 08:49:49 -0700
commit2220ecf55c1b7aa36e99b00a6b964f4e5333f9bf (patch)
tree58ee06def650c8449d4bd27feb69f8a409a7faa8 /tools/testing/selftests/bpf/progs
parent4c24483e247f8d35cfc22a8d23f0e05690d11805 (diff)
selftests/bpf: Skip btf_tag test if btf_tag attribute not supported
Commit c240ba287890 ("selftests/bpf: Add a test with a bpf program with btf_tag attributes") added btf_tag selftest to test BTF_KIND_TAG generation from C source code, and to test kernel validation of generated BTF types. But if an old clang (clang 13 or earlier) is used, the following compiler warning may be seen: progs/tag.c:23:20: warning: unknown attribute 'btf_tag' ignored and the test itself is marked OK. The compiler warning is bad and the test itself shouldn't be marked OK. This patch added the check for btf_tag attribute support. If btf_tag is not supported by the clang, the attribute will not be used in the code and the test will be marked as skipped. For example, with clang 13: ./test_progs -t btf_tag #21 btf_tag:SKIP Summary: 1/0 PASSED, 1 SKIPPED, 0 FAILED The selftests/README.rst is updated to clarify when the btf_tag test may be skipped. Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20210915061036.2577971-1-yhs@fb.com
Diffstat (limited to 'tools/testing/selftests/bpf/progs')
-rw-r--r--tools/testing/selftests/bpf/progs/tag.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/testing/selftests/bpf/progs/tag.c b/tools/testing/selftests/bpf/progs/tag.c
index 17f88c58a6c5..b46b1bfac7da 100644
--- a/tools/testing/selftests/bpf/progs/tag.c
+++ b/tools/testing/selftests/bpf/progs/tag.c
@@ -4,8 +4,19 @@
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
+#ifndef __has_attribute
+#define __has_attribute(x) 0
+#endif
+
+#if __has_attribute(btf_tag)
#define __tag1 __attribute__((btf_tag("tag1")))
#define __tag2 __attribute__((btf_tag("tag2")))
+volatile const bool skip_tests __tag1 __tag2 = false;
+#else
+#define __tag1
+#define __tag2
+volatile const bool skip_tests = true;
+#endif
struct key_t {
int a;
@@ -20,7 +31,6 @@ struct {
__type(value, __u64);
} hashmap1 SEC(".maps");
-__u32 total __tag1 __tag2 = 0;
static __noinline int foo(int x __tag1 __tag2) __tag1 __tag2
{