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.
This commit is contained in:
David Faust 2025-04-28 12:17:24 -07:00
parent 8b5d75121d
commit 4e1f9a0fbe
2 changed files with 46 additions and 0 deletions

View File

@ -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 } } */

View File

@ -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 } } */