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. --- gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c | 23 +++++++++++++++++++ gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 gcc/testsuite/gcc.target/bpf/core-btf-tag-1.c create mode 100644 gcc/testsuite/gcc.target/bpf/core-btf-tag-2.c 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 } } */ -- 2.47.2