From: David Faust Date: Mon, 28 Apr 2025 19:17:24 +0000 (-0700) Subject: bpf: add tests for CO-RE and BTF tag interaction X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e1f9a0fbe52212663a6de7416d00bbe04d7d7cd;p=thirdparty%2Fgcc.git bpf: add tests for CO-RE and BTF tag interaction Add a couple of tests to ensure that BTF type/decl tags do not interfere with generation of BPF CO-RE relocations. gcc/testsuite/ * gcc.target/bpf/core-btf-tag-1.c: New test. * gcc.target/bpf/core-btf-tag-2.c: New test. --- diff --git a/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c b/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c new file mode 100644 index 00000000000..bd0fb3e40be --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c @@ -0,0 +1,23 @@ +/* Test that BTF type tags do not interfere with CO-RE relocations. */ + +/* { dg-do compile } */ +/* { dg-options "-gbtf -dA -mco-re" } */ + +struct bpf_cpumask { + int i; + char c; +} __attribute__((preserve_access_index)); + +struct kptr_nested { + struct bpf_cpumask * __attribute__((btf_type_tag("kptr"))) mask; +} __attribute__((preserve_access_index)); + +void foo (struct kptr_nested *nested) +{ + if (nested && nested->mask) + nested->mask->i = 5; +} + +/* { dg-final { scan-assembler-times "bpfcr_insn" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 3 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c b/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c new file mode 100644 index 00000000000..6654ffe3ae0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c @@ -0,0 +1,23 @@ +/* Test that BTF decl tags do not interfere with CO-RE relocations. */ + +/* { dg-do compile } */ +/* { dg-options "-gbtf -dA -mco-re" } */ + +struct bpf_cpumask { + int i; + char c; +} __attribute__((preserve_access_index)); + +struct kptr_nested { + struct bpf_cpumask * mask __attribute__((btf_decl_tag ("decltag"))); +} __attribute__((preserve_access_index)); + +void foo (struct kptr_nested *nested __attribute__((btf_decl_tag ("foo")))) +{ + if (nested && nested->mask) + nested->mask->i = 5; +} + +/* { dg-final { scan-assembler-times "bpfcr_insn" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 3 } } */