From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150082.outbound.protection.outlook.com [40.107.15.82]) by sourceware.org (Postfix) with ESMTPS id A04C33858D20 for ; Wed, 9 Nov 2022 14:32:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A04C33858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=he4XtlW5cVuSKY8VbD6C5kAsetpeqwvh4DlwFHwR6zLuu45mPVPI32Qt9VadAMGh3afA2j4oTUaDYm+Q3JUv4coJy+95+E6rbHUSJug3NgnsaxqqNqqqiBxifMV1+cET7BTEFl7wiXfEnAcReJR2vHjkSFSI4CnpHGg+Hrpyq1wJ5npsIU6T6DXLyZxgrxSG+Eg3irETqoMAlQgxD03iJakqVC7Pwb93uu4iEvVkHsYdtexe5qaM4mFD0bcqUasNQDhq0arPxqibXj+errxpN14CdozoLQZmqh2Ua/x8GapBNgwU3bYPBOtFp9JNif1mu1MofIWuc7PlyEe/xohlPw== 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=rVwePDp8U+LbBRa48HsoyzYT2nIkRw4XYVmn1ZBEnSs=; b=JWU4lV1n6X9TKDI6s9pYW6jpE1vLnD0sPoXNOzqq+kUUjR4712oEhis0BfNRxhMdOOqh6KnH6/Qjy2oiYwxVMkQjTRNIN0MVwGKDVK3chyzSImU86FsHIEBqzIkiC7DQBJ8Eyw6VRf97lPf83kWhUVbHlRxye2LVZ2CGgJty+qhtUi6IKEWGS/MoQouEj/Jv2H4+XiJo2yV9VUNONZOowcQoKzCOqspBroTi/1YaviZ5BN+IVDRSyTYshzozjn3b7vAdxZF0jiMnkJhjhmGAQlwtOLQHX+4yxGP4CeVgBvilrO6l3oRCgATqj4ai9Nz/ujTpMz1Exwegzks15CKXcQ== 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]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rVwePDp8U+LbBRa48HsoyzYT2nIkRw4XYVmn1ZBEnSs=; b=4++26b9r9YbDjubJUniARD8XxqM3CAbk/NUF0ji6zyixQoTMBNCzpQym7l5Ust4yDuZyGuW5q3f+ANT2K25ASpQA2QvwGpHYxIK6zOAvuqGNe16KnX7e8AbztHwbmmFkXN0j3KmVv9lGJR6w1K2QlLZnvLERbo6fN+Y23O8Y8OI= Received: from DB6PR07CA0050.eurprd07.prod.outlook.com (2603:10a6:6:2a::12) by AS8PR08MB9071.eurprd08.prod.outlook.com (2603:10a6:20b:5c1::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Wed, 9 Nov 2022 14:32:49 +0000 Received: from DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com (2603:10a6:6:2a:cafe::2c) by DB6PR07CA0050.outlook.office365.com (2603:10a6:6:2a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 14:32:48 +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; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT065.mail.protection.outlook.com (100.127.142.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 14:32:48 +0000 Received: ("Tessian outbound b4aebcc5bc64:v130"); Wed, 09 Nov 2022 14:32:48 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 085f927de5e93134 X-CR-MTA-TID: 64aa7808 Received: from ad834ddec717.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id FA0DCCEC-365C-42AD-AE4E-C2D5FC727E83.1; Wed, 09 Nov 2022 14:32:42 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ad834ddec717.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 09 Nov 2022 14:32:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CdvuBGxOkadHVLdtmNCy7WgIuT0IAs+Mx1G33MVZh7OfXWMT3vvrQZwCUiGs52MCD+UQRk6iNdQ5ZYayQMHjdLSDjWkFK2Syl7zCmH1JsU9WM08qCAirKIull6HEDKASI+dEgJ6n0LTiFDYgTKsC2uEpMNwrvRBpuhIB1Bkxux4MlIjj3ZpsmSBvqc6v2AmIpx9UMKgIvVjlhZ9lxX0fKZPXTiKUhgSy5yFdbLcSTaFD312ueGu1EH0SQGQE2EE6jeBKO9WfnQrLWNgvEtqYfljpmY/Lx37hN24c8l0xqDADqa1353flcfH/KLU/txtgPtJdP7UrXkl/Flu1JRijEw== 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=rVwePDp8U+LbBRa48HsoyzYT2nIkRw4XYVmn1ZBEnSs=; b=HiVmGU46wY2y4CVr9Zg6EfHj8B2UqShJ63PJzgUShVJGmbfsPlnM110RIiq+8fum9zfvBNDwJE5eYE3bXoNw0jmZot3aPv/7qta6j9E0nLqDSPB6P8nt+5z6S37rJXBvi0rJs1ftcXOHfmu3hJF+0dBSfyvW3IqVFhP+JmftZ4CJvGiz+8E6ZQflZ5RZMQbuQfa+CU3sKHjWgYazYhPD++zAtoJadDu3cybwGt7IXh0ZHC/EMChzcMEQ6P/uPO6Wv/YHUyD9ToSKl/yg3uxWLoD3erLvdVctvoJ4cJ6utISTUUaIHMocNx4+aAAUFRc/7929C45BNZW18w/ByEeXAA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rVwePDp8U+LbBRa48HsoyzYT2nIkRw4XYVmn1ZBEnSs=; b=4++26b9r9YbDjubJUniARD8XxqM3CAbk/NUF0ji6zyixQoTMBNCzpQym7l5Ust4yDuZyGuW5q3f+ANT2K25ASpQA2QvwGpHYxIK6zOAvuqGNe16KnX7e8AbztHwbmmFkXN0j3KmVv9lGJR6w1K2QlLZnvLERbo6fN+Y23O8Y8OI= Received: from FR3P281CA0039.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::11) by AS8PR08MB6182.eurprd08.prod.outlook.com (2603:10a6:20b:291::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.11; Wed, 9 Nov 2022 14:32:37 +0000 Received: from VI1EUR03FT065.eop-EUR03.prod.protection.outlook.com (2603:10a6:d10:4a:cafe::e7) by FR3P281CA0039.outlook.office365.com (2603:10a6:d10:4a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 14:32:37 +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; pr=C Received: from nebula.arm.com (40.67.248.234) by VI1EUR03FT065.mail.protection.outlook.com (100.127.144.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5813.12 via Frontend Transport; Wed, 9 Nov 2022 14:32:37 +0000 Received: from AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) by AZ-NEU-EX03.Arm.com (10.251.24.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Wed, 9 Nov 2022 14:32:36 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX02.Emea.Arm.com (10.251.26.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Wed, 9 Nov 2022 14:32:35 +0000 Received: from e120703.arm.com (10.2.81.20) 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.2507.12 via Frontend Transport; Wed, 9 Nov 2022 14:32:35 +0000 Content-Type: multipart/mixed; boundary="===============1001827178374506076==" MIME-Version: 1.0 From: Srinath Parvathaneni To: CC: , Subject: [GCC][PATCH 13/15, v4] arm: Add support for dwarf debug directives and pseudo hard-register for PAC feature. Date: Wed, 9 Nov 2022 14:32:35 +0000 Message-ID: <78382b9a-a434-4222-9c2b-bf3f7d35ef17@AZ-NEU-EX04.Arm.com> X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: VI1EUR03FT065:EE_|AS8PR08MB6182:EE_|DBAEUR03FT065:EE_|AS8PR08MB9071:EE_ X-MS-Office365-Filtering-Correlation-Id: 2da54f38-9ebd-4673-1956-08dac25f469e 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: ZhYmXl6fKlFT7voDyIxmkP9/2L1xLyiZWYAcau+v2p7IioDktfOmMv524PVKL/orkvYKEWdci+ETWJOXaoOY70haZI1w72nyxyFejYbG2TCEK5ILDx+qC51S0zE9hKnDM7vMMppcKLHs1vTgYumMv9Y0P6HALBurNn0/C8Vg3VTlty7ue2hxhOb8Oz5gq2eOaXqKlx2WEGrl0sbS9NhhklIiy486rtN0/pHypD/TZhDSBSL+SDM1AzUyMi8+Cld3sQUmoUrWKPlewri1143EKd37O5HNMLj6aB5DpQqhyCWEsxhrDD2FaLdUwX3rOdpKd+zpdx0JEEyYQqmdvD+tDBYFIELwtcefZzzLjqZgkgdGW7gc8vlEhLbhF/euUHZybv1uhYMOF4r9dbIny+QjPW+9BuXqQELmH+n27EGZ/VxaSV74N7rC+Pl2azJ1PO4CFujUPqUtcdKHSG4QYexAmUAKNsA630Iyti53noEIwzF0vniETrNuKi5gAYBmwkgh/u0R0B9o11Hov0Sn26XES7hyyWg5ldJAqvlF8O2KyvIlVY+UrJxolcGthqhAU1fqO/Q5+aUQiAlhXzKGA8dVN6BP8ZFA/hjOpdhIxq0rx1ldgOu6FxNfsjcWLUf3V0O95tdenveOE/pHmoAdEa0PcGDAR/be2HmY7mPtVofkN+v0XdDutgGGyJwvCiK7COz049TVYnAgua9WInQUXVpxavfU14NLitZNTHmCf9q0q3eNVKeVo/r7ml/EuCf951EoMCY4fUyBKVtLkk1Y3femhQeUTlfMPQQvBQg5Qh6GeFKo3fT8BB+AgenkpvAdjzeu5BnkVdNdeQAUeccLrbm8BgXdXKEouPBsErWHmx+KlG7aTWjO9EB5bUonaYOxV+Jd 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:(13230022)(4636009)(396003)(346002)(39860400002)(376002)(136003)(451199015)(46966006)(40470700004)(36840700001)(84970400001)(31686004)(86362001)(31696002)(81166007)(356005)(82740400003)(40460700003)(26005)(426003)(44832011)(40480700001)(30864003)(2906002)(336012)(186003)(47076005)(83380400001)(33964004)(36860700001)(70206006)(8936002)(4326008)(54906003)(478600001)(8676002)(235185007)(316002)(70586007)(82310400005)(966005)(6916009)(41300700001)(5660300002)(36900700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6182 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: e3b2f9e5-53cb-4986-5ae6-08dac25f3fb3 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ohhwnfAMHK+PW1IH5P2snCV2oEFM9LpJUMKdlhHqaIelnZhAwZqL1ZIPLauDTrnLqguDXPB3p6YRBIqtQ9uevkDyyfdR3l+E+UMQs4VZYyBBJFzjmp0GsWjkHMmMc79IjVf2RKYRrS+RZGJcLNjLtVW35lRPgfo4pgiBH67UtAIYHeuZQDmqptg7fu6EYdET4hRas4+bT/RwhgHI5h9fF5mvHSFAeKiaytI6t2Z/bFzYnI8QnqsppjuhkiG5S/M7lXvqVbVLw+Gu6bh5OJp9Wuk/k/eT2LpdAZN8UPkPCBWCVs6/Vcnu+atKakYOzDFnLPbr66OmU0lLaKPwkUO0EJwAuHAl0Unn5fqmFPRUTEic2cBNEebe/OW+7htZn3uDwK2eq+EVfVZg4bd0sotg6dnROoLj3mjucjOYgAISBkqUUiicmG0kdmAHu5y5QM9FYUkYXN9g5kZC4zpT3zOlC8evlS81rJDl8YbThgsA+jbAYFivHxA3LANys1O3iZhQoVFi1vL6HfGGYMFKVUPRqGLI5XSdAfmScskWucgRw2uyC7CblRztmiEW5GjAelEJHKqYsszzoKrWDHtk+f3dcCVVycQ18CXnn6MPTboOWn791vCUCOZbf31JmPWQfDgVJJPxA7yPFY4CTxSI3y26YdeO48Wp6fmLCKGPtbKeDDLrcw1mFocTMKbd6dDVGGOQ1phPr9DH8fSE+xmRVbS3qcTMq6rIGWGBuqdpwzCilQM55ZeBAS0uktBbvxN0P422ji3gzvgLMcUUbdUXtlJKtc56rrEPvWc5pqODMtcrE9/KNh6q1ex8doD8+4nqdd/XtKzdtMBFugTX7VzVKmGpAw== 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:(13230022)(4636009)(346002)(376002)(396003)(39860400002)(136003)(451199015)(36840700001)(40470700004)(46966006)(31686004)(84970400001)(47076005)(426003)(40480700001)(81166007)(44832011)(6916009)(30864003)(33964004)(478600001)(8676002)(54906003)(2906002)(31696002)(82740400003)(40460700003)(86362001)(70206006)(82310400005)(966005)(36860700001)(83380400001)(186003)(336012)(26005)(5660300002)(316002)(70586007)(4326008)(235185007)(41300700001)(8936002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Nov 2022 14:32:48.8794 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2da54f38-9ebd-4673-1956-08dac25f469e 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: DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9071 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY 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: --===============1001827178374506076== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Hello, This patch teaches the DWARF support in gcc about RA_AUTH_CODE pseudo hard-register and also updates the ".save", ".cfi_register", ".cfi_offset", ".cfi_restore" directives accordingly. This patch also adds support to emit ".pacspval" directive when "pac ip, lr, sp" instruction in generated in the assembly. RA_AUTH_CODE register number is 107 and it's dwarf register number is 143. Applying this patch on top of PACBTI series posted here https://gcc.gnu.org/pipermail/gcc-patches/2022-August/599658.html and when compiling the following test.c with "-march=armv8.1-m.main+mve+pacbti -mbranch-protection=pac-ret -mthumb -mfloat-abi=hard fasynchronous-unwind-tables -g -O0 -S" command line options, the assembly output after this patch looks like below: $cat test.c void fun1(int a); void fun(int a,...) { fun1(a); } int main() { fun (10); return 0; } $ arm-none-eabi-gcc -march=armv8.1-m.main+mve+pacbti -mbranch-protection=pac-ret -mthumb -mfloat-abi=hard -fasynchronous-unwind-tables -g -O0 -S test.s Assembly output: ... fun: ... .pacspval pac ip, lr, sp .cfi_register 143, 12 push {r3, r7, ip, lr} .save {r3, r7, ra_auth_code, lr} ... .cfi_offset 143, -24 ... .cfi_restore 143 ... aut ip, lr, sp bx lr ... main: ... .pacspval pac ip, lr, sp .cfi_register 143, 12 push {r3, r7, ip, lr} .save {r3, r7, ra_auth_code, lr} ... .cfi_offset 143, -8 ... .cfi_restore 143 ... aut ip, lr, sp bx lr ... Regression tested on arm-none-eabi target and found no regressions. Ok for master? Regards, Srinath. gcc/testsuite/ChangeLog: 2022-11-04 Srinath Parvathaneni * g++.target/arm/pac-1.C: New test. * gcc.target/arm/pac-9.c: New test. 2022-11-04 Srinath Parvathaneni * config/arm/aout.h (ra_auth_code): Add entry in enum. * config/arm/arm.cc (pac_emit): Declare new global boolean variable. (emit_multi_reg_push): Add RA_AUTH_CODE register to dwarf frame expression. (arm_emit_multi_reg_pop): Restore RA_AUTH_CODE register. (arm_expand_prologue): Update frame related infomration and reg notes for pac/pacbit insn. (arm_regno_class): Check for pac pseudo reigster. (arm_dbx_register_number): Assign ra_auth_code register number in dwarf. (arm_unwind_emit_sequence): Print .save directive with ra_auth_code register. (arm_unwind_emit_set): Add entry for IP_REGNUM in switch case. (arm_unwind_emit): Update REG_CFA_REGISTER case._ (arm_conditional_register_usage): Mark ra_auth_code in fixed reigsters. * config/arm/arm.h (FIRST_PSEUDO_REGISTER): Modify. (IS_PAC_PSEUDO_REGNUM): Define. (enum reg_class): Add PAC_REG entry. * config/arm/arm.md (RA_AUTH_CODE): Define. gcc/testsuite/ChangeLog: 2022-11-04 Srinath Parvathaneni * g++.target/arm/pac-1.C: New test. * gcc.target/arm/pac-9.c: Likewise. ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/config/arm/aout.h b/gcc/config/arm/aout.h index b918ad3782fbee82320febb8b6e72ad615780261..ffeed45a678f17c63d5b42c21f020ca416cbf23f 100644 --- a/gcc/config/arm/aout.h +++ b/gcc/config/arm/aout.h @@ -74,7 +74,8 @@ "wr8", "wr9", "wr10", "wr11", \ "wr12", "wr13", "wr14", "wr15", \ "wcgr0", "wcgr1", "wcgr2", "wcgr3", \ - "cc", "vfpcc", "sfp", "afp", "apsrq", "apsrge", "p0" \ + "cc", "vfpcc", "sfp", "afp", "apsrq", "apsrge", "p0", \ + "ra_auth_code" \ } #endif diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index a2dc3fc145c52d8381c54634687376089a47e704..91c400f12568156ed29bf5d5e59460bf887fbefb 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -820,7 +820,8 @@ extern const int arm_arch_cde_coproc_bits[]; s16-s31 S VFP variable (aka d8-d15). vfpcc Not a real register. Represents the VFP condition code flags. - vpr Used to represent MVE VPR predication. */ + vpr Used to represent MVE VPR predication. + ra_auth_code Pseudo register to save PAC. */ /* The stack backtrace structure is as follows: fp points to here: | save code pointer | [fp] @@ -861,7 +862,7 @@ extern const int arm_arch_cde_coproc_bits[]; 1,1,1,1,1,1,1,1, \ 1,1,1,1, \ /* Specials. */ \ - 1,1,1,1,1,1,1 \ + 1,1,1,1,1,1,1,1 \ } /* 1 for registers not available across function calls. @@ -891,7 +892,7 @@ extern const int arm_arch_cde_coproc_bits[]; 1,1,1,1,1,1,1,1, \ 1,1,1,1, \ /* Specials. */ \ - 1,1,1,1,1,1,1 \ + 1,1,1,1,1,1,1,1 \ } #ifndef SUBTARGET_CONDITIONAL_REGISTER_USAGE @@ -1067,10 +1068,10 @@ extern const int arm_arch_cde_coproc_bits[]; && (LAST_VFP_REGNUM - (REGNUM) >= 2 * (N) - 1)) /* The number of hard registers is 16 ARM + 1 CC + 1 SFP + 1 AFP - + 1 APSRQ + 1 APSRGE + 1 VPR. */ + + 1 APSRQ + 1 APSRGE + 1 VPR + 1 Pseudo register to save PAC. */ /* Intel Wireless MMX Technology registers add 16 + 4 more. */ /* VFP (VFP3) adds 32 (64) + 1 VFPCC. */ -#define FIRST_PSEUDO_REGISTER 107 +#define FIRST_PSEUDO_REGISTER 108 #define DBX_REGISTER_NUMBER(REGNO) arm_dbx_register_number (REGNO) @@ -1257,12 +1258,15 @@ extern int arm_regs_in_sequence[]; CC_REGNUM, VFPCC_REGNUM, \ FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, \ SP_REGNUM, PC_REGNUM, APSRQ_REGNUM, \ - APSRGE_REGNUM, VPR_REGNUM \ + APSRGE_REGNUM, VPR_REGNUM, RA_AUTH_CODE \ } #define IS_VPR_REGNUM(REGNUM) \ ((REGNUM) == VPR_REGNUM) +#define IS_PAC_PSEUDO_REGNUM(REGNUM) \ + ((REGNUM) == RA_AUTH_CODE) + /* Use different register alloc ordering for Thumb. */ #define ADJUST_REG_ALLOC_ORDER arm_order_regs_for_local_alloc () @@ -1301,6 +1305,7 @@ enum reg_class SFP_REG, AFP_REG, VPR_REG, + PAC_REG, GENERAL_AND_VPR_REGS, ALL_REGS, LIM_REG_CLASSES @@ -1331,6 +1336,7 @@ enum reg_class "SFP_REG", \ "AFP_REG", \ "VPR_REG", \ + "PAC_REG", \ "GENERAL_AND_VPR_REGS", \ "ALL_REGS" \ } @@ -1360,6 +1366,7 @@ enum reg_class { 0x00000000, 0x00000000, 0x00000000, 0x00000040 }, /* SFP_REG */ \ { 0x00000000, 0x00000000, 0x00000000, 0x00000080 }, /* AFP_REG */ \ { 0x00000000, 0x00000000, 0x00000000, 0x00000400 }, /* VPR_REG. */ \ + { 0x00000000, 0x00000000, 0x00000000, 0x00000800 }, /* PAC_REG. */ \ { 0x00005FFF, 0x00000000, 0x00000000, 0x00000400 }, /* GENERAL_AND_VPR_REGS. */ \ { 0xFFFF7FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000040F } /* ALL_REGS. */ \ } diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 3c4722337fdd72586e0655e2009370ad7595fafc..414561624d2eacccc10395db757bfa3c638bb387 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -2452,6 +2452,9 @@ enum tls_reloc { TLS_DESCSEQ /* GNU scheme */ }; +/* True if PACBTI/PAC instruction is emitted. */ +static bool pac_emit = false; + /* The maximum number of insns to be used when loading a constant. */ inline static int arm_constant_limit (bool size_p) @@ -22154,7 +22157,10 @@ emit_multi_reg_push (unsigned long mask, unsigned long dwarf_regs_mask) { if (mask & (1 << i)) { - reg = gen_rtx_REG (SImode, i); + rtx reg1 = reg = gen_rtx_REG (SImode, i); + if (arm_current_function_pac_enabled_p () && i == IP_REGNUM + && pac_emit) + reg1 = gen_rtx_REG (SImode, RA_AUTH_CODE); XVECEXP (par, 0, 0) = gen_rtx_SET (gen_frame_mem @@ -22172,7 +22178,7 @@ emit_multi_reg_push (unsigned long mask, unsigned long dwarf_regs_mask) if (dwarf_regs_mask & (1 << i)) { tmp = gen_rtx_SET (gen_frame_mem (SImode, stack_pointer_rtx), - reg); + reg1); RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, dwarf_par_index++) = tmp; } @@ -22185,7 +22191,10 @@ emit_multi_reg_push (unsigned long mask, unsigned long dwarf_regs_mask) { if (mask & (1 << i)) { - reg = gen_rtx_REG (SImode, i); + rtx reg1 = reg = gen_rtx_REG (SImode, i); + if (arm_current_function_pac_enabled_p () && i == IP_REGNUM + && pac_emit) + reg1 = gen_rtx_REG (SImode, RA_AUTH_CODE); XVECEXP (par, 0, j) = gen_rtx_USE (VOIDmode, reg); @@ -22196,7 +22205,7 @@ emit_multi_reg_push (unsigned long mask, unsigned long dwarf_regs_mask) (SImode, plus_constant (Pmode, stack_pointer_rtx, 4 * j)), - reg); + reg1); RTX_FRAME_RELATED_P (tmp) = 1; XVECEXP (dwarf, 0, dwarf_par_index++) = tmp; } @@ -22281,7 +22290,9 @@ arm_emit_multi_reg_pop (unsigned long saved_regs_mask) for (j = 0, i = 0; j < num_regs; i++) if (saved_regs_mask & (1 << i)) { - reg = gen_rtx_REG (SImode, i); + rtx reg1 = reg = gen_rtx_REG (SImode, i); + if (arm_current_function_pac_enabled_p () && i == IP_REGNUM && pac_emit) + reg1 = gen_rtx_REG (SImode, RA_AUTH_CODE); if ((num_regs == 1) && emit_update && !return_in_pc) { /* Emit single load with writeback. */ @@ -22289,7 +22300,7 @@ arm_emit_multi_reg_pop (unsigned long saved_regs_mask) gen_rtx_POST_INC (Pmode, stack_pointer_rtx)); tmp = emit_insn (gen_rtx_SET (reg, tmp)); - REG_NOTES (tmp) = alloc_reg_note (REG_CFA_RESTORE, reg, dwarf); + REG_NOTES (tmp) = alloc_reg_note (REG_CFA_RESTORE, reg1, dwarf); return; } @@ -22303,7 +22314,7 @@ arm_emit_multi_reg_pop (unsigned long saved_regs_mask) /* We need to maintain a sequence for DWARF info too. As dwarf info should not have PC, skip PC. */ if (i != PC_REGNUM) - dwarf = alloc_reg_note (REG_CFA_RESTORE, reg, dwarf); + dwarf = alloc_reg_note (REG_CFA_RESTORE, reg1, dwarf); j++; } @@ -23541,9 +23552,14 @@ arm_expand_prologue (void) instruction will be added before the push of the clobbered IP (if necessary) by the bti pass. */ if (aarch_bti_enabled () && !clobber_ip) - emit_insn (gen_pacbti_nop ()); + insn = emit_insn (gen_pacbti_nop ()); else - emit_insn (gen_pac_nop ()); + insn = emit_insn (gen_pac_nop ()); + + rtx dwarf = gen_rtx_SET (ip_rtx, gen_rtx_REG (SImode, RA_AUTH_CODE)); + RTX_FRAME_RELATED_P (insn) = 1; + add_reg_note (insn, REG_CFA_REGISTER, dwarf); + pac_emit = true; } if (TARGET_APCS_FRAME && frame_pointer_needed && TARGET_ARM) @@ -25602,6 +25618,9 @@ arm_regno_class (int regno) if (IS_VPR_REGNUM (regno)) return VPR_REG; + if (IS_PAC_PSEUDO_REGNUM (regno)) + return PAC_REG; + if (TARGET_THUMB1) { if (regno == STACK_POINTER_REGNUM) @@ -29573,6 +29592,9 @@ arm_dbx_register_number (unsigned int regno) if (IS_IWMMXT_REGNUM (regno)) return 112 + regno - FIRST_IWMMXT_REGNUM; + if (IS_PAC_PSEUDO_REGNUM (regno)) + return 143; + return DWARF_FRAME_REGISTERS; } @@ -29666,7 +29688,7 @@ arm_unwind_emit_sequence (FILE * out_file, rtx p) gcc_assert (nregs); reg = REGNO (SET_SRC (XVECEXP (p, 0, 1))); - if (reg < 16) + if (reg < 16 || IS_PAC_PSEUDO_REGNUM (reg)) { /* For -Os dummy registers can be pushed at the beginning to avoid separate stack pointer adjustment. */ @@ -29723,6 +29745,8 @@ arm_unwind_emit_sequence (FILE * out_file, rtx p) double precision register names. */ if (IS_VFP_REGNUM (reg)) asm_fprintf (out_file, "d%d", (reg - FIRST_VFP_REGNUM) / 2); + else if (IS_PAC_PSEUDO_REGNUM (reg)) + asm_fprintf (asm_out_file, "ra_auth_code"); else asm_fprintf (out_file, "%r", reg); @@ -29817,7 +29841,7 @@ arm_unwind_emit_set (FILE * out_file, rtx p) /* Move from sp to reg. */ asm_fprintf (out_file, "\t.movsp %r\n", REGNO (e0)); } - else if (GET_CODE (e1) == PLUS + else if (GET_CODE (e1) == PLUS && REG_P (XEXP (e1, 0)) && REGNO (XEXP (e1, 0)) == SP_REGNUM && CONST_INT_P (XEXP (e1, 1))) @@ -29826,6 +29850,13 @@ arm_unwind_emit_set (FILE * out_file, rtx p) asm_fprintf (out_file, "\t.movsp %r, #%d\n", REGNO (e0), (int)INTVAL(XEXP (e1, 1))); } + else if (REGNO (e0) == IP_REGNUM && GET_CODE (e1) == UNSPEC) + { + if (XINT (e1, 1) == UNSPEC_PAC_NOP) + asm_fprintf (out_file, "\t.pacspval\n"); + else if (XINT (e1, 1) != UNSPEC_PACBTI_NOP) + abort (); + } else abort (); break; @@ -29880,8 +29911,15 @@ arm_unwind_emit (FILE * out_file, rtx_insn *insn) src = SET_SRC (pat); dest = SET_DEST (pat); - gcc_assert (src == stack_pointer_rtx); + gcc_assert (src == stack_pointer_rtx + || IS_PAC_PSEUDO_REGNUM (REGNO (src))); reg = REGNO (dest); + + if (IS_PAC_PSEUDO_REGNUM (REGNO (src))) + { + pat = PATTERN (insn); + goto found; + } asm_fprintf (out_file, "\t.unwind_raw 0, 0x%x @ vsp = r%d\n", reg + 0x90, reg); } @@ -30590,6 +30628,9 @@ arm_conditional_register_usage (void) global_regs[ARM_HARD_FRAME_POINTER_REGNUM] = 1; } + if (TARGET_HAVE_PACBTI) + fixed_regs[RA_AUTH_CODE] = 0; + /* The Q and GE bits are only accessed via special ACLE patterns. */ CLEAR_HARD_REG_BIT (operand_reg_set, APSRQ_REGNUM); CLEAR_HARD_REG_BIT (operand_reg_set, APSRGE_REGNUM); diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 6e86811ee05f54f0e4bec3a5e632e3bb541fc423..3aea721f9b82445f6b318fd09dcd3d260683baa7 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -42,6 +42,7 @@ (APSRQ_REGNUM 104) ; Q bit pseudo register (APSRGE_REGNUM 105) ; GE bits pseudo register (VPR_REGNUM 106) ; Vector Predication Register - MVE register. + (RA_AUTH_CODE 107) ; Pseudo register to save PAC. ] ) ;; 3rd operand to select_dominance_cc_mode diff --git a/gcc/testsuite/g++.target/arm/pac-1.C b/gcc/testsuite/g++.target/arm/pac-1.C new file mode 100644 index 0000000000000000000000000000000000000000..96a3ba51362e02a5fe90b517ee28c41e87024475 --- /dev/null +++ b/gcc/testsuite/g++.target/arm/pac-1.C @@ -0,0 +1,36 @@ +/* Check that GCC does .save and .cfi_offset directives with RA_AUTH_CODE pseudo hard-register. */ +/* { dg-do compile } */ +/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ +/* { dg-options "-march=armv8.1-m.main+mve+pacbti -mbranch-protection=pac-ret -mthumb -mfloat-abi=hard -g -O0" } */ + +__attribute__((noinline)) void +fn1 (int a, int b, int c) +{ + if (a != b + c) + __builtin_abort (); + else + throw b+c; +} + +int main () +{ + int a = 120; + try + { + fn1 (a, 40, 80); + } + catch (int x) + { + if (x != a) + __builtin_abort (); + else + return 0; + } +} + +/* { dg-final { scan-assembler-times "\.pacspval" 2 } } */ +/* { dg-final { scan-assembler-times "pac ip, lr, sp" 2 } } */ +/* { dg-final { scan-assembler-times "\.cfi_register 143, 12" 2 } } */ +/* { dg-final { scan-assembler-times "\.save {r7, ra_auth_code, lr}" 1 } } */ +/* { dg-final { scan-assembler-times "\.cfi_offset 143, -8" 2 } } */ +/* { dg-final { scan-assembler-times "\.save {r4, r7, ra_auth_code, lr}" 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/pac-9.c b/gcc/testsuite/gcc.target/arm/pac-9.c new file mode 100644 index 0000000000000000000000000000000000000000..283b6786e7fe50f8e3cddea5161743a7553fe6eb --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/pac-9.c @@ -0,0 +1,32 @@ +/* Check that GCC does .save and .cfi_offset directives with RA_AUTH_CODE pseudo hard-register. */ +/* { dg-do compile } */ +/* { dg-require-effective-target mbranch_protection_ok } */ +/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */ +/* { dg-options "-march=armv8.1-m.main+mve+pacbti -mbranch-protection=pac-ret -mthumb -mfloat-abi=hard -fasynchronous-unwind-tables -g -O0" } */ + +#include "stdio.h" + +__attribute__((noinline)) int +fn1 (int a) +{ + const char *fmt = "branch-protection"; + int fun1(int x,const char *fmt,int c,int d) + { + printf("string = %s\n",fmt); + return x+c+d; + } + return fun1(a,fmt,10,10); +} + +int main (void) +{ + return fn1 (40); +} + +/* { dg-final { scan-assembler-times "\.pacspval" 3 } } */ +/* { dg-final { scan-assembler-times "pac ip, lr, sp" 3 } } */ +/* { dg-final { scan-assembler-times "\.cfi_register 143, 12" 3 } } */ +/* { dg-final { scan-assembler-times "\.save {r7, ra_auth_code, lr}" 2 } } */ +/* { dg-final { scan-assembler-times "\.cfi_offset 143, -8" 2 } } */ +/* { dg-final { scan-assembler-times "\.save {r3, r7, ra_auth_code, lr}" 1 } } */ +/* { dg-final { scan-assembler-times "\.cfi_offset 143, -12" 1 } } */ --===============1001827178374506076== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="rb14831.patch" ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FvdXQuaCBiL2djYy9jb25maWcvYXJtL2FvdXQu aAppbmRleCBiOTE4YWQzNzgyZmJlZTgyMzIwZmViYjhiNmU3MmFkNjE1NzgwMjYxLi5mZmVlZDQ1 YTY3OGYxN2M2M2Q1YjQyYzIxZjAyMGNhNDE2Y2JmMjNmIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FybS9hb3V0LmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYW91dC5oCkBAIC03NCw3ICs3NCw4IEBA CiAgICJ3cjgiLCAgICJ3cjkiLCAgICJ3cjEwIiwgICJ3cjExIiwJCQkJXAogICAid3IxMiIsICAi d3IxMyIsICAid3IxNCIsICAid3IxNSIsCQkJCVwKICAgIndjZ3IwIiwgIndjZ3IxIiwgIndjZ3Iy IiwgIndjZ3IzIiwJCQkJXAotICAiY2MiLCAidmZwY2MiLCAic2ZwIiwgImFmcCIsICJhcHNycSIs ICJhcHNyZ2UiLCAicDAiCQlcCisgICJjYyIsICJ2ZnBjYyIsICJzZnAiLCAiYWZwIiwgImFwc3Jx IiwgImFwc3JnZSIsICJwMCIsCQlcCisgICJyYV9hdXRoX2NvZGUiCQkJCQkJXAogfQogI2VuZGlm CiAKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5oIGIvZ2NjL2NvbmZpZy9hcm0vYXJt LmgKaW5kZXggYTJkYzNmYzE0NWM1MmQ4MzgxYzU0NjM0Njg3Mzc2MDg5YTQ3ZTcwNC4uOTFjNDAw ZjEyNTY4MTU2ZWQyOWJmNWQ1ZTU5NDYwYmY4ODdmYmVmYiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hcm0vYXJtLmgKKysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmgKQEAgLTgyMCw3ICs4MjAsOCBA QCBleHRlcm4gY29uc3QgaW50IGFybV9hcmNoX2NkZV9jb3Byb2NfYml0c1tdOwogCXMxNi1zMzEJ ICAgICAgUwlWRlAgdmFyaWFibGUgKGFrYSBkOC1kMTUpLgogCXZmcGNjCQlOb3QgYSByZWFsIHJl Z2lzdGVyLiAgUmVwcmVzZW50cyB0aGUgVkZQIGNvbmRpdGlvbgogCQkJY29kZSBmbGFncy4KLQl2 cHIJCVVzZWQgdG8gcmVwcmVzZW50IE1WRSBWUFIgcHJlZGljYXRpb24uICAqLworCXZwcgkJVXNl ZCB0byByZXByZXNlbnQgTVZFIFZQUiBwcmVkaWNhdGlvbi4KKwlyYV9hdXRoX2NvZGUJUHNldWRv IHJlZ2lzdGVyIHRvIHNhdmUgUEFDLiAgKi8KIAogLyogVGhlIHN0YWNrIGJhY2t0cmFjZSBzdHJ1 Y3R1cmUgaXMgYXMgZm9sbG93czoKICAgZnAgcG9pbnRzIHRvIGhlcmU6ICB8ICBzYXZlIGNvZGUg cG9pbnRlciAgfCAgICAgIFtmcF0KQEAgLTg2MSw3ICs4NjIsNyBAQCBleHRlcm4gY29uc3QgaW50 IGFybV9hcmNoX2NkZV9jb3Byb2NfYml0c1tdOwogICAxLDEsMSwxLDEsMSwxLDEsCQlcCiAgIDEs MSwxLDEsCQkJXAogICAvKiBTcGVjaWFscy4gICovCQlcCi0gIDEsMSwxLDEsMSwxLDEJCQlcCisg IDEsMSwxLDEsMSwxLDEsMQkJXAogfQogCiAvKiAxIGZvciByZWdpc3RlcnMgbm90IGF2YWlsYWJs ZSBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuCkBAIC04OTEsNyArODkyLDcgQEAgZXh0ZXJuIGNvbnN0 IGludCBhcm1fYXJjaF9jZGVfY29wcm9jX2JpdHNbXTsKICAgMSwxLDEsMSwxLDEsMSwxLAkJXAog ICAxLDEsMSwxLAkJCVwKICAgLyogU3BlY2lhbHMuICAqLwkJXAotICAxLDEsMSwxLDEsMSwxCQkJ XAorICAxLDEsMSwxLDEsMSwxLDEJCVwKIH0KIAogI2lmbmRlZiBTVUJUQVJHRVRfQ09ORElUSU9O QUxfUkVHSVNURVJfVVNBR0UKQEAgLTEwNjcsMTAgKzEwNjgsMTAgQEAgZXh0ZXJuIGNvbnN0IGlu dCBhcm1fYXJjaF9jZGVfY29wcm9jX2JpdHNbXTsKICAgICYmIChMQVNUX1ZGUF9SRUdOVU0gLSAo UkVHTlVNKSA+PSAyICogKE4pIC0gMSkpCiAKIC8qIFRoZSBudW1iZXIgb2YgaGFyZCByZWdpc3Rl cnMgaXMgMTYgQVJNICsgMSBDQyArIDEgU0ZQICsgMSBBRlAKLSAgICsgMSBBUFNSUSArIDEgQVBT UkdFICsgMSBWUFIuICAqLworICAgKyAxIEFQU1JRICsgMSBBUFNSR0UgKyAxIFZQUiArIDEgUHNl dWRvIHJlZ2lzdGVyIHRvIHNhdmUgUEFDLiAgKi8KIC8qIEludGVsIFdpcmVsZXNzIE1NWCBUZWNo bm9sb2d5IHJlZ2lzdGVycyBhZGQgMTYgKyA0IG1vcmUuICAqLwogLyogVkZQIChWRlAzKSBhZGRz IDMyICg2NCkgKyAxIFZGUENDLiAgKi8KLSNkZWZpbmUgRklSU1RfUFNFVURPX1JFR0lTVEVSICAg MTA3CisjZGVmaW5lIEZJUlNUX1BTRVVET19SRUdJU1RFUiAgIDEwOAogCiAjZGVmaW5lIERCWF9S RUdJU1RFUl9OVU1CRVIoUkVHTk8pIGFybV9kYnhfcmVnaXN0ZXJfbnVtYmVyIChSRUdOTykKIApA QCAtMTI1NywxMiArMTI1OCwxNSBAQCBleHRlcm4gaW50IGFybV9yZWdzX2luX3NlcXVlbmNlW107 CiAgIENDX1JFR05VTSwgVkZQQ0NfUkVHTlVNLAkJCVwKICAgRlJBTUVfUE9JTlRFUl9SRUdOVU0s IEFSR19QT0lOVEVSX1JFR05VTSwJXAogICBTUF9SRUdOVU0sIFBDX1JFR05VTSwgQVBTUlFfUkVH TlVNLAkJXAotICBBUFNSR0VfUkVHTlVNLCBWUFJfUkVHTlVNCQkJXAorICBBUFNSR0VfUkVHTlVN LCBWUFJfUkVHTlVNLCBSQV9BVVRIX0NPREUJXAogfQogCiAjZGVmaW5lIElTX1ZQUl9SRUdOVU0o UkVHTlVNKSBcCiAgICgoUkVHTlVNKSA9PSBWUFJfUkVHTlVNKQogCisjZGVmaW5lIElTX1BBQ19Q U0VVRE9fUkVHTlVNKFJFR05VTSkgXAorICAoKFJFR05VTSkgPT0gUkFfQVVUSF9DT0RFKQorCiAv KiBVc2UgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jIG9yZGVyaW5nIGZvciBUaHVtYi4gICovCiAj ZGVmaW5lIEFESlVTVF9SRUdfQUxMT0NfT1JERVIgYXJtX29yZGVyX3JlZ3NfZm9yX2xvY2FsX2Fs bG9jICgpCiAKQEAgLTEzMDEsNiArMTMwNSw3IEBAIGVudW0gcmVnX2NsYXNzCiAgIFNGUF9SRUcs CiAgIEFGUF9SRUcsCiAgIFZQUl9SRUcsCisgIFBBQ19SRUcsCiAgIEdFTkVSQUxfQU5EX1ZQUl9S RUdTLAogICBBTExfUkVHUywKICAgTElNX1JFR19DTEFTU0VTCkBAIC0xMzMxLDYgKzEzMzYsNyBA QCBlbnVtIHJlZ19jbGFzcwogICAiU0ZQX1JFRyIsCQlcCiAgICJBRlBfUkVHIiwJCVwKICAgIlZQ Ul9SRUciLAkJXAorICAiUEFDX1JFRyIsCQlcCiAgICJHRU5FUkFMX0FORF9WUFJfUkVHUyIsIFwK ICAgIkFMTF9SRUdTIgkJXAogfQpAQCAtMTM2MCw2ICsxMzY2LDcgQEAgZW51bSByZWdfY2xhc3MK ICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0sIC8q IFNGUF9SRUcgKi8JXAogICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4 MDAwMDAwODAgfSwgLyogQUZQX1JFRyAqLwlcCiAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwg MHgwMDAwMDAwMCwgMHgwMDAwMDQwMCB9LCAvKiBWUFJfUkVHLiAgKi8JXAorICB7IDB4MDAwMDAw MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDA4MDAgfSwgLyogUEFDX1JFRy4gICov CVwKICAgeyAweDAwMDA1RkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwNDAwIH0s IC8qIEdFTkVSQUxfQU5EX1ZQUl9SRUdTLiAgKi8gXAogICB7IDB4RkZGRjdGRkYsIDB4RkZGRkZG RkYsIDB4RkZGRkZGRkYsIDB4MDAwMDA0MEYgfSAgLyogQUxMX1JFR1MuICAqLwlcCiB9CmRpZmYg LS1naXQgYS9nY2MvY29uZmlnL2FybS9hcm0uY2MgYi9nY2MvY29uZmlnL2FybS9hcm0uY2MKaW5k ZXggM2M0NzIyMzM3ZmRkNzI1ODZlMDY1NWUyMDA5MzcwYWQ3NTk1ZmFmYy4uNDE0NTYxNjI0ZDJl YWNjY2MxMDM5NWRiNzU3YmZhM2M2MzhiYjM4NyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0v YXJtLmNjCisrKyBiL2djYy9jb25maWcvYXJtL2FybS5jYwpAQCAtMjQ1Miw2ICsyNDUyLDkgQEAg ZW51bSB0bHNfcmVsb2MgewogICBUTFNfREVTQ1NFUQkvKiBHTlUgc2NoZW1lICovCiB9OwogCisv KiBUcnVlIGlmIFBBQ0JUSS9QQUMgaW5zdHJ1Y3Rpb24gaXMgZW1pdHRlZC4gICovCitzdGF0aWMg Ym9vbCBwYWNfZW1pdCA9IGZhbHNlOworCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW5zbnMg dG8gYmUgdXNlZCB3aGVuIGxvYWRpbmcgYSBjb25zdGFudC4gICovCiBpbmxpbmUgc3RhdGljIGlu dAogYXJtX2NvbnN0YW50X2xpbWl0IChib29sIHNpemVfcCkKQEAgLTIyMTU0LDcgKzIyMTU3LDEw IEBAIGVtaXRfbXVsdGlfcmVnX3B1c2ggKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9u ZyBkd2FyZl9yZWdzX21hc2spCiAgICAgewogICAgICAgaWYgKG1hc2sgJiAoMSA8PCBpKSkKIAl7 Ci0JICByZWcgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBpKTsKKwkgIHJ0eCByZWcxID0gcmVnID0g Z2VuX3J0eF9SRUcgKFNJbW9kZSwgaSk7CisJICBpZiAoYXJtX2N1cnJlbnRfZnVuY3Rpb25fcGFj X2VuYWJsZWRfcCAoKSAmJiBpID09IElQX1JFR05VTQorCSAgICAgICYmIHBhY19lbWl0KQorCSAg ICByZWcxID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkFfQVVUSF9DT0RFKTsKIAogCSAgWFZFQ0VY UCAocGFyLCAwLCAwKQogCSAgICA9IGdlbl9ydHhfU0VUIChnZW5fZnJhbWVfbWVtCkBAIC0yMjE3 Miw3ICsyMjE3OCw3IEBAIGVtaXRfbXVsdGlfcmVnX3B1c2ggKHVuc2lnbmVkIGxvbmcgbWFzaywg dW5zaWduZWQgbG9uZyBkd2FyZl9yZWdzX21hc2spCiAJICBpZiAoZHdhcmZfcmVnc19tYXNrICYg KDEgPDwgaSkpCiAJICAgIHsKIAkgICAgICB0bXAgPSBnZW5fcnR4X1NFVCAoZ2VuX2ZyYW1lX21l bSAoU0ltb2RlLCBzdGFja19wb2ludGVyX3J0eCksCi0JCQkJIHJlZyk7CisJCQkJIHJlZzEpOwog CSAgICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOwogCSAgICAgIFhWRUNFWFAgKGR3 YXJmLCAwLCBkd2FyZl9wYXJfaW5kZXgrKykgPSB0bXA7CiAJICAgIH0KQEAgLTIyMTg1LDcgKzIy MTkxLDEwIEBAIGVtaXRfbXVsdGlfcmVnX3B1c2ggKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu ZWQgbG9uZyBkd2FyZl9yZWdzX21hc2spCiAgICAgewogICAgICAgaWYgKG1hc2sgJiAoMSA8PCBp KSkKIAl7Ci0JICByZWcgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBpKTsKKwkgIHJ0eCByZWcxID0g cmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgaSk7CisJICBpZiAoYXJtX2N1cnJlbnRfZnVuY3Rp b25fcGFjX2VuYWJsZWRfcCAoKSAmJiBpID09IElQX1JFR05VTQorCSAgICAgICYmIHBhY19lbWl0 KQorCSAgICByZWcxID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkFfQVVUSF9DT0RFKTsKIAogCSAg WFZFQ0VYUCAocGFyLCAwLCBqKSA9IGdlbl9ydHhfVVNFIChWT0lEbW9kZSwgcmVnKTsKIApAQCAt MjIxOTYsNyArMjIyMDUsNyBAQCBlbWl0X211bHRpX3JlZ19wdXNoICh1bnNpZ25lZCBsb25nIG1h c2ssIHVuc2lnbmVkIGxvbmcgZHdhcmZfcmVnc19tYXNrKQogCQkJICAgICAgIChTSW1vZGUsCiAJ CQkJcGx1c19jb25zdGFudCAoUG1vZGUsIHN0YWNrX3BvaW50ZXJfcnR4LAogCQkJCQkgICAgICAg NCAqIGopKSwKLQkJCSAgICAgICByZWcpOworCQkJICAgICAgIHJlZzEpOwogCSAgICAgIFJUWF9G UkFNRV9SRUxBVEVEX1AgKHRtcCkgPSAxOwogCSAgICAgIFhWRUNFWFAgKGR3YXJmLCAwLCBkd2Fy Zl9wYXJfaW5kZXgrKykgPSB0bXA7CiAJICAgIH0KQEAgLTIyMjgxLDcgKzIyMjkwLDkgQEAgYXJt X2VtaXRfbXVsdGlfcmVnX3BvcCAodW5zaWduZWQgbG9uZyBzYXZlZF9yZWdzX21hc2spCiAgIGZv ciAoaiA9IDAsIGkgPSAwOyBqIDwgbnVtX3JlZ3M7IGkrKykKICAgICBpZiAoc2F2ZWRfcmVnc19t YXNrICYgKDEgPDwgaSkpCiAgICAgICB7Ci0gICAgICAgIHJlZyA9IGdlbl9ydHhfUkVHIChTSW1v ZGUsIGkpOworCXJ0eCByZWcxID0gcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgaSk7CisJaWYg KGFybV9jdXJyZW50X2Z1bmN0aW9uX3BhY19lbmFibGVkX3AgKCkgJiYgaSA9PSBJUF9SRUdOVU0g JiYgcGFjX2VtaXQpCisJICByZWcxID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUkFfQVVUSF9DT0RF KTsKICAgICAgICAgaWYgKChudW1fcmVncyA9PSAxKSAmJiBlbWl0X3VwZGF0ZSAmJiAhcmV0dXJu X2luX3BjKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIEVtaXQgc2luZ2xlIGxvYWQgd2l0 aCB3cml0ZWJhY2suICAqLwpAQCAtMjIyODksNyArMjIzMDAsNyBAQCBhcm1fZW1pdF9tdWx0aV9y ZWdfcG9wICh1bnNpZ25lZCBsb25nIHNhdmVkX3JlZ3NfbWFzaykKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdlbl9ydHhfUE9TVF9JTkMgKFBtb2RlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlcl9ydHgpKTsK ICAgICAgICAgICAgIHRtcCA9IGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKHJlZywgdG1wKSk7Ci0g ICAgICAgICAgICBSRUdfTk9URVMgKHRtcCkgPSBhbGxvY19yZWdfbm90ZSAoUkVHX0NGQV9SRVNU T1JFLCByZWcsIGR3YXJmKTsKKwkgICAgUkVHX05PVEVTICh0bXApID0gYWxsb2NfcmVnX25vdGUg KFJFR19DRkFfUkVTVE9SRSwgcmVnMSwgZHdhcmYpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg ICAgICAgIH0KIApAQCAtMjIzMDMsNyArMjIzMTQsNyBAQCBhcm1fZW1pdF9tdWx0aV9yZWdfcG9w ICh1bnNpZ25lZCBsb25nIHNhdmVkX3JlZ3NfbWFzaykKICAgICAgICAgLyogV2UgbmVlZCB0byBt YWludGFpbiBhIHNlcXVlbmNlIGZvciBEV0FSRiBpbmZvIHRvby4gIEFzIGR3YXJmIGluZm8KICAg ICAgICAgICAgc2hvdWxkIG5vdCBoYXZlIFBDLCBza2lwIFBDLiAgKi8KICAgICAgICAgaWYgKGkg IT0gUENfUkVHTlVNKQotICAgICAgICAgIGR3YXJmID0gYWxsb2NfcmVnX25vdGUgKFJFR19DRkFf UkVTVE9SRSwgcmVnLCBkd2FyZik7CisJICBkd2FyZiA9IGFsbG9jX3JlZ19ub3RlIChSRUdfQ0ZB X1JFU1RPUkUsIHJlZzEsIGR3YXJmKTsKIAogICAgICAgICBqKys7CiAgICAgICB9CkBAIC0yMzU0 MSw5ICsyMzU1MiwxNCBAQCBhcm1fZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQogICAgICAgICAgaW5z dHJ1Y3Rpb24gd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIHB1c2ggb2YgdGhlIGNsb2JiZXJlZCBJ UAogICAgICAgICAgKGlmIG5lY2Vzc2FyeSkgYnkgdGhlIGJ0aSBwYXNzLiAgKi8KICAgICAgIGlm IChhYXJjaF9idGlfZW5hYmxlZCAoKSAmJiAhY2xvYmJlcl9pcCkKLQllbWl0X2luc24gKGdlbl9w YWNidGlfbm9wICgpKTsKKwlpbnNuID0gZW1pdF9pbnNuIChnZW5fcGFjYnRpX25vcCAoKSk7CiAg ICAgICBlbHNlCi0JZW1pdF9pbnNuIChnZW5fcGFjX25vcCAoKSk7CisJaW5zbiA9IGVtaXRfaW5z biAoZ2VuX3BhY19ub3AgKCkpOworCisgICAgICBydHggZHdhcmYgPSBnZW5fcnR4X1NFVCAoaXBf cnR4LCBnZW5fcnR4X1JFRyAoU0ltb2RlLCBSQV9BVVRIX0NPREUpKTsKKyAgICAgIFJUWF9GUkFN RV9SRUxBVEVEX1AgKGluc24pID0gMTsKKyAgICAgIGFkZF9yZWdfbm90ZSAoaW5zbiwgUkVHX0NG QV9SRUdJU1RFUiwgZHdhcmYpOworICAgICAgcGFjX2VtaXQgID0gdHJ1ZTsKICAgICB9CiAKICAg aWYgKFRBUkdFVF9BUENTX0ZSQU1FICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkICYmIFRBUkdFVF9B Uk0pCkBAIC0yNTYwMiw2ICsyNTYxOCw5IEBAIGFybV9yZWdub19jbGFzcyAoaW50IHJlZ25vKQog ICBpZiAoSVNfVlBSX1JFR05VTSAocmVnbm8pKQogICAgIHJldHVybiBWUFJfUkVHOwogCisgIGlm IChJU19QQUNfUFNFVURPX1JFR05VTSAocmVnbm8pKQorICAgIHJldHVybiBQQUNfUkVHOworCiAg IGlmIChUQVJHRVRfVEhVTUIxKQogICAgIHsKICAgICAgIGlmIChyZWdubyA9PSBTVEFDS19QT0lO VEVSX1JFR05VTSkKQEAgLTI5NTczLDYgKzI5NTkyLDkgQEAgYXJtX2RieF9yZWdpc3Rlcl9udW1i ZXIgKHVuc2lnbmVkIGludCByZWdubykKICAgaWYgKElTX0lXTU1YVF9SRUdOVU0gKHJlZ25vKSkK ICAgICByZXR1cm4gMTEyICsgcmVnbm8gLSBGSVJTVF9JV01NWFRfUkVHTlVNOwogCisgIGlmIChJ U19QQUNfUFNFVURPX1JFR05VTSAocmVnbm8pKQorICAgIHJldHVybiAxNDM7CisKICAgcmV0dXJu IERXQVJGX0ZSQU1FX1JFR0lTVEVSUzsKIH0KIApAQCAtMjk2NjYsNyArMjk2ODgsNyBAQCBhcm1f dW53aW5kX2VtaXRfc2VxdWVuY2UgKEZJTEUgKiBvdXRfZmlsZSwgcnR4IHApCiAgIGdjY19hc3Nl cnQgKG5yZWdzKTsKIAogICByZWcgPSBSRUdOTyAoU0VUX1NSQyAoWFZFQ0VYUCAocCwgMCwgMSkp KTsKLSAgaWYgKHJlZyA8IDE2KQorICBpZiAocmVnIDwgMTYgfHwgSVNfUEFDX1BTRVVET19SRUdO VU0gKHJlZykpCiAgICAgewogICAgICAgLyogRm9yIC1PcyBkdW1teSByZWdpc3RlcnMgY2FuIGJl IHB1c2hlZCBhdCB0aGUgYmVnaW5uaW5nIHRvCiAJIGF2b2lkIHNlcGFyYXRlIHN0YWNrIHBvaW50 ZXIgYWRqdXN0bWVudC4gICovCkBAIC0yOTcyMyw2ICsyOTc0NSw4IEBAIGFybV91bndpbmRfZW1p dF9zZXF1ZW5jZSAoRklMRSAqIG91dF9maWxlLCBydHggcCkKIAkgZG91YmxlIHByZWNpc2lvbiBy ZWdpc3RlciBuYW1lcy4gICovCiAgICAgICBpZiAoSVNfVkZQX1JFR05VTSAocmVnKSkKIAlhc21f ZnByaW50ZiAob3V0X2ZpbGUsICJkJWQiLCAocmVnIC0gRklSU1RfVkZQX1JFR05VTSkgLyAyKTsK KyAgICAgIGVsc2UgaWYgKElTX1BBQ19QU0VVRE9fUkVHTlVNIChyZWcpKQorCWFzbV9mcHJpbnRm IChhc21fb3V0X2ZpbGUsICJyYV9hdXRoX2NvZGUiKTsKICAgICAgIGVsc2UKIAlhc21fZnByaW50 ZiAob3V0X2ZpbGUsICIlciIsIHJlZyk7CiAKQEAgLTI5ODE3LDcgKzI5ODQxLDcgQEAgYXJtX3Vu d2luZF9lbWl0X3NldCAoRklMRSAqIG91dF9maWxlLCBydHggcCkKIAkgIC8qIE1vdmUgZnJvbSBz cCB0byByZWcuICAqLwogCSAgYXNtX2ZwcmludGYgKG91dF9maWxlLCAiXHQubW92c3AgJXJcbiIs IFJFR05PIChlMCkpOwogCX0KLSAgICAgZWxzZSBpZiAoR0VUX0NPREUgKGUxKSA9PSBQTFVTCisg ICAgICBlbHNlIGlmIChHRVRfQ09ERSAoZTEpID09IFBMVVMKIAkgICAgICAmJiBSRUdfUCAoWEVY UCAoZTEsIDApKQogCSAgICAgICYmIFJFR05PIChYRVhQIChlMSwgMCkpID09IFNQX1JFR05VTQog CSAgICAgICYmIENPTlNUX0lOVF9QIChYRVhQIChlMSwgMSkpKQpAQCAtMjk4MjYsNiArMjk4NTAs MTMgQEAgYXJtX3Vud2luZF9lbWl0X3NldCAoRklMRSAqIG91dF9maWxlLCBydHggcCkKIAkgIGFz bV9mcHJpbnRmIChvdXRfZmlsZSwgIlx0Lm1vdnNwICVyLCAjJWRcbiIsCiAJCSAgICAgICBSRUdO TyAoZTApLCAoaW50KUlOVFZBTChYRVhQIChlMSwgMSkpKTsKIAl9CisgICAgICBlbHNlIGlmIChS RUdOTyAoZTApID09IElQX1JFR05VTSAmJiBHRVRfQ09ERSAoZTEpID09IFVOU1BFQykKKwl7CisJ ICBpZiAoWElOVCAoZTEsIDEpID09IFVOU1BFQ19QQUNfTk9QKQorCSAgICBhc21fZnByaW50ZiAo b3V0X2ZpbGUsICJcdC5wYWNzcHZhbFxuIik7CisJICBlbHNlIGlmIChYSU5UIChlMSwgMSkgIT0g VU5TUEVDX1BBQ0JUSV9OT1ApCisJICAgIGFib3J0ICgpOworCX0KICAgICAgIGVsc2UKIAlhYm9y dCAoKTsKICAgICAgIGJyZWFrOwpAQCAtMjk4ODAsOCArMjk5MTEsMTUgQEAgYXJtX3Vud2luZF9l bWl0IChGSUxFICogb3V0X2ZpbGUsIHJ0eF9pbnNuICppbnNuKQogCSAgICBzcmMgPSBTRVRfU1JD IChwYXQpOwogCSAgICBkZXN0ID0gU0VUX0RFU1QgKHBhdCk7CiAKLQkgICAgZ2NjX2Fzc2VydCAo c3JjID09IHN0YWNrX3BvaW50ZXJfcnR4KTsKKwkgICAgZ2NjX2Fzc2VydCAoc3JjID09IHN0YWNr X3BvaW50ZXJfcnR4CisJCQl8fCBJU19QQUNfUFNFVURPX1JFR05VTSAoUkVHTk8gKHNyYykpKTsK IAkgICAgcmVnID0gUkVHTk8gKGRlc3QpOworCisJICAgIGlmIChJU19QQUNfUFNFVURPX1JFR05V TSAoUkVHTk8gKHNyYykpKQorCSAgICAgIHsKKwkJcGF0ID0gUEFUVEVSTiAoaW5zbik7CisJCWdv dG8gZm91bmQ7CisJICAgICAgfQogCSAgICBhc21fZnByaW50ZiAob3V0X2ZpbGUsICJcdC51bndp bmRfcmF3IDAsIDB4JXggQCB2c3AgPSByJWRcbiIsCiAJCQkgcmVnICsgMHg5MCwgcmVnKTsKIAkg IH0KQEAgLTMwNTkwLDYgKzMwNjI4LDkgQEAgYXJtX2NvbmRpdGlvbmFsX3JlZ2lzdGVyX3VzYWdl ICh2b2lkKQogCWdsb2JhbF9yZWdzW0FSTV9IQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNXSA9IDE7 CiAgICAgfQogCisgIGlmIChUQVJHRVRfSEFWRV9QQUNCVEkpCisgICAgZml4ZWRfcmVnc1tSQV9B VVRIX0NPREVdID0gMDsKKwogICAvKiBUaGUgUSBhbmQgR0UgYml0cyBhcmUgb25seSBhY2Nlc3Nl ZCB2aWEgc3BlY2lhbCBBQ0xFIHBhdHRlcm5zLiAgKi8KICAgQ0xFQVJfSEFSRF9SRUdfQklUIChv cGVyYW5kX3JlZ19zZXQsIEFQU1JRX1JFR05VTSk7CiAgIENMRUFSX0hBUkRfUkVHX0JJVCAob3Bl cmFuZF9yZWdfc2V0LCBBUFNSR0VfUkVHTlVNKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJt L2FybS5tZCBiL2djYy9jb25maWcvYXJtL2FybS5tZAppbmRleCA2ZTg2ODExZWUwNWY1NGYwZTRi ZWMzYTVlNjMyZTNiYjU0MWZjNDIzLi4zYWVhNzIxZjliODI0NDVmNmIzMThmZDA5ZGNkM2QyNjA2 ODNiYWE3IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9hcm0ubWQKKysrIGIvZ2NjL2NvbmZp Zy9hcm0vYXJtLm1kCkBAIC00Miw2ICs0Miw3IEBACiAgICAoQVBTUlFfUkVHTlVNICAgIDEwNCkJ OyBRIGJpdCBwc2V1ZG8gcmVnaXN0ZXIKICAgIChBUFNSR0VfUkVHTlVNICAgMTA1KQk7IEdFIGJp dHMgcHNldWRvIHJlZ2lzdGVyCiAgICAoVlBSX1JFR05VTSAgICAgIDEwNikJOyBWZWN0b3IgUHJl ZGljYXRpb24gUmVnaXN0ZXIgLSBNVkUgcmVnaXN0ZXIuCisgICAoUkFfQVVUSF9DT0RFICAgIDEw NykJOyBQc2V1ZG8gcmVnaXN0ZXIgdG8gc2F2ZSBQQUMuCiAgIF0KICkKIDs7IDNyZCBvcGVyYW5k IHRvIHNlbGVjdF9kb21pbmFuY2VfY2NfbW9kZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n KysudGFyZ2V0L2FybS9wYWMtMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysudGFyZ2V0L2FybS9wYWMt MS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjk2YTNiYTUxMzYyZTAyYTVmZTkwYjUxN2VlMjhjNDFlODcwMjQ0NzUK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy50YXJnZXQvYXJtL3BhYy0xLkMK QEAgLTAsMCArMSwzNiBAQAorLyogQ2hlY2sgdGhhdCBHQ0MgZG9lcyAuc2F2ZSBhbmQgLmNmaV9v ZmZzZXQgZGlyZWN0aXZlcyB3aXRoIFJBX0FVVEhfQ09ERSBwc2V1ZG8gaGFyZC1yZWdpc3Rlci4g ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1za2lwLWlmICJhdm9pZCBjb25m bGljdGluZyBtdWx0aWxpYiBvcHRpb25zIiB7ICotKi0qIH0geyAiLW1hcm0iICItbWNwdT0qIiB9 IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPWFybXY4LjEtbS5tYWluK212ZStwYWNidGkg LW1icmFuY2gtcHJvdGVjdGlvbj1wYWMtcmV0IC1tdGh1bWIgLW1mbG9hdC1hYmk9aGFyZCAtZyAt TzAiIH0gKi8KKworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSB2b2lkCitmbjEgKGludCBhLCBp bnQgYiwgaW50IGMpCit7CisgIGlmIChhICE9IGIgKyBjKQorICAgIF9fYnVpbHRpbl9hYm9ydCAo KTsKKyAgZWxzZQorICAgIHRocm93IGIrYzsKK30KKworaW50IG1haW4gKCkKK3sKKyAgaW50IGEg PSAxMjA7CisgIHRyeQorICAgIHsKKyAgICAgIGZuMSAoYSwgNDAsIDgwKTsKKyAgICB9CisgIGNh dGNoIChpbnQgeCkKKyAgICB7CisgICAgICBpZiAoeCAhPSBhKQorICAgICAgICBfX2J1aWx0aW5f YWJvcnQgKCk7CisgICAgICBlbHNlCisJcmV0dXJuIDA7CisgICAgfQorfQorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlwucGFjc3B2YWwiIDIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBhYwlpcCwgbHIsIHNwIiAyIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcLmNmaV9yZWdpc3RlciAxNDMs IDEyIiAyIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcLnNh dmUge3I3LCByYV9hdXRoX2NvZGUsIGxyfSIgMSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAiXC5jZmlfb2Zmc2V0IDE0MywgLTgiIDIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlwuc2F2ZSB7cjQsIHI3LCByYV9hdXRoX2Nv ZGUsIGxyfSIgMSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vcGFjLTkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vcGFjLTkuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi4yODNiNjc4NmU3ZmU1MGY4ZTNjZGRlYTUxNjE3NDNhNzU1M2ZlNmViCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9wYWMtOS5jCkBAIC0wLDAgKzEs MzIgQEAKKy8qIENoZWNrIHRoYXQgR0NDIGRvZXMgLnNhdmUgYW5kIC5jZmlfb2Zmc2V0IGRpcmVj dGl2ZXMgd2l0aCBSQV9BVVRIX0NPREUgcHNldWRvIGhhcmQtcmVnaXN0ZXIuICAqLworLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IG1icmFu Y2hfcHJvdGVjdGlvbl9vayB9ICovCisvKiB7IGRnLXNraXAtaWYgImF2b2lkIGNvbmZsaWN0aW5n IG11bHRpbGliIG9wdGlvbnMiIHsgKi0qLSogfSB7ICItbWFybSIgIi1tY3B1PSoiIH0gfSAqLwor LyogeyBkZy1vcHRpb25zICItbWFyY2g9YXJtdjguMS1tLm1haW4rbXZlK3BhY2J0aSAtbWJyYW5j aC1wcm90ZWN0aW9uPXBhYy1yZXQgLW10aHVtYiAtbWZsb2F0LWFiaT1oYXJkIC1mYXN5bmNocm9u b3VzLXVud2luZC10YWJsZXMgLWcgLU8wIiB9ICovCisKKyNpbmNsdWRlICJzdGRpby5oIgorCitf X2F0dHJpYnV0ZV9fKChub2lubGluZSkpIGludAorZm4xIChpbnQgYSkKK3sKKyAgY29uc3QgY2hh ciAqZm10ID0gImJyYW5jaC1wcm90ZWN0aW9uIjsKKyAgaW50IGZ1bjEoaW50IHgsY29uc3QgY2hh ciAqZm10LGludCBjLGludCBkKQorICAgIHsKKyAgICAgIHByaW50Zigic3RyaW5nID0gJXNcbiIs Zm10KTsKKyAgICAgIHJldHVybiB4K2MrZDsKKyAgICB9CisgIHJldHVybiBmdW4xKGEsZm10LDEw LDEwKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIHJldHVybiBmbjEgKDQwKTsKK30KKwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcLnBhY3NwdmFsIiAzIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJwYWMJaXAsIGxyLCBzcCIg MyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXC5jZmlfcmVn aXN0ZXIgMTQzLCAxMiIgMyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAiXC5zYXZlIHtyNywgcmFfYXV0aF9jb2RlLCBscn0iIDIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlwuY2ZpX29mZnNldCAxNDMsIC04IiAyIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcLnNhdmUge3IzLCByNywg cmFfYXV0aF9jb2RlLCBscn0iIDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgIlwuY2ZpX29mZnNldCAxNDMsIC0xMiIgMSB9IH0gKi8KCgoK --===============1001827178374506076==--