From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id B0D343969826 for ; Tue, 10 Aug 2021 15:12:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B0D343969826 Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 17AF74HK000842 for ; Tue, 10 Aug 2021 15:12:38 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by mx0b-00069f02.pphosted.com with ESMTP id 3ab17durhy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 10 Aug 2021 15:12:37 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 17AF6BSo014053 for ; Tue, 10 Aug 2021 15:12:35 GMT Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2047.outbound.protection.outlook.com [104.47.66.47]) by userp3030.oracle.com with ESMTP id 3abjw4jwmj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 10 Aug 2021 15:12:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C9AYKNvDhbGOYkThJzWxOF8UBzCiRaqFhQaoBtNNm9lDGG1fMPPjpC3lpM/G/pJRhZ2zkRwviUnIbuA9/QYcJ7jvvagx4L1j+vGjHJZ42va2SwjUIrpdrn44egobGidFXfSFgW46ANRCNAWCs9Iq98j1VanYYpLLxIGpKu3v3k5jQq5bxnkRh+e0bwBa11M0b82QH1DJiFg0kiaQactqPssFRiHs4ptCMQ1dUz4U1N1JDGLbG8/NQWOpk2KmRQ/9ThtRx74r2F8VSiwo9ZuChgJqm6XQb4y9mli25CnMcDHJtA+1AYGujIPVdrmOHWqPvBrPEF8/+zmHyBsx5Av4Mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7CoitnmpjR9nl7x+KNOdsb5KbC84nTXnFzQusafxCjM=; b=bQf7DpTaqz2yK3xls3U7O0phRGCuslp5eUjZseINhyVyyuZOWzVTFtjHc1V6gLFfNG1rNeiqcOjbNF1IVNThVNl0SagO0y3FicCtUlVUpSeALO2kqkdnxW6MpI59zNppI6YZcKXCct+9qpEZjyqPFjeXvbBMCprdZr9QoIdqUwUxntJmtDuoLX0qSKTcFYOLIUs5x2LZr1Rh3/8v+fj2JkqnLj5wQTEmciy4OHgbYWxXKK0AHQ0GAQNlXOJI9eqUaLsDLmIpdFI7QK+5DjDylne4EzrFzCejaAjLLoHKERkzLoj5FtcjijOkxiuMmX/Y4ssHp9t7b+G4Fhz237khPQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by SJ0PR10MB4718.namprd10.prod.outlook.com (2603:10b6:a03:2dd::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.17; Tue, 10 Aug 2021 15:12:33 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::5d49:ec20:468e:1b77]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::5d49:ec20:468e:1b77%7]) with mapi id 15.20.4394.023; Tue, 10 Aug 2021 15:12:33 +0000 From: "Jose E. Marchesi" To: David Faust via Gcc-patches Subject: Re: [PATCH 6/7] bpf testsuite: Add BPF CO-RE tests References: <20210804175411.6783-1-david.faust@oracle.com> <20210804175411.6783-7-david.faust@oracle.com> Date: Tue, 10 Aug 2021 17:12:26 +0200 In-Reply-To: <20210804175411.6783-7-david.faust@oracle.com> (David Faust via Gcc-patches's message of "Wed, 4 Aug 2021 10:54:10 -0700") Message-ID: <87eeb1pc4l.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Content-Type: text/plain X-ClientProxiedBy: LO2P265CA0394.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::22) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from termi.oracle.com (141.143.193.68) by LO2P265CA0394.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4394.15 via Frontend Transport; Tue, 10 Aug 2021 15:12:32 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1a72ec22-b273-40f0-d6aa-08d95c114750 X-MS-TrafficTypeDiagnostic: SJ0PR10MB4718: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:38; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iLoKXqNBdt4MjI2PKkB1mRPrG4t8Dy1rQOGDQ4tLXtYNme6wz7M/yd2Xxjw7/Q8Sk4WlsUk8CReNrw9rL4ood9hj7sfN7ib8OR6JQFZyg2TPl3ub07Q1D3zNz0MuJwIHKoX82qa+xCvsDh/Qpoz2l3bm8QIt7SvIMbpTEFilRyjPW8uz/j03L/mEQOpNbClp5w849J91n5aiuMz4h/QRR+HsyZnxfzxlJiSMpwS+mR33BWwqtGpNnx2joEdWy+PT4sjXq55n8/9PwOivuIhFUhAhxYSFYCOAJDszMBwZulEFvDepOOsPstpya5uLX8rMTl9X4VT39CqqrGx1PqKhKJkxYbvS6HiTVrYtamFx4aB5ek7ITyKZwz38kcC7/18PUtYbk0+cEHBjqP6huPGnRn4RErbIB+65EAbKLV5VpV1L5j4e89vl6oxaXaVq4WTIZjdPHjFriD+dWuCWj6sYJncBYKz8LqmiGh/J47vxN1C6RnLbfQla1LRE4as6b9Oza8GIPSCazzu/S8zOSNmR7sgqrtWv/AroDEZiy5U/sXsGNbN3rYoXcltsrreAztS0VwTvrm+hjM+eAt8rnqWY3/It8h3ZEuPFE50/i89+VmrcUvRh0sO27+5lSaH1cQUTYuQBLo4Ei1UABQuGpQKyKGLEMyEmjNj28CPGOF+hUFrmxbx01m0KdksjfVNzCkoIH9bV0VM/lsN3neYuf6zbR/jHoWFQlUvHMuXx4KAga2wCyhTLC+L/R0BP4m6b12KkUKL0WnjTRUEAMJzrbbSR/LLWzrh0vh2RUygYvK0eIV4qd3InRLh43NHrn4PnoqmtuQfa8BIMi0xWJbZnwO6OrQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR10MB2888.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(366004)(136003)(396003)(39860400002)(346002)(186003)(8676002)(83380400001)(86362001)(4326008)(5660300002)(66556008)(6666004)(107886003)(6916009)(66476007)(36756003)(38100700002)(38350700002)(2616005)(30864003)(7696005)(956004)(8936002)(52116002)(2906002)(316002)(6486002)(26005)(66946007)(478600001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yYgDKJvdH8CuHfLWO05ndnWU2lnZYHPk9PXUmeY6QCx7mZ+WhKfNOfIykSNl?= =?us-ascii?Q?qptGvJoef2HPcpOAmNDBUETs51k0INcW6RrfDrdcjUoGDDhPki0ClCQ5fw+L?= =?us-ascii?Q?SjPtjaMvfA9a9rjYpt5aUKXtVaOgmQH2BrGMGldRi+XcOngg2vf/ISFEIagO?= =?us-ascii?Q?9Vecj/jInKG9i4IxsJv3Kh4KlNxW51TsnR06egzsKW+zMhP9ahaICIddj8qI?= =?us-ascii?Q?ERDpr5fvoS79moXjx5Wr3E47CkY/6B1InB/da9WRD1aHlFZ+FJJ+mK2hIWHR?= =?us-ascii?Q?bFcUwxZLAsZSV+QcMvudh3o0ZDLBUiDLbsOSI/Gw5m+TH5DdFjXsp/7GEAqD?= =?us-ascii?Q?HhoCNUcTuqznnH733oeB+vzaiDMF2/3g+KasyIWOf60NH2xNH4YWbWQrOcp1?= =?us-ascii?Q?wMOfb5obxK/MavWvLy6ueGOCVrKpLH1yRO1vqercpfha+aHicsFwZlwytYLZ?= =?us-ascii?Q?s2mz6M84f9dA6QBxin/ltE5XBiwpAi9E8e8b4XqIYYi1tlYR/+QQiE03F5MD?= =?us-ascii?Q?3tqBlk4KFzJXyqMnhKMwW4VK7M98pghzPPb0NldNuVZsVAaI3uEYjQji+75Y?= =?us-ascii?Q?qH8trRW5MTx5ykiPyig/LiGC8c3DmvjlkaZZd6wUxkTM0rl5s3FfRv2+iu4y?= =?us-ascii?Q?XAx0WQHpXaFK1pJ69iZ1ibju5cR2az4NT3KlOMdveyCZfVJ2jGAS1QxRHLaM?= =?us-ascii?Q?gzTc+AzbNiRyhuXaTKEOtT50Sj/O3nexK/JY5QIyvFjpYW9qL6JkQRdjxwuo?= =?us-ascii?Q?CnJrGGc0QNEjLcOcT2ZffpmxUnWmfr6U9ocd53Ntymj9wCgvnhgQc4eL7kRA?= =?us-ascii?Q?CQ1oRD5f+CaA4GaZT9cNQ6Lg0GlsX7ZbYWWRM9deTrjR4FEqwaNRCudKdAru?= =?us-ascii?Q?xYtCefjLm4AJt8aErCbWL9VLWjdYcDk+b5r0S6E1ceduVZmSb65HGyQatutc?= =?us-ascii?Q?h7q093sGdr+eO1C8ik9sogZ6QDFlz7YrHK+OfzkO1qfWk82q5ktJwy54oqhP?= =?us-ascii?Q?5XEOIQhdOVQyG0x5DZjoBPIGlvsnQP33r8b3SZVe4Iiibm3Nos/2Q4aglHrp?= =?us-ascii?Q?wCn6GjCumw7DG9Y5bwdzakjCQ2CydXAC+zJ4Bf6mG6AKTThC6LpFCNZZWOEu?= =?us-ascii?Q?x8wUVerIDGXgFf7PIqNDBIgp+OBXTmTXBxGne3GKu30BTNFDW7HebSdqvMMs?= =?us-ascii?Q?omJRqRLFXH7DyFA/1u8YwpGXpEIZH/D5+ljL6EPPNcddYQTtL3KTkVCwuC66?= =?us-ascii?Q?TZFQwS+K4lbKps63R7uUNDHnd33IacXaoCI4c+juuQCTrx2tgtaotoitYyOP?= =?us-ascii?Q?fCyQUONckmR8frkkQOn3ZHUk?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1a72ec22-b273-40f0-d6aa-08d95c114750 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2021 15:12:33.3734 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WAH5MWOz08iipMGFTrCdp+rHBzCpI+tSUOCjFjaJINj8eXMaDTpVHVvdERn+0nCkmYw3x7s/xJyl2kqopKwqjjbpIbKKnlW5bbWjmPBZzUs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR10MB4718 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10072 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 mlxlogscore=999 malwarescore=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108100097 X-Proofpoint-GUID: CZPSmMZdoyvBuZzFKwXLtsoFAB_YZQJM X-Proofpoint-ORIG-GUID: CZPSmMZdoyvBuZzFKwXLtsoFAB_YZQJM X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_BL, RCVD_IN_MSPIKE_L3, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Aug 2021 15:12:49 -0000 Hi David. This BPF part is OK. > This commit adds several tests for the new BPF CO-RE functionality to > the BPF target testsuite. > > gcc/testsuite/ChangeLog: > > * gcc.target/bpf/core-attr-1.c: New test. > * gcc.target/bpf/core-attr-2.c: Likewise. > * gcc.target/bpf/core-attr-3.c: Likewise. > * gcc.target/bpf/core-attr-4.c: Likewise > * gcc.target/bpf/core-builtin-1.c: Likewise > * gcc.target/bpf/core-builtin-2.c: Likewise. > * gcc.target/bpf/core-builtin-3.c: Likewise. > * gcc.target/bpf/core-section-1.c: Likewise. > --- > gcc/testsuite/gcc.target/bpf/core-attr-1.c | 23 +++++++ > gcc/testsuite/gcc.target/bpf/core-attr-2.c | 21 ++++++ > gcc/testsuite/gcc.target/bpf/core-attr-3.c | 41 ++++++++++++ > gcc/testsuite/gcc.target/bpf/core-attr-4.c | 35 ++++++++++ > gcc/testsuite/gcc.target/bpf/core-builtin-1.c | 64 +++++++++++++++++++ > gcc/testsuite/gcc.target/bpf/core-builtin-2.c | 26 ++++++++ > gcc/testsuite/gcc.target/bpf/core-builtin-3.c | 26 ++++++++ > gcc/testsuite/gcc.target/bpf/core-section-1.c | 38 +++++++++++ > 8 files changed, 274 insertions(+) > create mode 100644 gcc/testsuite/gcc.target/bpf/core-attr-1.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-attr-2.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-attr-3.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-attr-4.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-builtin-1.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-builtin-2.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-builtin-3.c > create mode 100644 gcc/testsuite/gcc.target/bpf/core-section-1.c > > diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-1.c b/gcc/testsuite/gcc.target/bpf/core-attr-1.c > new file mode 100644 > index 00000000000..7f0d0e50dd6 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-attr-1.c > @@ -0,0 +1,23 @@ > +/* Basic test for struct __attribute__((preserve_access_index)) > + for BPF CO-RE support. */ > + > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct S { > + int a; > + int b; > + int c; > +} __attribute__((preserve_access_index)); > + > +void > +func (struct S * s) > +{ > + /* 0:2 */ > + int *x = &(s->c); > + > + *x = 4; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-2.c b/gcc/testsuite/gcc.target/bpf/core-attr-2.c > new file mode 100644 > index 00000000000..508e1e4c4b1 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-attr-2.c > @@ -0,0 +1,21 @@ > +/* Basic test for union __attribute__((preserve_access_index)) > + for BPF CO-RE support. */ > + > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +union U { > + int a; > + char c; > +} __attribute__((preserve_access_index)); > + > +void > +func (union U *u) > +{ > + /* 0:1 */ > + char *c = &(u->c); > + *c = 'c'; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-3.c b/gcc/testsuite/gcc.target/bpf/core-attr-3.c > new file mode 100644 > index 00000000000..1813fd07a2f > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-attr-3.c > @@ -0,0 +1,41 @@ > +/* Test for __attribute__((preserve_access_index)) for BPF CO-RE support > + for nested structure. > + > + Note that even though struct O lacks the attribute, when accessed as a > + member of another attributed type, CO-RE relocations should still be > + generated. */ > + > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct O { > + int e; > + int f; > +}; > + > +struct S { > + int a; > + struct { > + int b; > + int c; > + } inner; > + struct O other; > +} __attribute__((preserve_access_index)); > + > +void > +func (struct S *foo) > +{ > + /* 0:1:1 */ > + int *x = &(foo->inner.c); > + > + /* 0:2:0 */ > + int *y = &(foo->other.e); > + > + *x = 4; > + *y = 5; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:1:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:2:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > + > +/* { dg-final { scan-assembler-times "bpfcr_type" 2 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-4.c b/gcc/testsuite/gcc.target/bpf/core-attr-4.c > new file mode 100644 > index 00000000000..30d859a1c57 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-attr-4.c > @@ -0,0 +1,35 @@ > +/* Test for BPF CO-RE __attribute__((preserve_access_index)) with accesses on > + LHS and both LHS and RHS of assignment. */ > + > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct T { > + int a; > + int b; > + struct U { > + int c; > + struct V { > + int d; > + int e[4]; > + int f; > + } v; > + } u; > +} __attribute__((preserve_access_index)); > + > + > +void > +func (struct T *t) > +{ > + /* 0:2:1:1:3 */ > + t->u.v.e[3] = 0xa1; > + > + /* 0:2:0, 0:0, 0:1 */ > + t->u.c = t->a + t->b; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:2:1:1:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:2:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 4 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-1.c > new file mode 100644 > index 00000000000..e6905418c89 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-1.c > @@ -0,0 +1,64 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct S { > + int a; > + int b; > + char c; > +}; > + > +union U { > + unsigned int u; > + int i; > + unsigned char uc[4]; > + signed char ic[4]; > +}; > + > +struct S my_s; > +union U my_u; > + > +unsigned long ula[8]; > + > +#define _(x) (__builtin_preserve_access_index (x)) > + > +void > +func (void) > +{ > + /* 1 */ > + int b = _(my_s.b); > + > + /* 2 */ > + char c = _(my_s.c); > + > + /* 2:3 */ > + unsigned char uc = _(my_u.uc[3]); > + > + /* 6 */ > + unsigned long ul = _(ula[6]); > +} > + > +char > +s_ptr (struct S *ps) > +{ > + /* 0:2 */ > + char x = _(ps->c); > + return x; > +} > + > +unsigned char > +u_ptr (union U *pu) > +{ > + /* 0:2:3 */ > + unsigned char x = _(pu->uc[3]); > + return x; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"2:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"6.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:2:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > + > +/* { dg-final { scan-assembler-times "bpfcr_type" 6 } } */ > +/* { dg-final { scan-assembler-times "\[\t \]0x6c\[\t \]+\[^\n\]*core_relo_len" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-2.c b/gcc/testsuite/gcc.target/bpf/core-builtin-2.c > new file mode 100644 > index 00000000000..5e9dfecce65 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-2.c > @@ -0,0 +1,26 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct S { > + int a; > + union { > + int _unused; > + int b; > + char c; > + } u[4]; > +}; > + > +struct S foo; > + > +#define _(x) (__builtin_preserve_access_index (x)) > + > +void func (void) > +{ > + char *x = __builtin_preserve_access_index (&foo.u[3].c); > + > + *x = 's'; > +} > + > +/* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"1:3:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-3.c b/gcc/testsuite/gcc.target/bpf/core-builtin-3.c > new file mode 100644 > index 00000000000..495eeadfe69 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-3.c > @@ -0,0 +1,26 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -dA -gbtf -mcore" } */ > + > +struct T { > + int a; > + int b; > + struct U { > + int c; > + struct V { > + int d; > + int e[4]; > + int f; > + } v; > + } u; > +}; > + > +void func (struct T * foo) > +{ > + /* Access string: "0:2:1:1:3" */ > + int *x = __builtin_preserve_access_index (&(foo->u.v.e[3])); > + > + *x = 17; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:2:1:1:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 1 } } */ > diff --git a/gcc/testsuite/gcc.target/bpf/core-section-1.c b/gcc/testsuite/gcc.target/bpf/core-section-1.c > new file mode 100644 > index 00000000000..b816aefd0d2 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/bpf/core-section-1.c > @@ -0,0 +1,38 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O0 -gbtf -dA -mcore" } */ > + > +struct T { > + int a; > + int b; > + struct U { > + int c; > + struct V { > + int d; > + int e[4]; > + int f; > + } v; > + } u; > +}; > + > +__attribute__((section("foo_sec"), used)) > +int foo_func (struct T *t) > +{ > + t->u.c = 5; > + return __builtin_preserve_access_index (t->u.v.e[3]); > +} > + > +__attribute__((section("bar_sec"), used)) > +int bar_func (struct T *t) > +{ > + int *x = __builtin_preserve_access_index (&(t->u.v.f)); > + int old = *x; > + *x = 4; > + return old; > +} > + > +/* { dg-final { scan-assembler-times "ascii \"0:2:1:1:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"0:2:1:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"foo_sec.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "ascii \"bar_sec.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ > +/* { dg-final { scan-assembler-times "bpfcr_type" 2 } } */ > +/* { dg-final { scan-assembler-times "btfext_secinfo_rec_size" 2 } } */