From patchwork Thu Apr 28 09:53:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrea Corallo X-Patchwork-Id: 53306 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4ED4E3857350 for ; Thu, 28 Apr 2022 09:54:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4ED4E3857350 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1651139666; bh=XFQCPsoEj/D6qAdhTPkfg4/c5Iw/cqQhpL/adUxCD48=; h=To:Subject:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=jV4v79DcY87y7aymfMde/KX9EdQBRsWZrg452q3cx2mQ2GuSULO1LoKkmjVHNYaP/ Gli1vnUC4BmWpRjynQ9YhkAx38utIO8pxeW+gPV8EE7dr6oc/7u/yFxf2INeNrE3oU m4JiBj1dWcH+BzuGztsOu5g72/dOT7qSkoJPezVc= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60051.outbound.protection.outlook.com [40.107.6.51]) by sourceware.org (Postfix) with ESMTPS id D5A3F3858C2C for ; Thu, 28 Apr 2022 09:53:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D5A3F3858C2C ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=k9oXClGbeJ4vazopPsxaoixn4ZxDkIb6MjggPuOSNvsSW9KE/tTNeTbveboRw260dGGwKb656kpcdObrGhiaFIVQDWFrvzK9mGxTzciuIoUkpSg0qHlcVjUHCscLlGXQV8b3tnVKUeNE1wnEjxUXuK+t0jE1PfTrqSZx9oHgSSX07BVZPOhtvJgyxQkbCt8vKgvdnxoMJgk1gL5x1GN+dJPx6fz3u3UmF2JaZPSuSb7fXeSqu8toI2nObadMwX9NlC/MGhkDBhowHat78lRxU4Nq8vX1g0Ajt9YYmShAwsdF0afVQ3kiI59K1P42YycJfS4dSlBPkULjFuQahimAeA== ARC-Message-Signature: i=2; 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=XFQCPsoEj/D6qAdhTPkfg4/c5Iw/cqQhpL/adUxCD48=; b=MSRBAiYMyo295VBFhg9tt8OCoubovdHQ9xe7obdfnB/rQgrY+wtnogZDy6w1Mf9C7HAg7nfMZyIDZsk47DZh/1/QZSw707q3RRf0aPV2tJB87tR/9Ird2O8TIMZ8Ac2Wug8jZTdUwPWLJ3kG9UHR/b9bUQ9UVwCEtuWK4lx/aO6jPsMc453Pi8FI/6FhhbmkOA7ZuBjmLIQTiOBe0C3KRzUbrcaYWpj+riJUmq5nb4omMGeViePPXlxFFRrRVVHVJmdTjiGcKZkCLhxiRfBCrlP9vDjIs3yMhI9pAROk00m/KeyKMt8RtAfRxLPi7YZ0nvTx0++ft+8/khdGeBluqw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from AS9PR06CA0241.eurprd06.prod.outlook.com (2603:10a6:20b:45f::20) by DB8PR08MB4027.eurprd08.prod.outlook.com (2603:10a6:10:a7::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.13; Thu, 28 Apr 2022 09:53:51 +0000 Received: from AM5EUR03FT034.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:45f:cafe::9d) by AS9PR06CA0241.outlook.office365.com (2603:10a6:20b:45f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.13 via Frontend Transport; Thu, 28 Apr 2022 09:53:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT034.mail.protection.outlook.com (10.152.16.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.12 via Frontend Transport; Thu, 28 Apr 2022 09:53:51 +0000 Received: ("Tessian outbound 78191104f1b7:v118"); Thu, 28 Apr 2022 09:53:51 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: c9298d15d5644893 X-CR-MTA-TID: 64aa7808 Received: from 93bf235fa5d6.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 47F256E4-F835-4728-83FE-1E6FB7D289AD.1; Thu, 28 Apr 2022 09:53:44 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 93bf235fa5d6.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 28 Apr 2022 09:53:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EAAza9Qnya662DfjJ1avBGJlKXSKEAEtO4xFPvaJsQeuE6tCA9j+RcqPQFitDn4+2pxdmIvM+k8iz4tIOY67w8SWei4YfsaPMcWFm3fSf/6M4h78rpFQVej5+P8yleul3PxuOz33UWiuOSEYg3jcLKcVd9FdrYxU9C56BF4/LB1lKmjaV28Sm8oqhrDsMLKFpuqRWFZtGQ8q9EY1bY4WG3rC8MpYD/szxXfr/A7cA0km5IdnClxn1dhdLdg+ElzewJvHi5l5ltMVTAPXvhRUx02Ke51yF8nDPfV13tBAZrLfp3PD3YKl6kZ3WGyMKkjZKr69JeLOrRzqYshY87Ik+g== 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=XFQCPsoEj/D6qAdhTPkfg4/c5Iw/cqQhpL/adUxCD48=; b=YvlXghxoGQv2ONIlaE3sElueIN92zrUyIMGWJ+8Ak+W1dgHxkXK9tQz2Y+O6fHbJvk26C3JEKVfSsEBXOTLIAtgVLnabPDTi+JMi7vlJM6+6PZ+wlEYSDHrNcUl5N0F7iaW+G527IZQHJB4AYjk1QfPhva8KfiCrrU8sOft+YMklA3wIlWKjXKwqZXvQlpQ6gj7WbGS5ls4j+xdU4I/q8VoB0u+YbJb+nx8xfmDT7V2NWYBAR5SmltjmJDFyllp6KmgGPpRv1fB7EUCxBpxRdX+eHvqlZEkMTKw4ZI258LPqYCqHF2EzGn+2AghbCni01sQOHQQCv74D7cO01g1G8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none Received: from DB9PR01CA0006.eurprd01.prod.exchangelabs.com (2603:10a6:10:1d8::11) by PA4PR08MB7596.eurprd08.prod.outlook.com (2603:10a6:102:272::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.13; Thu, 28 Apr 2022 09:53:41 +0000 Received: from DB5EUR03FT018.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:1d8:cafe::d) by DB9PR01CA0006.outlook.office365.com (2603:10a6:10:1d8::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.13 via Frontend Transport; Thu, 28 Apr 2022 09:53:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; Received: from nebula.arm.com (40.67.248.234) by DB5EUR03FT018.mail.protection.outlook.com (10.152.20.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5206.12 via Frontend Transport; Thu, 28 Apr 2022 09:53:41 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 28 Apr 2022 09:53:42 +0000 Received: from e124257 (10.34.101.64) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Thu, 28 Apr 2022 09:53:42 +0000 To: Andrea Corallo via Gcc-patches Subject: [PATCH 12/12] arm: implement bti injection References: Date: Thu, 28 Apr 2022 11:53:39 +0200 In-Reply-To: (Andrea Corallo via Gcc-patches's message of "Thu, 28 Apr 2022 10:39:31 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-Correlation-Id: 40ccf973-92be-46ae-aa68-08da28fcffd4 X-MS-TrafficTypeDiagnostic: PA4PR08MB7596:EE_|AM5EUR03FT034:EE_|DB8PR08MB4027:EE_ X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: T+4KMxGbUHSbeDrlYNJvBKJ5NCYBHPU5dPR9/VC+wWS+YAaeHk0DkR/AYIKhl5ZDt1shpJG2gTGeobyVGYdwqAAkenAfuKDRArJaJhjdyDS47fQcDXk+vHovraaP/kXjYqkTCqNUs5r2Kkts9JGu8n1NVfeGGLVH6lnXwrMo6cIEXxm9xLIirpeeGDng1AHAiNd9NXzJhXO8yoA6Ovto+ZWpu9+Gx2GPQ8VjCLn9dYNbuQ+LWr1I12lLA7Me48fMCFKX3Dhm8TqAN63NMsJPGweRRh4ZzuHiOJIvl80M8iayf7QMJlANqXp9Qu31N94Dai3UqTkEjhZvY4H7qUk+stV2rcVk5WNbnuoBEU+yGvMDHC12CoF82eKcZlK6xJl8FBlyjq0LJJvQSmNHkpwtoFD+be22oJWICk7ZULpfbv7l39wGAvBX8nxy1ZlmFKlWesTUxaROMezVWgyP8EwOguYuFzBdWQLMPCZMGxmqN+wd2eykJ4zdwg179mVekYYBx93/aTMdJyUYkiRLPZugXvlFTwbeWYg3DuX4hsRNyUZolxCRcFV0K59zhvyyHLq6Wo9wN7PfEj2IEyPOyUCcuukqIWDYppVI56qzA06Pr769/4TfrmR6eujd259PyTQFassDtzCrVHRSX9YnW8EBOy/va2tgCiS8ug+06B+ddAWGXFP1sg6GxkbpX8owlR0UdTysFGj0qQAltFmS/JP6H0tJ6o03aeYvfQanButK/dEBMwXgopC9I1zSKU/chOQqhnfj8TuUHoFmXPV8pZ/J14XWSMwh29meLCMHFR9WBddL5v+ShnluP+skw7ISGdoDdQIUuIsVLjd8gl+RKJ+Jbg== X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(83380400001)(40460700003)(5660300002)(36860700001)(235185007)(8676002)(336012)(426003)(4326008)(84970400001)(8936002)(508600001)(2616005)(81166007)(356005)(70586007)(70206006)(6916009)(2906002)(6666004)(54906003)(33964004)(316002)(82310400005)(47076005)(44832011)(186003)(26005)(86362001)(36756003)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7596 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT034.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 9fb1dfc6-aee0-445c-821d-08da28fcf9c0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 06cmA/0heW6jkuU4uUJzJHg3BN2ANsKhL6OP3gRd0w8YtWP6U27Lv7pYmmygBSj8YljgtcwJLqOXsmDqG2I68JaSnPHaRm1WbeCKZ5nEtRrX0VEB28KN5Xlxi0absKrgb2chjMnxlGNEDjbSxIyeIq3tkSnhkoSZCpkMuV6xBQGJVuN8ZLEHoHEDsd01WCWIDeYVLxe0c33psocD8QVzHLZCgBbORLJEk4VzWFEaydxjVU6TD1zmktI3T9aNKCHLj3w6bFYLpjaBHYQnKckUYsMhR7kFld4HItyN9qWY2UJJ/9T7gK3AYmevL1Hle9gIZvOgE1lc/hxh7hatXong9Tp2ICKUF6nR8gz0CXJnmTHKA83awVlIO38YxSbqCs+nOx506V3ggDQd00NJJ28PTZoRofWIFUgmLZmPEX8mG0iohhptkGXbtugZKHuEnw6/g6ii55FMpZpocBQ8G4h7ZdZTE9kkef5mNnTtfitenMSBewsNoE0umMZHJsX7oP1wzXoj13ElS/V7tpf0VwP486mMowfoYKU4IvXDnHdLRqBRioS7WJkspo3GX2Obr3ZK/VSnIUcwg8RuOwrYqsaOLtMi3hUnOgZjGplKN9ml80fFUBm63Xji85VziV5+kMaVCchHNTVh82Zq2dlyTmUV0cCEarzu47b36hDcikcOz3n10pl1ryaT4bCIKHUnnr/ikj1nYlNkNT3rUGrlvi+zoCrXL5VrRvLKNUe1pA/8ZZZlQEb9alUkqRwdFhEVdrKtaeCugnI1grlEiIzY5cdJHvYolGvBeh51VpPocKpCa2s= X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(508600001)(36860700001)(426003)(8936002)(316002)(336012)(2616005)(84970400001)(186003)(83380400001)(82310400005)(40460700003)(81166007)(6916009)(235185007)(5660300002)(47076005)(33964004)(54906003)(26005)(2906002)(36756003)(6666004)(44832011)(8676002)(70586007)(70206006)(4326008)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Apr 2022 09:53:51.4624 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 40ccf973-92be-46ae-aa68-08da28fcffd4 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT034.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4027 X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Andrea Corallo via Gcc-patches From: Andrea Corallo Reply-To: Andrea Corallo Cc: Richard Earnshaw , nd Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi all, this patch enables Branch Target Identification Armv8.1-M Mechanism [1]. This is achieved by using the bti pass made common with Aarch64. The pass iterates through the instructions and adds the necessary BTI instructions at the beginning of every function and at every landing pads targeted by indirect jumps. Best Regards Andrea [1] gcc/ChangeLog * config.gcc (arm*-*-*): Add 'aarch-bti-insert.o' object. * config/arm/arm-protos.h: Update. * config/arm/arm.cc (aarch_bti_enabled, aarch_bti_j_insn_p) (aarch_pac_insn_p, aarch_gen_bti_c, aarch_gen_bti_j): New functions. * config/arm/arm.md (bti_nop): New insn. * config/arm/t-arm (PASSES_EXTRA): Add 'arm-passes.def'. (aarch-bti-insert.o): New target. * config/arm/unspecs.md (UNSPEC_BTI_NOP): New unspec. gcc/testsuite/ChangeLog * gcc.target/arm/bti-1.c: New testcase. * gcc.target/arm/bti-2.c: Likewise. diff --git a/gcc/config.gcc b/gcc/config.gcc index 2021bdf9d2f..004e1dfa8d8 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -353,7 +353,7 @@ arc*-*-*) ;; arm*-*-*) cpu_type=arm - extra_objs="arm-builtins.o arm-mve-builtins.o aarch-common.o" + extra_objs="arm-builtins.o arm-mve-builtins.o aarch-common.o aarch-bti-insert.o" extra_headers="mmintrin.h arm_neon.h arm_acle.h arm_fp16.h arm_cmse.h arm_bf16.h arm_mve_types.h arm_mve.h arm_cde.h" target_type_format_char='%' c_target_objs="arm-c.o" diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h index cff7ff1da2a..da23e0a4735 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h @@ -24,6 +24,8 @@ #include "sbitmap.h" +rtl_opt_pass *make_pass_insert_bti (gcc::context *ctxt); + extern enum unwind_info_type arm_except_unwind_info (struct gcc_options *); extern int use_return_insn (int, rtx); extern bool use_simple_return_p (void); diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index c91dae292c8..a2b720a6660 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -23361,11 +23361,6 @@ output_probe_stack_range (rtx reg1, rtx reg2) return ""; } -static bool aarch_bti_enabled () -{ - return false; -} - /* Generate the prologue instructions for entry into an ARM or Thumb-2 function. */ void @@ -32981,6 +32976,56 @@ arm_current_function_pac_enabled_p (void) && !crtl->is_leaf); } +/* Return TRUE if Branch Target Identification Mechanism is enabled. */ +bool +aarch_bti_enabled (void) +{ + return aarch_enable_bti == 1; +} + +/* Check if INSN is a BTI J insn. */ +bool +aarch_bti_j_insn_p (rtx_insn *insn) +{ + if (!insn || !INSN_P (insn)) + return false; + + rtx pat = PATTERN (insn); + return GET_CODE (pat) == UNSPEC_VOLATILE && XINT (pat, 1) == UNSPEC_BTI_NOP; +} + +/* Check if X (or any sub-rtx of X) is a PACIASP/PACIBSP instruction. */ +bool +aarch_pac_insn_p (rtx x) +{ + if (!x || !INSN_P (x)) + return false; + + rtx pat = PATTERN (x); + + if (GET_CODE (pat) == SET) + { + rtx tmp = XEXP (pat, 1); + if (tmp + && GET_CODE (tmp) == UNSPEC + && (XINT (tmp, 1) == UNSPEC_PAC_NOP + || XINT (tmp, 1) == UNSPEC_PACBTI_NOP)) + return true; + } + + return false; +} + +rtx aarch_gen_bti_c (void) +{ + return gen_bti_nop (); +} + +rtx aarch_gen_bti_j (void) +{ + return gen_bti_nop (); +} + /* Implement TARGET_SCHED_CAN_SPECULATE_INSN. Return true if INSN can be scheduled for speculative execution. Reject the long-running division and square-root instructions. */ diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index b480f76a876..2221bc68f35 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -12913,6 +12913,12 @@ "aut\t%|ip, %|lr, %|sp" [(set_attr "length" "2")]) +(define_insn "bti_nop" + [(unspec_volatile [(const_int 0)] UNSPEC_BTI_NOP)] + "TARGET_THUMB2" + "bti" + [(set_attr "type" "mov_reg")]) + ;; Vector bits common to IWMMXT, Neon and MVE (include "vec-common.md") ;; Load the Intel Wireless Multimedia Extension patterns diff --git a/gcc/config/arm/t-arm b/gcc/config/arm/t-arm index 041cc6ec045..683342cb528 100644 --- a/gcc/config/arm/t-arm +++ b/gcc/config/arm/t-arm @@ -175,3 +175,13 @@ arm-d.o: $(srcdir)/config/arm/arm-d.cc arm-common.o: arm-cpu-cdata.h driver-arm.o: arm-native.h + +PASSES_EXTRA += $(srcdir)/config/arm/arm-passes.def + +aarch-bti-insert.o: $(srcdir)/config/arm/aarch-bti-insert.cc \ + $(CONFIG_H) $(SYSTEM_H) $(TM_H) $(REGS_H) insn-config.h $(RTL_BASE_H) \ + dominance.h cfg.h cfganal.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(RECOG_H) \ + output.h hash-map.h $(DF_H) $(OBSTACK_H) $(TARGET_H) $(RTL_H) \ + $(CONTEXT_H) $(TREE_PASS_H) regrename.h + $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/arm/aarch-bti-insert.cc diff --git a/gcc/config/arm/unspecs.md b/gcc/config/arm/unspecs.md index dbe243a03f6..78e723a4b3c 100644 --- a/gcc/config/arm/unspecs.md +++ b/gcc/config/arm/unspecs.md @@ -162,6 +162,7 @@ UNSPEC_PAC_NOP ; Represents PAC signing LR UNSPEC_PACBTI_NOP ; Represents PAC signing LR + valid landing pad UNSPEC_AUT_NOP ; Represents PAC verifying LR + UNSPEC_BTI_NOP ; Represent BTI ]) diff --git a/gcc/testsuite/gcc.target/arm/bti-1.c b/gcc/testsuite/gcc.target/arm/bti-1.c new file mode 100644 index 00000000000..230ebb5a1da --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/bti-1.c @@ -0,0 +1,12 @@ +/* Check that GCC does bti instruction. */ +/* { dg-do compile } */ +/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ +/* { dg-options "-march=armv8.1-m.main -mthumb -mbranch-protection=bti --save-temps" } */ + +int +main (void) +{ + return 0; +} + +/* { dg-final { scan-assembler "bti" } } */ diff --git a/gcc/testsuite/gcc.target/arm/bti-2.c b/gcc/testsuite/gcc.target/arm/bti-2.c new file mode 100644 index 00000000000..35aef6992e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/bti-2.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* -Os to create jump table. */ +/* { dg-options "-Os" } */ +/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ +/* { dg-options "-march=armv8.1-m.main -mthumb -mbranch-protection=bti --save-temps" } */ + +extern int f1 (void); +extern int f2 (void); +extern int f3 (void); +extern int f4 (void); +extern int f5 (void); +extern int f6 (void); +extern int f7 (void); +extern int f8 (void); +extern int f9 (void); +extern int f10 (void); + +int (*ptr) (void); + +int +f_jump_table (int y, int n) +{ + int i; + for (i = 0; i < n ;i ++) + { + switch (y) + { + case 0 : ptr = f1; break; + case 1 : ptr = f2; break; + case 2 : ptr = f3; break; + case 3 : ptr = f4; break; + case 4 : ptr = f5; break; + case 5 : ptr = f6; break; + case 6 : ptr = f7; break; + case 7 : ptr = f8; break; + case 8 : ptr = f9; break; + case 9 : ptr = f10; break; + default: break; + } + y += ptr (); + } + return (y == 0)? y+1:4; +} + +int +f_label_address () +{ + static void * addr = &&lab1; + goto *addr; +lab1: + addr = &&lab2; + return 1; +lab2: + addr = &&lab1; + return 2; +} + +/* { dg-final { scan-assembler-times "bti" 15 } } */