From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 3A89D3858C50 for ; Thu, 17 Aug 2023 12:41:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3A89D3858C50 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 37HCNwYJ016939 for ; Thu, 17 Aug 2023 12:41:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=EBroxCYP08P99I2HmRSAG8LiZReLNU4MLWwvE/zydb4=; b=t6zxWlK6WTXPc1N1o4cBJUFhwi/ytLCOwd0NCvvbkPvJiZyuRE+PohLOCrujbVaqztoQ vGtmV0dR8SABax5dFh0sU13v1EihjeyyTg/MH5IFwvgy383y7xPiNbVCACXlzgHowiCY NbMu9Nu6BWfR7DTeN2jl9sdsXAZj7ZJHiMqMNJjOLbhDJRqhdUzxfltTkNvZiCGOWYiq pauhJ+yzsnWpRtgxTmftr4no+JIj9iZHVfeFlUgtDtiyLYri0EaejmW9z1gq/9uBkU5j 3WzrqrYih0DKCGg/Ork+RJ9sRomQ+i/G3YI5Y/11vlF/Lkid9bX7166QlrpGcQ562AcU Ag== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3se2xwsesf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 17 Aug 2023 12:41:33 +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 37HCYoBF019891 for ; Thu, 17 Aug 2023 12:41:32 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2045.outbound.protection.outlook.com [104.47.73.45]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3sey3y29vh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 17 Aug 2023 12:41:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nHPe/AaQIvpS7ulBEYRfU8JhUnSxBfugZGdBpF0S79PSbKQU0g+iKPZu2LSJ5exibNRFYwKWsHOh6Hm95JlmqK2p3arlMzt8h3lZFJMO3B2UaWctPyL09AJbIGlzfhYHheQkY6tqDz1JIz+CQW9SHiLavxvpymQEq1BU7X07IvMTQMWvHFawidgHM23Loox7IazLq6PiaC2NWgRLn+ry93foo2PfDRPQ//pzYwNAH9+IIeRDkRtTOZzurCuUjoFOWBq9uOSQo03LDTWFs5zPlRWcO0KA6g07cIJ+qwbw0vkTkJRB+dmtBiUDOUQSAI/Bh4EQzs5N9OyVFROSBmDF0w== 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=EBroxCYP08P99I2HmRSAG8LiZReLNU4MLWwvE/zydb4=; b=WHqTY1zvpbdD0pWjxKew3EMrScAlQ6oC/xPaRHBZQrD1nshMyyJpeohoeZ/G7r1uir0+4k6lThtHVIq01zXJ4iE58J2xKjhtdbL8ahYdKmltiLhsv0pdSw5mOwlOXUeh6GKvpMZ6/jxZIP835rYnVw4d9tyIKddMN9Ub3SlR+punneP4ZI4fW4P+W5XwL3p/PgG6bYguNwWMe3mh2wxQAOrbDLPesfSm1pbDrUrgMWFKrpEVQU8XSS2GoizOzKnBKJkjoZPtKyE5eWru2yNZHHLtniWrnD0mlAOtsAkfbqde8Eb8nQoAlroh4HGBbETz1uQpb1k1AllIrRJWQYfXUA== 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=EBroxCYP08P99I2HmRSAG8LiZReLNU4MLWwvE/zydb4=; b=PAvxErqh+17HGriad4SQgEmxAEkx3Z8tRUKFQqjIQiit4BLyi12fAjNsTjKtxiphIq0Bcv7wrcbybIw0NGl2639aF3Wg4r7eok+9kUfFNyK2fkgbignWJOBoaglxPStwUWtiow3NcNnFmeIcJ+eoKYSisah9H6qy4aeRnsKYYN0= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by LV8PR10MB7944.namprd10.prod.outlook.com (2603:10b6:408:208::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6678.31; Thu, 17 Aug 2023 12:41:30 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::7d31:72cf:ebed:894f]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::7d31:72cf:ebed:894f%5]) with mapi id 15.20.6678.029; Thu, 17 Aug 2023 12:41:30 +0000 From: "Jose E. Marchesi" To: gcc-patches@gcc.gnu.org Subject: [COMMITTED] bpf: support `naked' function attributes in BPF targets Date: Thu, 17 Aug 2023 14:41:23 +0200 Message-Id: <20230817124123.22274-1-jose.marchesi@oracle.com> X-Mailer: git-send-email 2.30.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO4P265CA0008.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ad::16) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|LV8PR10MB7944:EE_ X-MS-Office365-Filtering-Correlation-Id: e899c2be-c376-47b5-1dd1-08db9f1f47d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dI0b07E3sRgVf9c+Iv/0MfmH3t8j77CXTnzVEnEoAIitKCrcbTEwi3A40SstsHQYwLTN/OnzOFVavQoOhV7tPH6+Oyse3EgShkQ+0ZyR4CBDIv6qB0oQSP6e7l5gJDRfORotV//+55Wgm1mtQhZuueNyI19yK+ukARB8Iz/+h+V/t88/xy7nINXig5z/32BEKvnhcqO2LkfRZS9hcfnw/iyCCkz8fxzKsP8Jv6V1xAauoFnCvG32JBER70Vnwx3oRC75iRqU8ooWFmmzMGmLxn+1aGm3vAzRKwTsApZRPTV+/Mv3WU00y9Dhg3Fe5VXeoAL23osxBmcCFIGldQoFIBT/qftkCuGNNxuOsd/qtuu1hTtHj5vlq9TtBQk/XuhEOcv5NnhD5SHPyruoQbUJ/Qld2HSJ2w1yNdnS3kCGyIav/pi8OIOSDHQewGRLhqxKwAP1hTzWwDgyJ5Mk8LJhUlHcGbAMpfmTJip6n5liXT/q6yBcDX8xxLnHcPuq3wbocrkbdE8UJ0jg9MV/ZUAN51dHoEJmKfpNeFxT2SCvi8TRH8e4rteSkTgpszloOc5zwCL3CiiwLKDqn0/srd7qO2TpC+67dVQugYXvgJNHHcj15VStQFZUhmi75rqENzQb 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:(13230031)(376002)(366004)(136003)(346002)(39860400002)(396003)(451199024)(186009)(1800799009)(36756003)(86362001)(84970400001)(83380400001)(5660300002)(8936002)(8676002)(2906002)(41300700001)(1076003)(26005)(6486002)(6506007)(6666004)(2616005)(6512007)(478600001)(66946007)(66556008)(66476007)(316002)(6916009)(38100700002)(41403002)(81973001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ETE2441LIc9iOr0BDQmkdj216nNdnAaSSC5z60Qfq9QQugSaxGNV6wSwZTCk?= =?us-ascii?Q?yzv7j4Qq1OIatIJS2Qt0Nv2TS4kvWiSNlRqLOhVHvk+ZtihJEx0p2KexxXOW?= =?us-ascii?Q?FcheLRkgTIKPSXdYnX37wPQPfEWTFvAf9jH36bmQ3ZZeY6BG9raH5FBDbwVQ?= =?us-ascii?Q?Vy/22dOAIW9N16EU9GG51aH8V6O9aiaQx3E8mHUZCZpCUcJzhv+CIt57SLCj?= =?us-ascii?Q?KZmSsMIppKyyFyNbllTyYZFdt61a9mWDd/mR4WbzYJeZc0CaePu7Wg079Bcl?= =?us-ascii?Q?7c1En12qy+ubao8wJZ/3dWhS8BFSSuTVQp+hIRXQ5fk5vsFy8cx09E4w3vVE?= =?us-ascii?Q?YmSOPRymhNRyBrKKqlSA9AfEmSnM8y5Vd3c48AdPvEr3Qy+Now0TjshF74Gc?= =?us-ascii?Q?GVu7nMqytze6adIkCJFUegXts0ucJenAYqNjWdMrY1u43n4d8Q6FYUCXgP7r?= =?us-ascii?Q?G0hg8ULC3NoI6+6+hcTg4WkefnAqhDymYCPgbj7UBIIODqU2nRxN4da5y3Hc?= =?us-ascii?Q?b5r3YxH0pcoSM/OmJi3JC2QA4OzlxCZGCygo7rCLsQ7j7rrMqv7CHy+630hB?= =?us-ascii?Q?XWcQSVkTJRCNAlRGZRr1gv7Pnbc6NLfSIL9v+YqEpYTwVWC4hdL9UAuHQ0//?= =?us-ascii?Q?kf7VdroWB7JRTlktBms8wKNLBiItdeUKW8PPVysrPHt3BwtQbyXJvIyPYXJu?= =?us-ascii?Q?mcTVVReKxnPKb87qjzeJmqjjJd7oG6j6aHIjXOHGOMXvlNfq4zH9Cd4yFHF3?= =?us-ascii?Q?dDLrud+7rjzAYPRxe8RBNhzeEVP67m0JErHJ9eNaDfLFudOpnX3+awcsdwZy?= =?us-ascii?Q?xiGnq9ZX80wlrCIGpaqWWg1reqX+C6Ygmo3hsgLbJr3lQEeLa4jSOjDKzGGh?= =?us-ascii?Q?DCtJbTCd9ldlzedTFIvrCZRHZPdd191tAqUcv3L2q8VLxgD86IDMyH6/h+Rv?= =?us-ascii?Q?LtyuSjUi9UepVWQtbf1KF0crDT+RjAbAW7bNrkuKq9kN4WZMVc+wjGi0bPLK?= =?us-ascii?Q?SH9oGyOAPeUZhLi5xY5vNKh3a2a2i17bN4NsRgGVnvbR3faKVEcb35xH9Zjq?= =?us-ascii?Q?HK/UQaNuF6akzsXp7jm3P2uIR8cANkJA/o50dKXLCYkULN+sCkA3eBAuRKMd?= =?us-ascii?Q?xTvRGg1AIgG4ltie2cG8VE/AdltLDvfEkHZ6LGPhhd+v9fUpGFnrZhaIbzAa?= =?us-ascii?Q?fvZEQV471WB6oGyAEG/Ry9qlKudlWd5FR4q5Se/Z/5Y6p1xLKi3TP66Ao38M?= =?us-ascii?Q?NbGbmhu7qINAO/ivUCAu0npB2Iajoj0Dls6urA+Lg6qySNjOf8UyET8Bj5jq?= =?us-ascii?Q?x/uqmyggkl9sMzMMrpjpvhqN4j/lTszKLqPmGIcNJ8gXkc2tNnL3sNDGAnAS?= =?us-ascii?Q?B4OrIeh6h35OramzqOE+J5FJwstmZnufG7g0CcWbJ/V8RLPXZ9SyvkwM70aS?= =?us-ascii?Q?KJnRdIZ9cq4hFwsqPZdzFvOkZb0SKxDOTufcZ5Q7sci8vE1A5Crhn8iT/3za?= =?us-ascii?Q?wjMCOpMSQsoOwc0ANjC7Xz9lCvzFH3DFE8+o6gmNaBETYyKIf2wf5PY8YYFf?= =?us-ascii?Q?aM365D9LWXTSK8EqNFdvs7jdE1uwjTd7YO6A9a6tPaOdnB9l/PMbZUsYcvdr?= =?us-ascii?Q?Rw=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: jzqQKIizFIIMrK1jbZ1oieonB9r6L+X7UIQhvEaoPUwoz6rpwqmSxItdxChihzSTUNyxYLTRFrPKEPX/0qgM6YKoeAFgXVmLtTn4B34km8dchgEb5iKMmhFkaIS201LpAJANMQG3YVTW4mcIHwQ2XzWCn7W8lQYhW4Zft7qjz+9Tq+9z+FEjJqBToYVf+rLKg9jCbogP/spY9mjf6V4yxpEIUpvCNZaiQqgjHoi5XK48/Y8Dl3YMObOCqXQN8VdG+hGCsiqSWktwCa6/h9qtBRuePcKBxfljqhF5W6e7/o2Z8VtBsZX9Mrer7GYUiPyrPqFb9VZIgzSrJUbHzPJ9xuNcu4A24Ndip7j77MJRMKdv3xMjvjc0Q6ikHrPV66dmXtNNLgJjnKRwxYPOpEdpI3OjuaJz/mR+6/fczOoLJeiPPKw/bNZnTnA0N4a3Yb8IxESvdTaVr+7hQmEdzLtxsB2ObYKMLt1AXXqqjkzm+tR6QoOXPTr/FaqmS7P+tMvd+tCSrUkCMIMllJ15BNuwXMeS8+NaQpDjrEvsvKED25akdQ7Z1vlDpIR1r6prHEB18oE7TkxVoQxRni3in9hjQWRZ0LL3PVgdkLjKefHZM6Qq+J8rsLLv6wN36bMGIc9Ek5aRefuGa0EHSrgp6VA+D9jL9GDdrJX3MeWlOrSIsimyE9AS2eyCKjSypRM2z+6SczD4AlgA42H9KOIuR7xSVvIkkqiBrL31wIqQMX3MYYND6LyKkzfOUVwzraiT4v1g X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e899c2be-c376-47b5-1dd1-08db9f1f47d1 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2023 12:41:30.3427 (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: KXjF7RbiYTI3ccwVjcxueqLo6Pb9kuqyZMNyOiF9PaOoI01SH751vb7z9uq1DtstaMXtOD4Y3Ejh/JA8uCS+ePZ0Jd5xQvvh5P/chXoJnWo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7944 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.957,Hydra:6.0.601,FMLib:17.11.176.26 definitions=2023-08-17_06,2023-08-17_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=833 spamscore=0 mlxscore=0 adultscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2306200000 definitions=main-2308170115 X-Proofpoint-ORIG-GUID: NgQJ7NU2P-g1dexwYiALHMT7ZKoG9C_c X-Proofpoint-GUID: NgQJ7NU2P-g1dexwYiALHMT7ZKoG9C_c X-Spam-Status: No, score=-12.5 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_H5,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 List-Id: The kernel selftests and other BPF programs make extensive use of the `naked' function attribute with bodies written using basic inline assembly. This patch adds support for the attribute to bpf-unkonwn-none, makes it to inhibit warnings due to lack of explicit `return' statement, and updates documentation and testsuite accordingly. Tested in x86_64-linux-gnu host and bpf-unknown-none target. gcc/ChangeLog PR target/111046 * config/bpf/bpf.cc (bpf_attribute_table): Add entry for the `naked' function attribute. (bpf_warn_func_return): New function. (TARGET_WARN_FUNC_RETURN): Define. (bpf_expand_prologue): Add preventive comment. (bpf_expand_epilogue): Likewise. * doc/extend.texi (BPF Function Attributes): Document the `naked' function attribute. gcc/testsuite/ChangeLog * gcc.target/bpf/naked-1.c: New test. --- gcc/config/bpf/bpf.cc | 25 +++++++++++++++++++++++++ gcc/doc/extend.texi | 11 +++++++++++ gcc/testsuite/gcc.target/bpf/naked-1.c | 12 ++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/gcc.target/bpf/naked-1.c diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc index 1d0abd7fbb3..437bd652de3 100644 --- a/gcc/config/bpf/bpf.cc +++ b/gcc/config/bpf/bpf.cc @@ -154,6 +154,10 @@ static const struct attribute_spec bpf_attribute_table[] = { "preserve_access_index", 0, -1, false, true, false, true, bpf_handle_preserve_access_index_attribute, NULL }, + /* Support for `naked' function attribute. */ + { "naked", 0, 1, false, false, false, false, + bpf_handle_fndecl_attribute, NULL }, + /* The last attribute spec is set to be NULL. */ { NULL, 0, 0, false, false, false, false, NULL, NULL } }; @@ -335,6 +339,21 @@ bpf_function_value_regno_p (const unsigned int regno) #undef TARGET_FUNCTION_VALUE_REGNO_P #define TARGET_FUNCTION_VALUE_REGNO_P bpf_function_value_regno_p + +/* Determine whether to warn about lack of return statement in a + function. */ + +static bool +bpf_warn_func_return (tree decl) +{ + /* Naked functions are implemented entirely in assembly, including + the return instructions. */ + return lookup_attribute ("naked", DECL_ATTRIBUTES (decl)) == NULL_TREE; +} + +#undef TARGET_WARN_FUNC_RETURN +#define TARGET_WARN_FUNC_RETURN bpf_warn_func_return + /* Compute the size of the function's stack frame, including the local area and the register-save area. */ @@ -388,6 +407,9 @@ bpf_expand_prologue (void) dynamically. This should have been checked already and an error emitted. */ gcc_assert (!cfun->calls_alloca); + + /* If we ever need to have a proper prologue here, please mind the + `naked' function attribute. */ } /* Expand to the instructions in a function epilogue. This function @@ -399,6 +421,9 @@ bpf_expand_epilogue (void) /* See note in bpf_expand_prologue for an explanation on why we are not restoring callee-saved registers in BPF. */ + /* If we ever need to do anything else than just generating a return + instruction here, please mind the `naked' function attribute. */ + emit_jump_insn (gen_exit ()); } diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index b363386df6e..f657032cbef 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -5172,6 +5172,17 @@ attribute. Example: int bpf_probe_read (void *dst, int size, const void *unsafe_ptr) __attribute__ ((kernel_helper (4))); @end smallexample + +@cindex @code{naked} function attribute, BPF +@item naked +This attribute allows the compiler to construct the requisite function +declaration, while allowing the body of the function to be assembly +code. The specified function will not have prologue/epilogue +sequences generated by the compiler. Only basic @code{asm} statements +can safely be included in naked functions (@pxref{Basic Asm}). While +using extended @code{asm} or a mixture of basic @code{asm} and C code +may appear to work, they cannot be depended upon to work reliably and +are not supported. @end table @node C-SKY Function Attributes diff --git a/gcc/testsuite/gcc.target/bpf/naked-1.c b/gcc/testsuite/gcc.target/bpf/naked-1.c new file mode 100644 index 00000000000..cbbc4c51697 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/naked-1.c @@ -0,0 +1,12 @@ +/* Verify that __attribute__((naked)) is accepted and + produces a naked function. Also, the compiler must not + warn for the lack of return statement. */ +/* { dg-do compile } */ +/* { dg-options "-O0 -Wreturn-type" } */ + +int __attribute__((naked)) foo() +{ + __asm__ volatile ("@ naked"); +} +/* { dg-final { scan-assembler "\t@ naked" } } */ +/* { dg-final { scan-assembler "\texit\n" } } */ -- 2.30.2