blob: 3f6eb9cb97f857ceea5600f7224ac861dfaf4812 [file] [log] [blame]
/* Basic test for struct __attribute__((preserve_access_index))
for BPF CO-RE support. */
/* { dg-do compile } */
/* { dg-options "-O0 -dA -gbtf -mco-re" } */
struct S {
int a;
int b;
int c;
} __attribute__((preserve_access_index));
void
func (struct S * s)
{
/* This test is marked as XFAIL since for the time being the CO-RE
implementation is not able to disambiguate between a point manipulation
and a CO-RE access when using preserve_access_index attribute. The
current implemetantion is incorrect if we consider that STRUCT S might
have different size within the kernel.
This example demonstrates how the implementation of preserve_access_index
as an attribute of the type is flagile. */
/* 2:2 */
int *x = &((s+2)->c);
*x = 4;
/* 2:1 */
int *y = __builtin_preserve_access_index (&((s+2)->b));
*y = 2;
}
/* { dg-final { scan-assembler-times "ascii \"2:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 { xfail *-*-* } } } */
/* { dg-final { scan-assembler-times "ascii \"2:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */
/* { dg-final { scan-assembler-times "bpfcr_type" 2 } } */