From patchwork Thu Apr 11 11:11:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cupertino Miranda X-Patchwork-Id: 1922511 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=MILhgjCr; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=Ce1cjSUU; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VFcTy0GHgz1yYM for ; Thu, 11 Apr 2024 21:12:05 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 781AC384AB75 for ; Thu, 11 Apr 2024 11:12:03 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id B3E0C385842A for ; Thu, 11 Apr 2024 11:11:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B3E0C385842A Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B3E0C385842A Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833896; cv=pass; b=wnTNWI6AVk3oWLPfwI9L5t85Soa9C9Y5O96WH593r8IRSFR/FJ2syfW88A1Pz3uZl14WN0o+GG5iGyrppP9j0ieOU48TilnsI/5uKgXqbjqeDXNlpycAHqdH0z5DEN1vHQlTaLLd7RfaSY2SQQWFpg6c8NrxIpBzYL/EAoDI6xA= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833896; c=relaxed/simple; bh=RkzFiJO2tGat8netXxjnZ9Y4m4i9+IMEANTM3npFx7I=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=QVEIuh3755ig6vktsB6/rsrtHcCaXRPwnZqjA/HCziKjdWG5URdqprjJE+Hpfcfu06RjnoRWgSLfI+Bc7YyfbDPkfJzbrfmHFSLjUVGCzxItlsTWGJ0JROjK6zs1v5jcLm6dz8wDHMxra+Moh9OJgNtF+U0bXNigdtU7PovP1NI= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43BAK7P2021888 for ; Thu, 11 Apr 2024 11:11:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=k5YLCTwidXI+STdLiTOZHl2R0gRMSRkk4m1SJS79Vqg=; b=MILhgjCr0oe1Iu4gACbPKON1oblol7LizXt821ndg0amFmtn8eE0HOOJWMQsQxQkysPZ OkRLFzoz7AcDmFLB+gaBTQ58tTyXQkiMC6xJPlCdwDNdDepJxT9hqSM0MYGWRVQZW1/C 4K/zj7CZQbMDt523KRjyKYxd16FCK4ZGxgDlwUz9qVPNP5dY1AQhib61EMj9MbjahYUD V4L6xORlqmDvVqFr2mVMJxt7rreltpJHskjRk3DlKwwqyzbA7ue897kMGCewpuAqKsAp oWa4QKzpSjKg2YRtI9tvPYkAeFE3at/XkOzrCE+Q4XBcVe2GGLBSxi5jINkIjevC4vZN ng== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xax0usbk5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:30 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 43BB4ce6003010 for ; Thu, 11 Apr 2024 11:11:30 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2171.outbound.protection.outlook.com [104.47.58.171]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3xavufn8xs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ctqr4CxSuNjf7GwntVHc59dyA8K+pK7hPoOC/O4TEIj7svUb2bo7mHwU+PvFHVFn6FwbPRB3Q+BZjKPeB7H/cIMSvCVDirt5QUGkPA46qH11ynYVoqfPPUu6jlS7CGd6exo+IdavT+YvInFF0WLviSOVBM23Kd0oei9Hi22f/dUtFYIQyQ6B+CrCpTRe4vpYo5+iOlLgYoD5h8zVNNvh0HeHeQY+HF129+qjTlISscci+tMjYaQl/z2LJwbuumugkK/MP9fimaChC8eqRtAHtVqcfg5KaxFhnHt3GJWkxvTbisZLnJ9w94cSnGZGJT02tbJsvcW3epJ8VSliXdg11w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=k5YLCTwidXI+STdLiTOZHl2R0gRMSRkk4m1SJS79Vqg=; b=jhn0FUHa48ReVMpL16FLS7KScY0ndthGE8RjTYkpEAGM9OffulY+m/X3L8pay0NjaV6tD8/9JFq5u8ygXtYsCRj+VXUtkCpXtR8GUHs+D1YPGWu15ZND9YMPhF2Ktj1/2pv5zGSenE/UugiOUQr7trwiJ7EeqqrDB3Tode9IptqXvSQ6JcbabYbE3lrg9v4OWABwg1qjoVfxFKzpYDU3YK6HhLKNwxfyZFC6ESyiXFzlPGsIA7eAv3lIWMG57jJQfTCZ1nNJTbh6ZySrlUwMk/zQC4T7Bv1GA6/eLsGiR/LuQHVI8LS5zCJWg+H26Q88gOfeeGIwGTXEztjlLQ7K6w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k5YLCTwidXI+STdLiTOZHl2R0gRMSRkk4m1SJS79Vqg=; b=Ce1cjSUUSHvzgbkBVqq8ieMZK9i0PwRg51AgACrj1smCRy+8sDqIBqikET/VQwSNMiHukrO0RdGW6ZPotiIa7VrOO7yuel4A3VzaoguknQAEJjZCBpEYlcODB60ZsTxkRO9nEjh0VszvLoTIQKT6RXd5scIliHqjxT1J/RXK7H0= Received: from MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) by PH0PR10MB5644.namprd10.prod.outlook.com (2603:10b6:510:fb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Thu, 11 Apr 2024 11:11:27 +0000 Received: from MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c]) by MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c%4]) with mapi id 15.20.7409.053; Thu, 11 Apr 2024 11:11:27 +0000 From: Cupertino Miranda To: gcc-patches@gcc.gnu.org Cc: jose.marchesi@oracle.com, david.faust@oracle.com, elena.zannoni@oracle.com, Cupertino Miranda Subject: [PATCH 1/3] bpf: support more instructions to match CO-RE relocations Date: Thu, 11 Apr 2024 12:11:16 +0100 Message-Id: <20240411111118.215612-1-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: AM0PR02CA0195.eurprd02.prod.outlook.com (2603:10a6:20b:28e::32) To MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB4382:EE_|PH0PR10MB5644:EE_ X-MS-Office365-Filtering-Correlation-Id: 5038ad61-ebc6-4b05-0d0e-08dc5a18219d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: g95buBwUPZ858GAQgOlkv8X2IkC3kDGvtDqrMk9iWmwv1fptO/rBBDogU3M1FAdB9PpKltwYmaujew7ae6foPyoa8J1E/Y2OieUE75haZDwHhwzqK2S2zlwV+OTZ3B5opXdDwtGZGvBZCx0N5dUStQqGtNg4vYUY17s0YCNwM3oeLH59oi1Z0PWulQsispsNpfiusm95jp06mY8H8z922SRqrCBq92o6hDDDpfeRcV+iC7srTCeI1WteJVag2kcweJjPbZx4fBjgIJjr0sa+MlMl8L3ge/+8/4X82f2aTe9imRTRq5tBa9Y14WU+cfvoENSdEEHsPbTwzUdwlnRS1j0bpBpYkV7wL4I78S8391Dp6kxiU+0o0ZvELW/hbYtMnpMEKQ8DPONQGL3xcVzyXWQQ/es39YLDozYiLChdo/entHibW8on0bjBCuVG2LFalKEBAX0Wy9Om60ChXQDq624bNsltsUeBZ1qKanNvobaJvlYWDyyNgp8iIlyfvLcpqfwSOXF/y/a+oqdGP9MuLMpEga3xEJ1NlXVcXBm/HuymMQ96CiUDUH6T9wVVqXVMoBwKyNI1u+AknUcmR0FVii7AuNRZktFRJPfloHFm1IA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB4382.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(366007)(1800799015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FVChhpH5YH6M6cGGcD1fcPM6xcrjsRPiP+5l5mS+c/DieyrJSLeNQGoj8pA3TY6/xoxN7MZTL/BiuS452oS93ui2QSrrSRkSiIiR1twuS7FWQNrl+3Z7P07D/fAm80GlmYtq/4H6zirPm6hg656cDYCDRG8sNsskLZlP7HO/iRVj89FDno6bQtFhDYLiUX4SRBXekaNll9elAAZhWjc/0BlK8s+7h6jpmduVP+L4ApMsHea3AG77yTrXE5qVA50LW8RPaVfb343JCApkQt3IUWbOsza3j4HdawSVTozNZ+aXwSggjo0TQ6A1HiBejR99fagnmBlPsxDKycWQbRLzFiYefbL9tvkAHz5ZPs83nUziJcNdYYAGuhw0w2HjYCYsR15z/av7VMx/YH90UeFurSywvsVNmEqyETWkH3OKSIzcXig8R6GLnqT6l4kNuFlZX2QR/C9gDiqZtkc0YX8UfLt13K6GBrBeYSuxhkgIQPY8Tbp6NO/NtMX3bg5lfiSOL064+3GGtGWVJJf46cFTnEH+EMN17EUrYZ+RkFinuGsB53PpQaAKwpRslveW/678BUznuS8IpFZefYM7bq49TRg+bDsodSRnrCji6oQBmh54jY28/2jaEk2eeUJLGBMVQ1NcHDciIGSG548bmcGpWVx11gcS6ZtZBCqc7vw6XCSvwiVDoxbYHUEhWfMhSAC5DY286Bhtt+50iuds6Hm8dWH8jVBmgir/pioO6oiNGlaj6CmCUYBJsRcY0fen7+o8TSy0TMT+z/Z+x9WdNw+i+C0QKHnxxaa7t0Tj4WHJtnlHaUDirMdBycyVwCtcUbgFmbnPQwxOTVtFtfxZqYFlxUy1rKgiPIThDG/5UdMbwjyQC9bqaw89SiOyZrr9rzSo87iOM/5IgudjUmvvOVLoUWZE4k0gyoZzFRLm+2wO4CGofLzWRz64BPcAzI72eF9FN5gMoB2I8a/TGbVSYBD19EEOlxEMTf+VdRh/UYROruxl/HObNyp1sBQIgv4egfN208IWQ3TBT5T2A8cnL4hucTqsNXM0JhomTbhzSoC5r1LtqnfPBs5WAcsyZxmC+2UTG1x4Zi8H/9BBegAwbWC7cbrRy3CHJKPp1kK41cbvu5H79njmd+KscqHbrBBNLGHcoXrDIt6++wyNK4ejzKmqByxOk5Vlki5nng+fEu1BLcEESlnRWfe6PkNkaDv/LaIdhRerkQ1SCiKxJlCmfIjEghkKil3cFdRezpQCHBRdQjDI2t+RFykaMxQBQz3NdqBcYoAIE56TZAgKSIElVHHct6b7WXXG2LVqQdOtV53k+VOW1UHsRh3v3IPZ0+Cp+y4XMRjlSyGvrOdFWPZwutlHq17X8NyqWq9vaSAfhcMKb16IR8VDdFpKmjjPSfWHimIKy0zpOjnHIgN0y4FKeEV/UbhQaA7BkcFwBtEACOwGzfQ2qhFIq74gAZeaMjx6g8KPO3nJ8rQ1cHp57Cu3m3wlxMtidht2qtWnSRWzRT28hXp/xXmwBVxv1fD8vkRaG1qcix/Kc5o4/+Hv2sOBqfWPC9tVXOb7WPWnGm9RxnsswaJvC8oGQ3jUF997AzBJ5Qk5ba3C2JK67KFhlUwlmIidc4eCqPZz6yjbBcInTi/PdHc= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: n94M1Nr5pbtrj76eIXY5x5bQsO0sa+41b7ZO3/YEEP+u97N+Bgq4xeQVbLQevNjjXOTyb4iSyN+8iHPKhBccPlVxidUuSgc8ATOFtMzU13Rb5EcWPYchZpzrJHsomxlOFq4gbS7EXFL8AyRusQ45QvwWKf8tHlLGj7yjYyG95FYqEiMly+JBsWLHHfqb2yYtH/8AMb2M+dV+wkFBCZ2lLTPq0Ez3G/G1RaCxMlVOxe6ShBqopWN7TGCxHE01Ogi2CQyWFgJxCD+EvTQ6sQkePuYoiWd7YsGdKqRDIXqHF0CvYPRY/FZUs5x7EoBFhxwO2gyQ6qLZoCt2Z2dhYs/iXSG+qVYFzfTzMg0qI24NWXruNTr4Ci99nI89AQk4njkAov6VPq8qCpHEFhWxn6FH/EinB5h56Org5/2pkcHlDpEd4tINnVBdlO66sax4wSUTW/LZug3/8rxT4LKz0a4X2XMQyoaJmq8w3R/lDTIk1seDPi9bgAo2oSFqHXlaJs5NVbYjXShjsbz4mG6LXm8Hwy5ytgadjglYuhfNACxyBFqiUCMBDCDMTlOHqcdvtMJIuONqGfY01fcWw5PtlF8/pAL6PibotM34Sdg56VGUzJg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5038ad61-ebc6-4b05-0d0e-08dc5a18219d X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4382.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2024 11:11:27.2270 (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: eMfyLhEasFan+vecRSZfMn55Ept8LARwTjdCkiA4sFtaWnsufgoYotJaAXYKNtd+2uCIHZc7wmyojBChApofWBCazCIIt2FFjG6prJrWZL0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5644 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-11_04,2024-04-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 adultscore=0 malwarescore=0 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404110080 X-Proofpoint-GUID: ovUnt-Ar0Hp11VMjZXKTmkHGCma4PTFO X-Proofpoint-ORIG-GUID: ovUnt-Ar0Hp11VMjZXKTmkHGCma4PTFO X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org BPF supports multiple instructions to be CO-RE relocatable regardless of the position of the immediate field in the encoding. In particular, not only the MOV instruction allows a CO-RE relocation of its immediate operand, but the LD and ST instructions can have a CO-RE relocation happening to their offset immediate operand, even though those operands are encoded in different encoding bits. This patch moves matching from a more traditional matching of the UNSPEC_CORE_RELOC pattern within a define_insn to a match within the constraints of both immediates and address operands from more generic mov define_insn rule. gcc/Changelog: * config/bpf/bpf-protos.h (bpf_add_core_reloc): Renamed function to bpf_output_move. * config/bpf/bpf.cc (bpf_legitimate_address_p): Allow UNSPEC_CORE_RELOC to match an address. (bpf_insn_cost): Make UNSPEC_CORE_RELOC immediate moves expensive to prioritize loads and stores. (TARGET_INSN_COST): Add hook. (bpf_output_move): Wrapper to call bpf_output_core_reloc. (bpf_print_operand): Add support to print immediate operands specified with the UNSPEC_CORE_RELOC. (bpf_print_operand_address): Likewise, but to support UNSPEC_CORE_RELOC in addresses. (bpf_init_builtins): Flag BPF_BUILTIN_CORE_RELOC as NOTHROW. * config/bpf/bpf.md: Wrap patterns for MOV, LD and ST instruction with bpf_output_move call. (mov_reloc_core): Remove now spurious define_insn. * config/bpf/constraints.md: Added "c" and "C" constraints to match immediates represented with UNSPEC_CORE_RELOC. * config/bpf/core-builtins.cc (bpf_add_core_reloc): Remove (bpf_output_core_reloc): Add function to create the CO-RE relocations based on new matching rules. * config/bpf/core-builtins.h (bpf_output_core_reloc): Add prototype. * config/bpf/predicates.md (core_imm_operand) Add predicate. (mov_src_operand): Add match for core_imm_operand. gcc/testsuite/ChangeLog: * gcc.target/bpf/btfext-funcinfo.c: Updated to changes. * gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-existence-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-offset-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-sign-1.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-sign-2.c: Likewise. * gcc.target/bpf/core-builtin-fieldinfo-size-1.c: Likewise. --- gcc/config/bpf/bpf-protos.h | 2 +- gcc/config/bpf/bpf.cc | 54 +++++++++++++- gcc/config/bpf/bpf.md | 56 ++++++--------- gcc/config/bpf/constraints.md | 20 ++++++ gcc/config/bpf/core-builtins.cc | 71 ++++++++++++++----- gcc/config/bpf/core-builtins.h | 2 + gcc/config/bpf/predicates.md | 7 +- .../gcc.target/bpf/btfext-funcinfo.c | 2 - ...core-builtin-fieldinfo-const-elimination.c | 2 +- .../bpf/core-builtin-fieldinfo-existence-1.c | 2 +- .../bpf/core-builtin-fieldinfo-lshift-1-be.c | 8 +-- .../bpf/core-builtin-fieldinfo-lshift-1-le.c | 8 +-- .../bpf/core-builtin-fieldinfo-lshift-2.c | 6 +- .../bpf/core-builtin-fieldinfo-offset-1.c | 12 ++-- .../bpf/core-builtin-fieldinfo-rshift-1.c | 8 +-- .../bpf/core-builtin-fieldinfo-rshift-2.c | 4 +- .../bpf/core-builtin-fieldinfo-sign-1.c | 4 +- .../bpf/core-builtin-fieldinfo-sign-2.c | 4 +- .../bpf/core-builtin-fieldinfo-size-1.c | 8 +-- 19 files changed, 189 insertions(+), 91 deletions(-) diff --git a/gcc/config/bpf/bpf-protos.h b/gcc/config/bpf/bpf-protos.h index ac0c2f4038f..b4866d34209 100644 --- a/gcc/config/bpf/bpf-protos.h +++ b/gcc/config/bpf/bpf-protos.h @@ -30,7 +30,7 @@ extern void bpf_print_operand_address (FILE *, rtx); extern void bpf_expand_prologue (void); extern void bpf_expand_epilogue (void); extern void bpf_expand_cbranch (machine_mode, rtx *); -const char *bpf_add_core_reloc (rtx *operands, const char *templ); +const char *bpf_output_move (rtx *operands, const char *templ); class gimple_opt_pass; gimple_opt_pass *make_pass_lower_bpf_core (gcc::context *ctxt); diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index fb60770c170..d9141dd625a 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -584,6 +584,16 @@ bpf_legitimate_address_p (machine_mode mode, if (bpf_address_base_p (x0, strict) && GET_CODE (x1) == CONST_INT) return IN_RANGE (INTVAL (x1), -1 - 0x7fff, 0x7fff); + /* Check if any of the PLUS operation operands is a CORE unspec, and at + least the local value for the offset fits in the 16 bits available + in the encoding. */ + if (bpf_address_base_p (x1, strict) + && GET_CODE (x0) == UNSPEC && XINT (x0, 1) == UNSPEC_CORE_RELOC) + return IN_RANGE (INTVAL (XVECEXP (x0, 0, 0)), -1 - 0x7fff, 0x7fff); + if (bpf_address_base_p (x0, strict) + && GET_CODE (x1) == UNSPEC && XINT (x1, 1) == UNSPEC_CORE_RELOC) + return IN_RANGE (INTVAL (XVECEXP (x1, 0, 0)), -1 - 0x7fff, 0x7fff); + break; } default: @@ -615,6 +625,21 @@ bpf_rtx_costs (rtx x ATTRIBUTE_UNUSED, #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS bpf_rtx_costs +static int +bpf_insn_cost (rtx_insn *insn, bool speed ATTRIBUTE_UNUSED) +{ + rtx pat = PATTERN (insn); + if(GET_CODE (pat) == SET + && GET_CODE (XEXP (pat, 1)) == UNSPEC + && XINT (XEXP (pat, 1), 1) == UNSPEC_CORE_RELOC) + return COSTS_N_INSNS (100); + + return COSTS_N_INSNS (1); +} + +#undef TARGET_INSN_COST +#define TARGET_INSN_COST bpf_insn_cost + /* Return true if an argument at the position indicated by CUM should be passed by reference. If the hook returns true, a copy of that argument is made in memory and a pointer to the argument is passed @@ -771,6 +796,13 @@ bpf_output_call (rtx target) return ""; } +const char * +bpf_output_move (rtx *operands, const char *templ) +{ + bpf_output_core_reloc (operands, 2); + return templ; +} + /* Print register name according to assembly dialect. In normal syntax registers are printed like %rN where N is the register number. @@ -852,6 +884,12 @@ bpf_print_operand (FILE *file, rtx op, int code) gcc_unreachable (); } break; + case UNSPEC: + if (XINT (op, 1) == UNSPEC_CORE_RELOC) + bpf_print_operand (file, XVECEXP (op, 0, 0), code); + else + gcc_unreachable (); + break; default: output_addr_const (file, op); } @@ -880,13 +918,24 @@ bpf_print_operand_address (FILE *file, rtx addr) rtx op0 = XEXP (addr, 0); rtx op1 = XEXP (addr, 1); - if (GET_CODE (op0) == REG && GET_CODE (op1) == CONST_INT) + if (GET_CODE (op1) == REG) { + op0 = op1; + op1 = XEXP (addr, 0); + } + + if (GET_CODE (op0) == REG + && (GET_CODE (op1) == CONST_INT + || (GET_CODE (op1) == UNSPEC + && XINT (op1, 1) == UNSPEC_CORE_RELOC))) { if (asm_dialect == ASM_NORMAL) fprintf (file, "["); bpf_print_register (file, op0, 0); fprintf (file, "+"); - output_addr_const (file, op1); + if (GET_CODE (op1) == UNSPEC) + output_addr_const (file, XVECEXP (op1, 0, 0)); + else + output_addr_const (file, op1); if (asm_dialect == ASM_NORMAL) fprintf (file, "]"); } @@ -962,6 +1011,7 @@ bpf_init_builtins (void) build_function_type_list (integer_type_node,integer_type_node, 0)); DECL_PURE_P (bpf_builtins[BPF_BUILTIN_CORE_RELOC]) = 1; + TREE_NOTHROW (bpf_builtins[BPF_BUILTIN_CORE_RELOC]) = 1; bpf_init_core_builtins (); } diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index ea688aadf91..95859328d25 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -281,8 +281,8 @@ "" "@ {and\t%0,0xffff|%0 &= 0xffff} - {mov\t%0,%1\;and\t%0,0xffff|%0 = %1;%0 &= 0xffff} - {ldxh\t%0,%1|%0 = *(u16 *) (%1)}" + *return bpf_output_move (operands, \"{mov\t%0,%1\;and\t%0,0xffff|%0 = %1;%0 &= 0xffff}\"); + *return bpf_output_move (operands, \"{ldxh\t%0,%1|%0 = *(u16 *) (%1)}\");" [(set_attr "type" "alu,alu,ldx")]) (define_insn "zero_extendqidi2" @@ -291,8 +291,8 @@ "" "@ {and\t%0,0xff|%0 &= 0xff} - {mov\t%0,%1\;and\t%0,0xff|%0 = %1;%0 &= 0xff} - {ldxb\t%0,%1|%0 = *(u8 *) (%1)}" + *return bpf_output_move (operands, \"{mov\t%0,%1\;and\t%0,0xff|%0 = %1;%0 &= 0xff}\"); + *return bpf_output_move (operands, \"{ldxb\t%0,%1|%0 = *(u8 *) (%1)}\");" [(set_attr "type" "alu,alu,ldx")]) (define_insn "zero_extendsidi2" @@ -301,8 +301,8 @@ (match_operand:SI 1 "nonimmediate_operand" "r,q")))] "" "@ - * return bpf_has_alu32 ? \"{mov32\t%0,%1|%0 = %1}\" : \"{mov\t%0,%1\;and\t%0,0xffffffff|%0 = %1;%0 &= 0xffffffff}\"; - {ldxw\t%0,%1|%0 = *(u32 *) (%1)}" + *return bpf_output_move (operands, bpf_has_alu32 ? \"{mov32\t%0,%1|%0 = %1}\" : \"{mov\t%0,%1\;and\t%0,0xffffffff|%0 = %1;%0 &= 0xffffffff}\"); + *return bpf_output_move (operands, \"{ldxw\t%0,%1|%0 = *(u32 *) (%1)}\");" [(set_attr "type" "alu,ldx")]) ;;; Sign-extension @@ -328,8 +328,8 @@ (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "r,q")))] "bpf_has_smov" "@ - {movs\t%0,%1,32|%0 = (s32) %1} - {ldxsw\t%0,%1|%0 = *(s32 *) (%1)}" + *return bpf_output_move (operands, \"{movs\t%0,%1,32|%0 = (s32) %1}\"); + *return bpf_output_move (operands, \"{ldxsw\t%0,%1|%0 = *(s32 *) (%1)}\");" [(set_attr "type" "alu,ldx")]) (define_insn "extendhidi2" @@ -337,8 +337,8 @@ (sign_extend:DI (match_operand:HI 1 "nonimmediate_operand" "r,q")))] "bpf_has_smov" "@ - {movs\t%0,%1,16|%0 = (s16) %1} - {ldxsh\t%0,%1|%0 = *(s16 *) (%1)}" + *return bpf_output_move (operands, \"{movs\t%0,%1,16|%0 = (s16) %1}\"); + *return bpf_output_move (operands, \"{ldxsh\t%0,%1|%0 = *(s16 *) (%1)}\");" [(set_attr "type" "alu,ldx")]) (define_insn "extendqidi2" @@ -346,22 +346,22 @@ (sign_extend:DI (match_operand:QI 1 "nonimmediate_operand" "r,q")))] "bpf_has_smov" "@ - {movs\t%0,%1,8|%0 = (s8) %1} - {ldxsb\t%0,%1|%0 = *(s8 *) (%1)}" + *return bpf_output_move (operands, \"{movs\t%0,%1,8|%0 = (s8) %1}\"); + *return bpf_output_move (operands, \"{ldxsb\t%0,%1|%0 = *(s8 *) (%1)}\");" [(set_attr "type" "alu,ldx")]) (define_insn "extendhisi2" [(set (match_operand:SI 0 "register_operand" "=r") (sign_extend:SI (match_operand:HI 1 "register_operand" "r")))] "bpf_has_smov" - "{movs32\t%0,%1,16|%w0 = (s16) %w1}" + "*return bpf_output_move (operands, \"{movs32\t%0,%1,16|%w0 = (s16) %w1}\");" [(set_attr "type" "alu")]) (define_insn "extendqisi2" [(set (match_operand:SI 0 "register_operand" "=r") (sign_extend:SI (match_operand:QI 1 "register_operand" "r")))] "bpf_has_smov" - "{movs32\t%0,%1,8|%w0 = (s8) %w1}" + "*return bpf_output_move (operands, \"{movs32\t%0,%1,8|%w0 = (s8) %w1}\");" [(set_attr "type" "alu")]) ;;;; Data movement @@ -380,31 +380,17 @@ }") (define_insn "*mov" - [(set (match_operand:MM 0 "nonimmediate_operand" "=r, r,r,q,q") - (match_operand:MM 1 "mov_src_operand" " q,rI,B,r,I"))] + [(set (match_operand:MM 0 "nonimmediate_operand" "=r, r, r,q,q") + (match_operand:MM 1 "mov_src_operand" " q,rIc,BC,r,I"))] "" "@ - {ldx\t%0,%1|%0 = *( *) (%1)} - {mov\t%0,%1|%0 = %1} - {lddw\t%0,%1|%0 = %1 ll} - {stx\t%0,%1|*( *) (%0) = %1} - {st\t%0,%1|*( *) (%0) = %1}" + *return bpf_output_move (operands, \"{ldx\t%0,%1|%0 = *( *) (%1)}\"); + *return bpf_output_move (operands, \"{mov\t%0,%1|%0 = %1}\"); + *return bpf_output_move (operands, \"{lddw\t%0,%1|%0 = %1 ll}\"); + *return bpf_output_move (operands, \"{stx\t%0,%1|*( *) (%0) = %1}\"); + *return bpf_output_move (operands, \"{st\t%0,%1|*( *) (%0) = %1}\");" [(set_attr "type" "ldx,alu,alu,stx,st")]) -(define_insn "*mov_reloc_core" - [(set (match_operand:MM 0 "nonimmediate_operand" "=r,q,r") - (unspec:MM [ - (match_operand:MM 1 "immediate_operand" " I,I,B") - (match_operand:SI 2 "immediate_operand" " I,I,I") - ] UNSPEC_CORE_RELOC) - )] - "" - "@ - *return bpf_add_core_reloc (operands, \"{mov\t%0,%1|%0 = %1}\"); - *return bpf_add_core_reloc (operands, \"{st\t%0,%1|*( *) (%0) = %1}\"); - *return bpf_add_core_reloc (operands, \"{lddw\t%0,%1|%0 = %1 ll}\");" - [(set_attr "type" "alu,st,alu")]) - ;;;; Shifts (define_mode_iterator SIM [(SI "bpf_has_alu32") DI]) diff --git a/gcc/config/bpf/constraints.md b/gcc/config/bpf/constraints.md index 4b8d65883ee..dd04e67fa81 100644 --- a/gcc/config/bpf/constraints.md +++ b/gcc/config/bpf/constraints.md @@ -33,6 +33,26 @@ (define_register_constraint "t" "R0" "Register r0") +;; +;; BPF CO-RE immediate constraints. +;; This constraints are used to match with the immediate operand that is +;; represented with an UNSPEC_CORE_RELOC. This unspec is the result of using the +;; BPF CO-RE infrastructure. +;; It differentiates from a normal immediate constraints, as the instruction +;; will also emit a BTF based specific relocation, i.e. a CO-RE relocation. +;; + +(define_constraint "c" + "A 32-bit CO-RE signed immediate." + (and (match_code "unspec") + (match_test "XINT (op, 1) == UNSPEC_CORE_RELOC") + (match_test "IN_RANGE (XVECEXP (op, 0, 0), -1 - 0x7fffffff, 0x7fffffff)"))) + +(define_constraint "C" + "For 64-bit CO-RE signed immediate." + (and (match_code "unspec") + (match_test "XINT (op, 1) == UNSPEC_CORE_RELOC"))) + ;; ;; Memory constraints. ;; diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index 8333ad81d0e..e03e986e2c1 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -1561,6 +1561,7 @@ bpf_expand_core_builtin (tree exp, enum bpf_builtins code) return NULL_RTX; } + /* This function is called in the final assembly output for the unspec:UNSPEC_CORE_RELOC. It recovers the vec index kept as the third operand and collects the data from the vec. With that it calls the process @@ -1568,27 +1569,63 @@ bpf_expand_core_builtin (tree exp, enum bpf_builtins code) Also it creates a label pointing to the unspec instruction and uses it in the CO-RE relocation creation. */ -const char * -bpf_add_core_reloc (rtx *operands, const char *templ) +void +bpf_output_core_reloc (rtx *operands, int nr_ops) { - struct cr_builtins *data = get_builtin_data (INTVAL (operands[2])); - builtin_helpers helper; - helper = core_builtin_helpers[data->orig_builtin_code]; - - rtx_code_label * tmp_label = gen_label_rtx (); - output_asm_label (tmp_label); - assemble_name (asm_out_file, ":\n"); + /* Search for an UNSPEC_CORE_RELOC within the operands of the emitting + intructions. */ + rtx unspec_exp = NULL_RTX; + for (int i = 0; i < nr_ops; i++) + { + rtx op = operands[i]; - gcc_assert (helper.process != NULL); - struct cr_final reloc_data = helper.process (data); - make_core_relo (&reloc_data, tmp_label); + /* An immediate CO-RE reloc. */ + if (GET_CODE (op) == UNSPEC + && XINT (op, 1) == UNSPEC_CORE_RELOC) + unspec_exp = op; - /* Replace default value for later processing builtin types. - Example if the type id builtins. */ - if (data->rtx_default_value != NULL_RTX) - operands[1] = data->rtx_default_value; + /* In case of a MEM operation with an offset resolved in CO-RE. */ + if (GET_CODE (op) == MEM + && (op = XEXP (op, 0)) != NULL_RTX + && (GET_CODE (op) == PLUS)) + { + rtx x0 = XEXP (op, 0); + rtx x1 = XEXP (op, 1); + + if (GET_CODE (x0) == UNSPEC + && XINT (x0, 1) == UNSPEC_CORE_RELOC) + unspec_exp = x0; + if (GET_CODE (x1) == UNSPEC + && XINT (x1, 1) == UNSPEC_CORE_RELOC) + unspec_exp = x1; + } + if (unspec_exp != NULL_RTX) + break; + } - return templ; + if (unspec_exp != NULL_RTX) + { + int index = INTVAL (XVECEXP (unspec_exp, 0, 1)); + struct cr_builtins *data = get_builtin_data (index); + builtin_helpers helper; + helper = core_builtin_helpers[data->orig_builtin_code]; + + rtx_code_label * tmp_label = gen_label_rtx (); + output_asm_label (tmp_label); + assemble_name (asm_out_file, ":\n"); + + rtx orig_default_value = data->rtx_default_value; + + gcc_assert (helper.process != NULL); + struct cr_final reloc_data = helper.process (data); + make_core_relo (&reloc_data, tmp_label); + + /* Replace default value for later processing builtin types. + An example are the type id builtins. */ + if (data->rtx_default_value != NULL_RTX + && orig_default_value != data->rtx_default_value) + XVECEXP (unspec_exp, 0, 0) = data->rtx_default_value; + } } static tree diff --git a/gcc/config/bpf/core-builtins.h b/gcc/config/bpf/core-builtins.h index e56b55b94e0..ebe321b16fb 100644 --- a/gcc/config/bpf/core-builtins.h +++ b/gcc/config/bpf/core-builtins.h @@ -59,5 +59,7 @@ void bpf_init_core_builtins (void); rtx bpf_expand_core_builtin (tree exp, enum bpf_builtins code); tree bpf_resolve_overloaded_core_builtin (location_t loc, tree fndecl, void *arglist); +void +bpf_output_core_reloc (rtx *operands, int nr_ops); #endif diff --git a/gcc/config/bpf/predicates.md b/gcc/config/bpf/predicates.md index fa042585379..568156f56e3 100644 --- a/gcc/config/bpf/predicates.md +++ b/gcc/config/bpf/predicates.md @@ -27,6 +27,10 @@ (match_test "IN_RANGE (INTVAL (op), 0, 0xffffffff)")) (match_code "symbol_ref,label_ref,const"))) +(define_predicate "core_imm_operand" + (and (match_code "unspec") + (match_test "XINT (op, 1) == UNSPEC_CORE_RELOC"))) + (define_predicate "lddw_operand" (match_code "symbol_ref,label_ref,const,const_double,const_int")) @@ -57,7 +61,8 @@ (define_predicate "mov_src_operand" (ior (match_operand 0 "memory_operand") (match_operand 0 "reg_or_imm_operand") - (match_operand 0 "lddw_operand"))) + (match_operand 0 "lddw_operand") + (match_operand 0 "core_imm_operand"))) (define_predicate "register_compare_operator" (match_code "eq,ne,geu,gtu,ge,gt")) diff --git a/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c b/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c index a59c5bd37eb..6fdd14574ec 100644 --- a/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c +++ b/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c @@ -35,8 +35,6 @@ int bar_func (struct T *t) /* { dg-final { scan-assembler-times "label for function foo_func" 1 } } */ /* { dg-final { scan-assembler-times "label for function bar_func" 1 } } */ -/* { 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 "FuncInfo entry size" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c index 5f835487483..51e938c8aac 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-const-elimination.c @@ -25,5 +25,5 @@ unsigned int foo (struct T *t) return __builtin_preserve_field_info (t->s[0].a1, FIELD_BYTE_OFFSET) + 1; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],4" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],4" 1 } } */ /* { dg-final { scan-assembler-times "\[\t \]add32\[\t \]%r\[0-9\],1" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c index c55f21a9c11..96119daf7b2 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-existence-1.c @@ -24,7 +24,7 @@ unsigned int foo (struct S *s) return c + d + u + ar; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],1" 4 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],1" 4 } } */ /* { 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 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c index dabf73dd259..579bc769b82 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-be.c @@ -24,10 +24,10 @@ unsigned int foo (struct S *s) return x1 + x2 + x3 + x4; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],32" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],38" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],41" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],48" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],32" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],38" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],41" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],48" 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 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c index 99e3982d932..d48f01ae522 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-1-le.c @@ -24,10 +24,10 @@ unsigned int foo (struct S *s) return x1 + x2 + x3 + x4; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],58" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],55" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],48" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],32" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],58" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],55" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],48" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],32" 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 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c index 25be969e22b..653ddf65e56 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-lshift-2.c @@ -26,9 +26,9 @@ unsigned int foo (union U *u) return s0s + s1c + ll; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],48" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],56" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],0" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],48" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],56" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],0" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:0:0:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:0:1:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c index 8b1d8b012a2..a0ddda83a07 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c @@ -46,12 +46,12 @@ unsigned int foo (struct T *t) return s0a1 + s0a4 + s0x + s1a1 + s1a4 + s1x + c + d + e1 + e2 + f1; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],4" 2 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],8" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],12" 3 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],16" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],20" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],21" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],4" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],8" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],12" 3 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],16" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],20" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],21" 2 } } */ /* { dg-final { scan-assembler-times "ascii \"0:1:0:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:1:0:3.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c index d0c75d944cd..47767832272 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-1.c @@ -23,10 +23,10 @@ unsigned int foo (struct S *s) return x1 + x2 + x3 + x4; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],58" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],61" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],57" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],48" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],58" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],61" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],57" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],48" 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 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c index a71ddc17728..a13ff8e261e 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-rshift-2.c @@ -25,8 +25,8 @@ unsigned int foo (union U *u) return sx + sc + i; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],32" 2 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],56" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],32" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],56" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:1:0.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:1:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c index 3b2081e197c..442ed076aa9 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-1.c @@ -23,8 +23,8 @@ unsigned int foo (struct S *s) return d + u + ar; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],1" 2 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],0" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],1" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],0" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ /* { dg-final { scan-assembler-times "ascii \"0:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c index bf184299984..cdc4d4db35d 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-sign-2.c @@ -35,8 +35,8 @@ unsigned int foo (union U *u) return i + sig + un; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],1" 2 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],0" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],1" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],0" 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.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c index 8747bdeb9c3..74707f1cb7d 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-size-1.c @@ -29,10 +29,10 @@ unsigned int foo (union U *u) return ls + s + a2 + a3 + ca; } -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],24" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],20" 1 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],4" 2 } } */ -/* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],15" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],24" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],20" 1 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],4" 2 } } */ +/* { dg-final { scan-assembler-times "\[\t \]lddw\[\t \]%r\[0-9\],15" 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 } } */ From patchwork Thu Apr 11 11:11:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cupertino Miranda X-Patchwork-Id: 1922512 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=LaQtS6ha; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=xrElD49S; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VFcV01Vnwz1yYQ for ; Thu, 11 Apr 2024 21:12:08 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A61F93849ACA for ; Thu, 11 Apr 2024 11:12:04 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 1056F3858C52 for ; Thu, 11 Apr 2024 11:11:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1056F3858C52 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1056F3858C52 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833900; cv=pass; b=ILqs6hWOXBhm1WqkufoGhMx0r7c8z1e8vfDWHBv1JP7UykTRpiKbwdpuz8uBMz0Bt5uW1Ke2jj3MwpqgGfrj+G8C8QSym8i09iyJDP8lYDMdwgzm0b67pEU+u0JUBQgMOgI8NzINvUKCyxZ42gFzUBYIrd7YZiaT4kl3FvTYog4= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833900; c=relaxed/simple; bh=d9bsOFvazhdg0dgtngnVfJuUvIK4aHwQs/J+LZxdPrM=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=gxnWWfzIk1Oi3xSUyTazwXChrrsMZnlBziPxzmzeIHnLWnEmwpjEEeq9C1f1jYkSDUfeioWxcnzfd/kqIWon/7fhQoTaLJkRsEQvbQg7qqMWAtTngrY9GOHSF1VJ8aRSUTyRbR8RrvQXfJfMAw2AJ+oNi1X22XhKxv+wrsfqxAw= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43BAJAkY019837 for ; Thu, 11 Apr 2024 11:11:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=eYKa1wopoDr5FwoeXEz0Gsqz4uWzoF2zKYlFVkfh9QQ=; b=LaQtS6haUP36uBhhjNbbObGS+sW/TdHLgfNtcRA2Q3A+faZpeFJz3tnISRHI7+zkZ3Kl TM1Xd8JzfNbqewelyP3MFT6a6TbR+VxPy8t/8GEUlIsGqM5wlm7/gsqoYLdTi7B9hEjz rYVOfjd+dFaehMP+InZ3Him3y9UNOq+6pUkCoKb/3q+0JH9CljHxmHRkvRJTSZwy0g4t iZ96siiIwc8yQsRDHqb9Vl4LRTLH22L4IZ+Do8smd0qQQe7DdtDr4uHrdKt83flPDL4z uCBAiC/R9LSxQdVWABzXV4Qaa6km0doDgW+azeB9e+/DVUVXC3Mh+EFy42rAhQqrd7bp dw== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xax0usbk9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:37 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 43B9FPP4032369 for ; Thu, 11 Apr 2024 11:11:36 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2169.outbound.protection.outlook.com [104.47.58.169]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xavu9yr5a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GAAF2LR+/RGG5cemUUioVbJrIUr9Vutetf0LvWpNVxYB1SCupa0q+QwZKWcG3duM3FAX6GffZ24jzy8veYJMY1MXavi4qCfDASyNAOqjrIwGkrNaz6DZYpgHgUY4BM6qXMZKKPO+X6r6wlXmkDNOfbVFpZM3jW3wwmk98/mNbtBveCw/mY93lPDwY1fuTxqgu3bTeT0SGSH0B03h2K9RpztfFXuhfHlcyLK7amQB7OeXDRE+RZMqPhCB/7uHTn3qVlBceSWzkCj1Q8lIorXvxDYaxjSgpFmVPYi51yJ0r6jVgc6RaOQDGr7aSWQQyuUwZbHYxcQFzoO3R9Z5i6Qqmg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=eYKa1wopoDr5FwoeXEz0Gsqz4uWzoF2zKYlFVkfh9QQ=; b=Wb10M0XsuSVSkB1dLqlTucs3dkpG1VJ//D8p7v4S5G8h6h9K8knZ5FrwFi9N9eD3pks/HHeQUvVZ1xb5uv+j5UaHkSawk2HhChLx4FhQWfZeBswsg7QhseYkDdlv229YHdY305/K7H6I3f/+YVc8zLP+OkIuecUhNvlzxiaQWIi8+8Df1t3cHJ+ombmKlZhcpbCOGVPBF334XxEcdcxOWzLpzO50Iwt75zjCbtHbpLkAf7CiSq43JuDGXo6vRJZCTO3HeBlHrDbMeR+fsd7YzTkn0VPWxIBY+GdQGBNOVNmcrECHmpOe+YchYLtomOKjebAOZDRVADfTvsGjKwC+4w== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eYKa1wopoDr5FwoeXEz0Gsqz4uWzoF2zKYlFVkfh9QQ=; b=xrElD49SpwEUBvmSfsbM4UKGmnoZ5l5Gyahkyq2OF+7l5Y2tr1H+5eiNa46sjY8wnOTT8Oxm8U/AgxgL36DlXXtj/Y2+wJU6i5kfzprG52ORR5anvXUaAautcb6sV3EhFhA92AcFHrn4PQ6iQDyenYfz0RBrQkMLoM7xyw8Ufrw= Received: from MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) by PH0PR10MB5644.namprd10.prod.outlook.com (2603:10b6:510:fb::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Thu, 11 Apr 2024 11:11:33 +0000 Received: from MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c]) by MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c%4]) with mapi id 15.20.7409.053; Thu, 11 Apr 2024 11:11:33 +0000 From: Cupertino Miranda To: gcc-patches@gcc.gnu.org Cc: jose.marchesi@oracle.com, david.faust@oracle.com, elena.zannoni@oracle.com, Cupertino Miranda Subject: [PATCH 2/3] bpf: remove huge memory waste with string allocation. Date: Thu, 11 Apr 2024 12:11:17 +0100 Message-Id: <20240411111118.215612-2-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240411111118.215612-1-cupertino.miranda@oracle.com> References: <20240411111118.215612-1-cupertino.miranda@oracle.com> X-ClientProxiedBy: AS4P195CA0005.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:5e2::14) To MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB4382:EE_|PH0PR10MB5644:EE_ X-MS-Office365-Filtering-Correlation-Id: e1daa3db-9bdb-4676-92a5-08dc5a182507 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9eSXv+W1xv1/sf49MNTET3gqOZKh9CXBG7s+1IM/Qbs95wO2V1WRIgRplWedPTCkWijuguNPet2elKZiUohmRTdSceKrp059GhuueWGkOb213FvTSVoV2dQqBEjD1vcg9vFNx8aG5RClE/aEMyqnCD4ORSbyrN0K9zFAA6Hv26QU+UcBJBO3+tCc6oXoYtuyj4bxIAIZC9SSHd1ZrIsoIIAEoiwRYybtVG/FwD0nAPAtPbRj5Cjatt3S+PnISM02ESAzArgMGypjKjNW0xTc21rbxCw2XlqxFJoit55IOf/Trkd9ooXCiF7mn8D5kZxbha/4nhg0Z9gSFfmiSq+Pm8ymcOY3u16md3V7gjQIhCfN6Bzal5xC6uKeo7IyUuyG7J1Oy2QtEfEj/MOqYLymgok7wabDgrQhY0A9fv2sClEy743uqooWdn6xbP+vdDPvpm9hr5DkfvycLFHLddgQ9K1vnLf28uhKyzqHi2Zvj5iTOD2pHP2DAGwa4wqEmSqobg8qScfaK04hR0v/99p2j40AfOFOVSTgLGZ+p827PE+BEMYQXN347yu9lNUbmzW2U+jzENtBcaZ8tXuwKdCsiG9zKwHwl5ix0AB3zzzgLeQkmhwbuuyKuH2fh5xlNU4RbFnLd4omcucxkFIulca/FGiURf6FakJ98TrPQ9bcdhQ= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB4382.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(366007)(1800799015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oSsco1Kdx0KBZg5+QauNzbMx5Wf0PpQBhcJ4NXvjXP81ed0UNft4Q8upi6uon4S6QmtuNicj/56carJYhoM40PXDICo4rjMoAGCZrrvGKQiFHq69qD6jdvvcO6+/gou4sNCCfFAIeoC/+//thzyLeKUyL64v9k4pjneJNyHnhslLvQOK/jS8xX6XJsn8bZO8BVyXgqbGnBQkwIzKjGwdtf/j4PDPBOVdag94Lg9qrtxb0WKbMsrzxC24rmSEbw4NbvTsGV1+njzvCsFCEicIbWzDVCDXKk3z3NaLHmBvmAA4Buzqo56EDu1bJi0WwEGihlt+uS5sU5IADAy5ECbOh3APfzsKkT1DbeTGGrkd2/u3jDD6ofYRmSZBhdvQ15marSYYEQBoOf1Nl7ijeIL7Qr09C2d3kG3/Enn1Ur3vkPlv/D1peKvPfHLIQkrcHV7dc5INHQ4KUeS9e0Rc5o0UmrtoNb3dVNc6fXCMKOR6iyRKWiN13WrmHWbUNiIpVz/dki6pjL/ZbeLY0hyV/RTqZYAE9JQwIom1vvYma2oUZUlRRSs5fzWezz/8coCd00v1vLE3cUEkr5UbhQ/jCxCDZx/TXx4pmcnOiWcB6GOBjabns8Q0pnsPtfqm46hR5MOSdgy1LxKaK1n4Kjdy0PRRlVbaTyhxCa2aBhf5C0tZVfxcqAXdpT1r26irMCQrqgO2yzTWS2kCyslm5mNfotGkeV+7SewisLxvP4cpnoOaUajI7EstYF2Fk7ZQfAJks5AD2zxh6ii6/fD7Jz9NSaJg2uASYwA0SVP4oQYJqIBKVSUYN3tYcCejTOPQBOX8UxBp/ptUSNA+a9p9eP5itsYN4CJ7HV+jsVkC3w8kjLaZ3T24V4QO6Qv31xChHP9npy6hhNXSxeKOpEopW9x2NREgSinuiY/oiJ5KIYN23YBNMYnSJA1SnSiY+j9+6K5yeVmBeM92Wq7mz4iuwS4V/Ztp3rZM7vtRtmV7IKXYAafOagatUV1AAzLmsPfmsd6xjTkGQCHsC0uLzXxXbSsecd5jx/HAuE7Cr8CKjKwlvs8WYj4VLYysssD9dxQiht0XsR42jF0S8NzA2k1FH4rbz7jffuPxsrh+96gddZODjH5/8GAuGXIFk75rae4NRfl7yGc72SIdsDiy8rNDQuLs2dtmvb1duC2K9Qr3FeIIgKKFoljqDgPTVYfJeRzxZMV/aY8HH388ZIZAulUhZLqouqIFpMDuG6rEBO1ANqe90MweHan5CzSP86oMZooOzUrHRUg68G5/0dWE6FWnRD90+poCxtL6krWE+E7lFAWXVqJZ3SmcUQ5M76dLDB+uE1qagAQ4XM7Lkciy1oYAPRSpR7c/ekJR4vfhN1H9hVXlbCWhLKm+UbvKscjmTLs525ACrFHKDYfDBGEwC/uXIGSwNqhQBOgwhD8j/zYnPm31ysIZAHAvk0yu4D888oh91N0/ax1OCPMMViBamPjemJLjXXQFp1Di/0GX2SoxlOjwqTisdyFb6MaOloY+XNYqT8yAYx4m5F52mNExX1sCUQc4r38+m36QGaNOAlII1/FPEZ+xBDSobaaFM5s08C2eK1L/cRTsQ3ApHKR6TeaK9Wi9xV3ktoCwOrrXZ+PB/LCw4dGnULw= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0/N+yi4UM3LgHy7o3WU0KeCYU6jL8ZdNd4MjqSd38oYjejg8++D78dNCGcsEocWtI1VKOD7u9B2rRbaE9PBTPAep0MejqOHAb7wXtjqD2/5K/3X2T9ycqtkfiblBJSaMw5InQHVtzCKZGQUAgWLUz8OwzpkV+jKg0qjWY9wtaOjnPlwT5AbKOQLDlon/oIas/uzmEWAJG7jjPjev9lfLICdpjP6rRepzorssXytQ6k9eDFzRRqi+4DIl1a4oEBwS7hPHzfARDBfuU4v6DfpaKXb/ewyyYKfimrqucJGj9CPXYYtuPy6Ns8wAvnCJNTsTslYDGhbMvCRTZXaB4Cv44fw7/JSZBI3VcYYbJi1pT9NOig4GVwKi+aQ/JmIaGV7zKT9SK+R2ezPedQ0RKX6SqwoRTffkPixc/rxTdy0DBMTf/fLPcWA8tk8K+Vdkc6tK17KbiXyA9ZQLZpA2OZacYMsmpdF/N6FnjRxl9AT6kzYmwet88W8g3VF9CmL0ImbtPQ041JkTBuxVUcLpsvVJGUnmX/7yid0usOv0zj+YBAuL+iRXXy+qVvecoxTFY9ebPxz8R4n6EEB4wWgU0rU+Ok1Ye7LlQkuaK6ZAVngnxlg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e1daa3db-9bdb-4676-92a5-08dc5a182507 X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4382.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2024 11:11:33.5157 (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: M9Epm8wJs0EjV8FbyVdUJ9tl/MZo5ZcC/QAwtLn/3O2V7T2qUCE4QQM9WZYlgZsHcVSlt4ja81N5isFLWe/hfjngFsngqJGvxtyx0ilnbXY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB5644 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-11_04,2024-04-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 bulkscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404110080 X-Proofpoint-GUID: LCbgvi20cy-dFGLwvC65p6sd9JMvEXIn X-Proofpoint-ORIG-GUID: LCbgvi20cy-dFGLwvC65p6sd9JMvEXIn X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Code was allocating way too much space for the string. gcc/ChangeLog: * config/bpf/core-builtins.cc (process_enum_value): Corrected string allocation. --- gcc/config/bpf/core-builtins.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index e03e986e2c1..ead1777d465 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -872,10 +872,11 @@ process_enum_value (struct cr_builtins *data) { if (TREE_VALUE (l) == expr) { - char *tmp = (char *) ggc_alloc_atomic ((index / 10) + 1); + /* Array size is 21 = ceil(log_10(2^64)) + 1 to hold string + representations of 64 bit integers. */ + char tmp[21]; sprintf (tmp, "%d", index); - ret.str = (const char *) tmp; - + ret.str = CONST_CAST (char *, ggc_strdup(tmp)); break; } index++; From patchwork Thu Apr 11 11:11:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cupertino Miranda X-Patchwork-Id: 1922513 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2023-11-20 header.b=YZjKuqBR; dkim=pass (1024-bit key; unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=z+Oymgzc; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VFcV90HnSz1yYM for ; Thu, 11 Apr 2024 21:12:17 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 31F3B3849AE7 for ; Thu, 11 Apr 2024 11:12:15 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 4840C384AB6D for ; Thu, 11 Apr 2024 11:11:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4840C384AB6D Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4840C384AB6D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833909; cv=pass; b=C5R8Rje8ZUR5inEerP6M/jxwRQ/1R87WeJ3nmCmzyp9W6I8Db9XCLIDUZdAuaVFDxJvIn9+QOS4rrfYQ4lmbLUM7idcuY2cGP+J/C+PICqeISWXbdSdcDGmqcCBQVQNhLum7YD+bUbJvt1MFIiduMJeRirqkvZ+GgETGFfySqWk= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1712833909; c=relaxed/simple; bh=Lzmt8NWA1C5/nXL/Jz1E4Uf7DU4l+mLSQMvviw5qvg0=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=USAPRx9c5jdwXD6k4HNV9po0aaWJBw0QqRch/X59riJeIUGo3dS9qNTuiwtXB/WF1DUOXecNDFmrz1o6OEU3rFzS+TbZWLj+OZy0VcwwT696Vad+RsoVhkHCbW3ZS6+uXN67WT4xK+fTiU9KNoLdodZ4cLfLS81FWDTYIOYGBsU= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 43BAU1v7012514 for ; Thu, 11 Apr 2024 11:11:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=D9BnzLYQbPi4VrfcDNh9ASnOmKf9o0iBNce7Yxj71rc=; b=YZjKuqBR9Tt9W7cpv0dIVJx1yGvjRDLDgctV902M15wa+DPQvnkGX7XeXho2l/zKqfag OO6W4LBz79m+KBSL1q8GqlubI4ZFE9V2WzRaD0ZMy/BzfCCwlm0MOlw+xijTko5dkqSd 2R7BxeHmiUnGG+7i4/HHorVwK/j7bb6NlpecFNMFFM06rR1XyNNJuMxSuNhtYZGS722p bnLhdXn048rwvcg74eYBrkDMriO7pnMfzlNLmS/UqXYc1qUf+M+3vcD3/TAr64gtCrpm uBALgBkgc4ITrHFVcLdoDG6nsKk86JFuoxNXuk2Ow3+oOOhKPUIR+3VzJzPmva5HRgmB ew== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3xax9b978y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:44 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 43BA6MAS032368 for ; Thu, 11 Apr 2024 11:11:43 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2170.outbound.protection.outlook.com [104.47.58.170]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3xavu9yr7d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Apr 2024 11:11:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IV2Cg/eafIBG8kM3R+TvFQcbelpCqbsW1JGaYngZxUjawfo2D3trd3+i+zUnXqtCRVAqeNDIACNBWxxikMNQGqgPM3NMlU4puzX44dR5VCT/O8lThIy1JNBDSaac0F8LYSAqxeuzKCh8lNgzENOW0jyqUTsmmYSGrzevjMEgdq97BPOcGtT8iRvy8oICOI8Xduj9SoyHbx8mBT+27uE1E0hYiCCDGjDiBtADxEjzrXsuhqFReinaB5aMWOQ2Bed2J7qkVPkx/WsKY39g0Q1CEDH4M4b38ncuxx7g7/Kutr6eilgEl3Fi3m5NGd6XCTyO4B5/OjWJwxcWn7zU4gzBog== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=D9BnzLYQbPi4VrfcDNh9ASnOmKf9o0iBNce7Yxj71rc=; b=QOlUZiHHX6+u86wkNZ2vYfYk6AWrTHGsdBnnFndbVfzXSMSGu7r2To2lIx0LvW2tLYpmexWj0ZYzBMGVQNe2+IYXSWzzlMB3DB/Vs/I7xOlFqs84cQe3gB3busRiS898P3IvAC4wVYwDc6QpFP3+wC5BevJEWIw6v8N61EenBvBXtmOZpVOolSM/X4hAypTKanMzLz/zVEvSw9nU4/W7vuyBtLZlOqZkMCKd/oDI9RXAS7T9fuig+6mD28hikw+HOtnaOuDMeNyCTu+Rkq53uemyTVxlxFE14aS0gZPNDaep7FEbx26WwrCOhp/xZYHmQZCrspb9N15OPSQ6QG1XKg== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D9BnzLYQbPi4VrfcDNh9ASnOmKf9o0iBNce7Yxj71rc=; b=z+OymgzcT5y7PsuPwAal6umCUC+aTP9bWMrhzlkFbvHlQXnGuC/To3TcZyxFWT6MFBuk2jZ0crwWlOzvakD664K7izGBQG0g6GYV8hJrhu7zchQch/rN6SdcBwtgLWVPShpS8h1fp2ErFB7Er9B+NsUj9Tu67/suKZ3NP+IpoFg= Received: from MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) by CH3PR10MB7305.namprd10.prod.outlook.com (2603:10b6:610:12e::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.55; Thu, 11 Apr 2024 11:11:39 +0000 Received: from MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c]) by MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::1e11:7917:d2c:e44c%4]) with mapi id 15.20.7409.053; Thu, 11 Apr 2024 11:11:39 +0000 From: Cupertino Miranda To: gcc-patches@gcc.gnu.org Cc: jose.marchesi@oracle.com, david.faust@oracle.com, elena.zannoni@oracle.com, Cupertino Miranda Subject: [PATCH 3/3] bpf: add line_info support to BTF.ext section. Date: Thu, 11 Apr 2024 12:11:18 +0100 Message-Id: <20240411111118.215612-3-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240411111118.215612-1-cupertino.miranda@oracle.com> References: <20240411111118.215612-1-cupertino.miranda@oracle.com> X-ClientProxiedBy: AM9P250CA0022.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:21c::27) To MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB4382:EE_|CH3PR10MB7305:EE_ X-MS-Office365-Filtering-Correlation-Id: f95960bf-d08d-4b5f-b138-08dc5a1828d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Xa7Z4i4tIFNb0NYqTY+Ad87e2fCNkWfCPKIVkwh1FwbIUF4QRnuEFNSJpLig3s6gG48jJWU5kzY8WBiuuvc7lAiXe5+C0Fa3k5l9AE3R7GZpcik7Rxn5AcgN59Awj29DgCc9JKxe34cqbJ5ihmI/Oq6nMfUwrX0rlUVf9z1Nd2rOW9aokKI2tYmWk76kJdT0VHDPTP7n9yQrNb3iSlBmwMtVP+DJURN+Lhu2+oWeUeO5N5QkzYt/WXjXHLZOoo1OK6bIs5DIjXZ3zBjS0dqptzq53OpWzqukp4g4iqxohPWWTTOyN/YSWF8yieIIYIwKbfenmjKYuCehVSPJ1ilGIEjfIDh+zA+Y5hCgM9hUU0DKjBVm8GdmG3d1x4I853E6U/MTzuJr+sX2klI42t/lUvgzljuMGn8hVVKzIpR7bRLGWTkbnktKhP2nkGYfHylyqf3V2LyKlXI19Q0Gtyc8GX7vDQwkwn8PuKZWG2M8PFBGF1vVJyI/MJ+XWAoKVNIcUQ84BIcZr4y3moI3YIqxBp1uEvUQcvnV48XtH8pjRfaRvWjXe39ib92oyBxaZ+Ga3h/zIQGcyKNqy/x7lFhAkWge8njTyovVendI7/e7zUd15d+iJBfwg6bADurwOd65bfir75GHsSjUncZaFshU9o8EyEjTVn8QJE/tHW8CPKM= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB4382.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(1800799015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: J4mDVP3EB34CIub03gwsp2Ia3wDMB9NLnkEq7vPT2/jt21JMZt9jNnKTxA6ehSsWGA5ximtgfyJWM59H/V1x27pRzCDMTK76t4J6ZWYhN7rnmrDahylFPiNWKtv5ywB/qM87W4n8vHMxIhzaI9jamNB53rU6JeMU5OfDWBFw1akwncSCEdFc3gZcaywntn9aqf1ivFUsUe2/Ce+Rp97GeGHqaiZJ6V6XcksEBSrLHCBQokwfT3Ij2vMwnTkB5c+Wh6iCsFkV0vpXy5F4cIJlYR9CLJSbeQ9cxVSYkyMzXh1DIKoj91mfY83+VbFlin8Rw5zHFr6/1zQQ5k/vnJ+G4Gk2FocouNc62PbDYMWYqlB1NtMV9HQS3T7bbqjiCAosa5UIBIikPjD8oZmE/5wM1Gqll0wwp8DjcqepWcFPMEKG3R6EWPkuiWW9lXoD7Rc/5SmoSLt8Ia/GgoG65iFe/2NiLGaFiX6OrQPQBgkoIW+uqT414c8scOT8LXrJeKHrTNrIZpSzXHl0ksM6hv1O75srlHChLrlfPkOXABpV6G64n1XKbBQttzqWILiAh6uwHdUPyPoDp74En2NeLukWVPveaiddoT/VXY1Yp9GF1kKWvBAV+Arc1xbnIwxqM3OYi9jAl52HovX6svZy19CBjmyNzrXuHxtrqFQ1ewNywPOdHi6RwsYpvu+j/TZzyjgDeKkRTVVnuuWvZNRCnq3xGFRbAvhk1iRi4qH1kUc1QBEg8FCHRkxUNfsRv14q4r013ClT6AvPl8RSdwfblFA+ObsIcaxFyRSphKaYcG2uzIGJVG1juK1sjjua2xvBACijOiIMVhHtS9B3DyHdu2YL3zkMjouwWhciwBpfjJBMXNelLnls1r+8nxQwGu2RhxMXIX91n8NOXUiGKkr0IagrNsop98Y/1qk0v5V6um0bB+KaZCOXOR3XSJPBDKMzsoEx7AOEcT2kSwRbeSYqBppXGYpSpHDJLMO9HIb13J7pBjMhZJ9q4XWtjCbxVye6JsZM3HXE0d5dHDTpnOAk2UDBIcZLKPPZZP+0py/6KgOLgvJcPYm2VpQWnlcgc3H65OUtql6ht0sgjCuJV8C8Omr4+Jzj48F89XZQ7WQAu6wPzHy2lUnX1Ug6sxvXAmod5YKjXCcKlnlpeOS3hc9KpQVjp0Ii3/DWzrovgiiLUv03ig3TSsHPx/OTgH4uU1KFdy4G7l/HcKtwjboW5qowHJPnksA6ajltMCJ0XEV8orY3sZpbleqHgdItNFrhYtYSWZpgacFhPHjhzzv4zezgoUNpwnYQwwPJlEsm2Z8ekQ9dDeiEHCZZS3oEPe22CVqgPmIm5swF7yY1nj8+Fs3AevgFUpzdwFysEqQl71GW7XgBraa7Nn4Hxoep8OZL3+WkSl9Rv5dT6qb/00c1Qcv+yjIUBos5+TyAk/68Y/T2/LhhW75A4wOv5Tzc5SAVdXTtOYEprmS6IgDSspnb+/aQRYsxwMUl6IZl+VRIvLEFsh24vxHY7zobxQ3sew0k4ioH/MB1LwMmxtvMY9xqhrxNizxrI7CgnP/YCttxrk2vHW9MfdGuUqJdVIZlTYZ6xMvF/McBzR4flyj/LGmw2NV0t7Rw0wG5lR4sOq4ovjmfcncQfm8= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: gnfTj+msekw46IfVC3MFkZFtuEG2uj+0hltuDguC3waj6ck063e8SG13tY9p0mj/dHq/HimJCU768ufwJn9ndCUFfoD6lG8wxzl9WeiyMh0Muub9fJrq7Rr4GfqGflxP9ndVTwPvAQuExOUg/Ic4ovRlK4lmqk+UxFnYntqdcJCJnKtp0aROKlBZwLHy390gURs7BF9E+S53yCNTOnV8wkqbNSpWBqNo+CwlzI1CdQ2PRCtYKImjxQnFId1Fn+MM8EIkWIoRyW6uydigfcCWD3k4cwDLV/MFPFyAn3FNKXqZvTDYfwcrA5lrNHjkBNGnFyptOBnFeejcRloEQjd8T8BYcocr6yGeeQ9MH1fwQ995my2Xm8DLHFQgeb9acCtQvywFIRp/AsZQR5+mW14Va8L/0kkOvHlQP6EPjpkqP0Q/7CkPOb3xB6IO6NwXxt4wgpm/0V5uu+0RQwoNvCSj0SdSO3S9EaeYWtFYBlvBrq33zX3LzsieAUmnH/hER6oCwepxIbcESADKm8zpeSWZmadp8t2K4KMQFFn6EtGcuZqM52R6y8c9p8Ysy1xmgOhdT/7LRpSRVPK37Xhl8jCUh/ue2Xr1pgWC7qImEClI2g4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f95960bf-d08d-4b5f-b138-08dc5a1828d8 X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4382.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2024 11:11:39.2834 (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: qEM53h08psNUYh5GVZaUOjxPo02uUyVRYwiZd1u/GbHVIJEu3K2kzHCfB0cAW9vaJJuLNlfGxvMuR2Pi3z8DzGp5/dEXjR+1NsfToFyknzc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7305 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-04-11_04,2024-04-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 bulkscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2404010000 definitions=main-2404110080 X-Proofpoint-GUID: cgxgkpJ2KZyJaHP0zoGNNILU7w8v0vWu X-Proofpoint-ORIG-GUID: cgxgkpJ2KZyJaHP0zoGNNILU7w8v0vWu X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org This patch adds line_info debug information support to .BTF.ext sections. Line info information is used by the BPF verifier to improve error reporting and give more precise source core referenced errors. gcc/Changelog: * config/bpf/bpf-protos.h (bpf_output_call): Change prototype. * config/bpf/bpf.cc (bpf_output_call): Change to adapt operands and return the instruction template instead of emmidiatelly emit asm and not allow proper final expected execution flow. (bpf_output_line_info): Add function to introduce line info entries in respective structures (bpf_asm_out_unwind_emit): Add function as hook to TARGET_ASM_UNWIND_EMIT. This hook is called before any instruction is emitted. * config/bpf/bpf.md: Change calls to bpf_output_call. * config/bpf/btfext-out.cc (struct btf_ext_lineinfo): Add fields to struct. (bpf_create_lineinfo, btf_add_line_info_for): Add support function to insert line_info data in respective structures. (output_btfext_line_info): Function to emit line_info data in .BTF.ext section. (btf_ext_output): Call output_btfext_line_info. * config/bpf/btfext-out.h: Add prototype for btf_add_line_info_for. --- gcc/config/bpf/bpf-protos.h | 2 +- gcc/config/bpf/bpf.cc | 103 ++++++++++++++--- gcc/config/bpf/bpf.md | 4 +- gcc/config/bpf/btfext-out.cc | 108 +++++++++++++++++- gcc/config/bpf/btfext-out.h | 4 + .../gcc.target/bpf/btfext-funcinfo.c | 3 +- 6 files changed, 203 insertions(+), 21 deletions(-) diff --git a/gcc/config/bpf/bpf-protos.h b/gcc/config/bpf/bpf-protos.h index b4866d34209..ddaca50af69 100644 --- a/gcc/config/bpf/bpf-protos.h +++ b/gcc/config/bpf/bpf-protos.h @@ -23,7 +23,7 @@ along with GCC; see the file COPYING3. If not see /* Routines implemented in bpf.cc. */ extern HOST_WIDE_INT bpf_initial_elimination_offset (int, int); -extern const char *bpf_output_call (rtx); +extern const char *bpf_output_call (const char *templ, rtx *, int target_index); extern void bpf_target_macros (cpp_reader *); extern void bpf_print_operand (FILE *, rtx, int); extern void bpf_print_operand_address (FILE *, rtx); diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index d9141dd625a..f1a8eb8d62c 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -754,14 +754,12 @@ bpf_output_destructor (rtx symbol, int priority ATTRIBUTE_UNUSED) bpf.md. */ const char * -bpf_output_call (rtx target) +bpf_output_call (const char *templ, rtx *operands, int target_index) { - rtx xops[1]; - + rtx target = operands[target_index]; switch (GET_CODE (target)) { case CONST_INT: - output_asm_insn ("call\t%0", &target); break; case SYMBOL_REF: { @@ -774,26 +772,20 @@ bpf_output_call (rtx target) { tree attr_args = TREE_VALUE (attr); - xops[0] = GEN_INT (TREE_INT_CST_LOW (TREE_VALUE (attr_args))); - output_asm_insn ("call\t%0", xops); - } - else - output_asm_insn ("call\t%0", &target); + operands[target_index] = GEN_INT (TREE_INT_CST_LOW (TREE_VALUE (attr_args))); + } break; } default: - if (TARGET_XBPF) - output_asm_insn ("call\t%0", &target); - else + if (!TARGET_XBPF) { error ("indirect call in function, which are not supported by eBPF"); - output_asm_insn ("call 0", NULL); + operands[target_index] = GEN_INT (0); } break; } - - return ""; + return templ; } const char * @@ -1144,6 +1136,87 @@ bpf_debug_unwind_info () #undef TARGET_DEBUG_UNWIND_INFO #define TARGET_DEBUG_UNWIND_INFO bpf_debug_unwind_info +/* Create a BTF.ext line_info entry. */ + +static void +bpf_output_line_info (FILE *asm_out_file, rtx_insn *insn) +{ + static unsigned int line_info_label = 1; + static tree cfun_decl = NULL_TREE; + static bool func_start_added = false; + const char *label = NULL; + unsigned int loc = 0; + const char *filename = NULL; + unsigned int line = 0; + unsigned int column = 0; + + if(!btf_debuginfo_p ()) + return; + + gcc_assert (insn != NULL_RTX); + + if (current_function_decl != cfun_decl + && GET_CODE (insn) == NOTE) + { + label = current_function_func_begin_label; + loc = DECL_SOURCE_LOCATION (current_function_decl); + filename = LOCATION_FILE (loc); + line = LOCATION_LINE (loc); + column = LOCATION_COLUMN (loc); + func_start_added = true; + } + else + { + if (GET_CODE (insn) == NOTE) + return; + + /* Already added a label for this location. This might not be fully + acurate but it is better then adding 2 entries on the same location, + which is imcompatible with the verifier expectations. */ + if (func_start_added == true) + { + func_start_added = false; + return; + } + + loc = INSN_LOCATION (insn); + filename = LOCATION_FILE (loc); + line = LOCATION_LINE (loc); + column = LOCATION_COLUMN (loc); + + if (filename == NULL || line == 0) + return; + + char tmp_label[25]; + sprintf(tmp_label, "LI%u", line_info_label); + ASM_OUTPUT_LABEL (asm_out_file, tmp_label); + line_info_label += 1; + label = CONST_CAST (char *, ggc_strdup (tmp_label)); + } + + cfun_decl = current_function_decl; + + if (filename != NULL && line != 0) + btf_add_line_info_for (label, filename, line, column); +} + + +/* This hook is defined as a way for BPF target to create a label before each + * emitted instruction and emit line_info information. This data is later output + * in .BTF.ext section. + * This approach expects TARGET_EMIT_BEFORE_INSN to be returing TRUE as + * this function needs to be called before the instruction is emitted. Current + * default behaviour returns TRUE and the hook is left undefined. */ + +static void +bpf_asm_out_unwind_emit (FILE *asm_out_file, rtx_insn *insn) +{ + bpf_output_line_info (asm_out_file, insn); +} + +#undef TARGET_ASM_UNWIND_EMIT +#define TARGET_ASM_UNWIND_EMIT bpf_asm_out_unwind_emit + /* Output assembly directives to assemble data of various sized and alignments. */ diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index 95859328d25..3fdf81b86a6 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -546,7 +546,7 @@ ;; operands[2] is next_arg_register ;; operands[3] is struct_value_size_rtx. "" - { return bpf_output_call (operands[0]); } + { return bpf_output_call ("call\t%0", operands, 0); } [(set_attr "type" "jmp")]) (define_expand "call_value" @@ -569,7 +569,7 @@ ;; operands[3] is next_arg_register ;; operands[4] is struct_value_size_rtx. "" - { return bpf_output_call (operands[1]); } + { return bpf_output_call ("call\t%1", operands, 1); } [(set_attr "type" "jmp")]) (define_insn "sibcall" diff --git a/gcc/config/bpf/btfext-out.cc b/gcc/config/bpf/btfext-out.cc index ff1fd0739f1..42ec48e394e 100644 --- a/gcc/config/bpf/btfext-out.cc +++ b/gcc/config/bpf/btfext-out.cc @@ -32,6 +32,7 @@ #include "rtl.h" #include "tree-pretty-print.h" #include "cgraph.h" +#include "toplev.h" /* get_src_pwd */ #include "btfext-out.h" @@ -124,7 +125,8 @@ struct GTY ((chain_next ("%h.next"))) btf_ext_funcinfo /* A lineinfo record, in the .BTF.ext lineinfo section. */ struct GTY ((chain_next ("%h.next"))) btf_ext_lineinfo { - uint32_t insn_off; /* Offset of the instruction. */ + const char *insn_label; /* Instruction label. */ + const char *file_name; /* Source-code file name. */ uint32_t file_name_off; /* Offset of file name in BTF string table. */ uint32_t line_off; /* Offset of source line in BTF string table. */ uint32_t line_col; /* Line number (bits 31-11) and column (11-0). */ @@ -235,6 +237,26 @@ bpf_create_or_find_funcinfo (const char *fnname, const char *sec_name, return *head; } +/* Function to create a lineinfo node in info. */ + +static struct btf_ext_lineinfo * +bpf_create_lineinfo (const char *sec_name, btf_ext_info_sec **in_sec = NULL) +{ + struct btf_ext_info_sec *sec_elem = + btfext_info_sec_find_or_add (sec_name, true); + + if (in_sec != NULL) + *in_sec = sec_elem; + + struct btf_ext_lineinfo **head = + SEARCH_NODE_AND_RETURN(struct btf_ext_lineinfo, + sec_elem->line_info.head, + false); + *head = ggc_cleared_alloc (); + + return *head; +} + /* Function to create a core_reloc node in info. */ static struct btf_ext_core_reloc * @@ -429,6 +451,47 @@ btf_validate_funcinfo (btf_ext_info_sec *sec) } } +struct btf_ext_lineinfo * +btf_add_line_info_for (const char *label, const char *filename, + unsigned int line, unsigned int column) +{ + const char *sec_name = decl_section_name (current_function_decl); + + if (sec_name == NULL) + sec_name = ".text"; + + struct btf_ext_info_sec *sec = NULL; + struct btf_ext_lineinfo *info = + bpf_create_lineinfo (sec_name, &sec); + + unsigned int line_column = ((0x000fffff & line) << 12) + | (0x00000fff & column); + + info->insn_label = label; + + if (!IS_DIR_SEPARATOR (filename[0])) + { + char full_filename[256]; + + /* Filename is a relative path. */ + const char * cu_pwd = get_src_pwd (); + gcc_assert (strlen (cu_pwd) + strlen (filename) + 2 < 256); + + sprintf(full_filename, "%s%c%s", cu_pwd, DIR_SEPARATOR, filename); + info->file_name = ggc_strdup (full_filename); + } + else + /* Filename is an absolute path. */ + info->file_name = ggc_strdup (filename); + + info->file_name_off = btf_ext_add_string (info->file_name); + info->line_off = 0; + info->line_col = line_column; + + sec->line_info.num_info += 1; + return info; +} + /* Compute the section size in section for func_info, line_info and core_info regions of .BTF.ext. */ @@ -537,6 +600,48 @@ output_btfext_func_info (struct btf_ext_info_sec *sec) } } +/* Outputs line_info region on .BTF.ext. */ + +static void +output_btfext_line_info (struct btf_ext_info_sec *sec) +{ + unsigned int str_aux_off = ctfc_get_strtab_len (ctf_get_tu_ctfc (), + CTF_STRTAB); + bool executed = false; + while (sec != NULL) + { + uint32_t count = 0; + if (sec->line_info.num_info > 0) + { + if (executed == false && (executed = true)) + dw2_asm_output_data (4, 16, "LineInfo entry size"); + dw2_asm_output_data (4, sec->sec_name_off + str_aux_off, + "LineInfo section string for %s", + sec->sec_name); + dw2_asm_output_data (4, sec->line_info.num_info, "Number of entries"); + + struct btf_ext_lineinfo *elem = sec->line_info.head; + while (elem != NULL) + { + count += 1; + dw2_asm_output_offset (4, elem->insn_label, NULL, "insn_label"); + + unsigned int file_name_off = btf_ext_add_string (elem->file_name); + dw2_asm_output_data (4, file_name_off + str_aux_off, + "file_name_off"); + dw2_asm_output_data (4, elem->line_off, "line_off"); + dw2_asm_output_data (4, elem->line_col, "(line, col) (%u, %u)", + elem->line_col >> 12, + elem->line_col & 0x00000fff); + elem = elem->next; + } + } + + gcc_assert (count == sec->line_info.num_info); + sec = sec->next; + } +} + /* Output all CO-RE relocation sections. */ static void @@ -609,6 +714,7 @@ btf_ext_output (void) { output_btfext_header (); output_btfext_func_info (btf_ext); + output_btfext_line_info (btf_ext); if (TARGET_BPF_CORE) output_btfext_core_sections (); diff --git a/gcc/config/bpf/btfext-out.h b/gcc/config/bpf/btfext-out.h index b36309475c9..9c6848324e7 100644 --- a/gcc/config/bpf/btfext-out.h +++ b/gcc/config/bpf/btfext-out.h @@ -99,6 +99,10 @@ extern int bpf_core_get_sou_member_index (ctf_container_ref, const tree); struct btf_ext_funcinfo *btf_add_func_info_for (tree decl, const char *label); +struct btf_ext_lineinfo * +btf_add_line_info_for (const char *label, const char *filename, + unsigned int line, unsigned int column); + unsigned int btf_ext_add_string (const char *str); #ifdef __cplusplus diff --git a/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c b/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c index 6fdd14574ec..0f1e0ad1e89 100644 --- a/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c +++ b/gcc/testsuite/gcc.target/bpf/btfext-funcinfo.c @@ -39,6 +39,5 @@ int bar_func (struct T *t) /* { dg-final { scan-assembler-times "ascii \"bar_sec.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ /* { dg-final { scan-assembler-times "FuncInfo entry size" 1 } } */ -/* { dg-final { scan-assembler-times ".4byte\t0x1\t# Number of entries" 3 } } */ -/* { dg-final { scan-assembler-times ".4byte\t0x2\t# Number of entries" 1 } } */ +/* { dg-final { scan-assembler-times "FuncInfo section\[^\n\]*\n\[^0\]*0x1\t# Number of entries" 2 } } */ /* { dg-final { scan-assembler-times "Required padding" 1 } } */