From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2054.outbound.protection.outlook.com [40.107.104.54]) by sourceware.org (Postfix) with ESMTPS id E732438582BA for ; Fri, 8 Jul 2022 12:52:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E732438582BA ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=MGPubZKHcBa/9lyaZoZMAaYJ4xxVYY/Ba0ZbWaX1uk/4X7fjKVoksgwaFlwmf8/IhLhlwvhgooRhbF++x36G2wCyX7zNiuxHe1Vqyzv7Ij65NJembHa1JRphMBXfRKkGNQdvAJIVh2OnYFelQ1WBC019m7OQTwODfYR5a2F/6xp1aZIEzqCr7cre8hCnQfVvFCslXYQhNvUdK2Y+GPsjVbRxOPvMeZFvwcYmIlwyle+4GDa8rKKYrnPBlExn3mA3Q9V8MPctyujq3YY5obOZzjVCdUFGy6uLjEZYgHF88qyvyXU/MsWrd/VjM57fCX7RpoPatnK9k9Q6B5VlpHDgvQ== 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=N5QSL6EFiVoL6IASVkjtWo22PCbTzbE24+HhOd45uLA=; b=GgP7Z/Pl1DH4s3K3DtuK8tpNAFJtTQVRnlWAAILVpBxcdEEyRYAK3NsZJ+2ftRfiTYmKyemFzzp5YGZsTfgAtfYvyPmmuQSXAp00uHW5wPus6VZlIqvEImnhxFD3ZyHhDGZ5jEdviqqTfZPKxu2Ny/kZzM3p/2kETtUOi08vd9N3bDlq2WUvHxPVJ6weWuiFj+iz3JFKCffeB8h2cpfA6UAh8V4I+0NC+9Q/pkLsPoFgQ2/l+/FW1+LDQUO7iARpAMx1QvVs0PqzhOBvbeJN8ukJP9rxHoJsIrCr8RvSjf8QXQTffgQ3i7bRPTiiGBsAgb4K4izY2/Ar2shSq1DjYw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=sourceware.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 DB7PR05CA0002.eurprd05.prod.outlook.com (2603:10a6:10:36::15) by GV1PR08MB7755.eurprd08.prod.outlook.com (2603:10a6:150:56::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.16; Fri, 8 Jul 2022 12:52:22 +0000 Received: from DBAEUR03FT063.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:36:cafe::bc) by DB7PR05CA0002.outlook.office365.com (2603:10a6:10:36::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.16 via Frontend Transport; Fri, 8 Jul 2022 12:52:22 +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 DBAEUR03FT063.mail.protection.outlook.com (100.127.142.255) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.15 via Frontend Transport; Fri, 8 Jul 2022 12:52:22 +0000 Received: ("Tessian outbound 6f9e7ef31fa8:v122"); Fri, 08 Jul 2022 12:52:22 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 23cc13cb1c559676 X-CR-MTA-TID: 64aa7808 Received: from cdc54e69b530.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 235D3034-8837-4F37-A5F1-2CE1224A3C88.1; Fri, 08 Jul 2022 12:52:14 +0000 Received: from EUR01-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id cdc54e69b530.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 08 Jul 2022 12:52:14 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hc7SQnFFH1TE5sxGBpo1fZfPfBwI9lW57cSoZceRCcI70P7W4mH/3xKnVmjIcGPy4MTUi9fyzanSL2P9HwBCozfQA/brXk2o2U3HuFSN/y5eerxSJeNUqIHGhkYQWL01QlBEy06XA9q6tOgW3yM0pUUAhUomiDZoiraX+WnftJupfHx26j+eIrcGSzzdiCxb/MmhuZaPfth8n1FRmz259dzBLLfecGrNSlmHWsJcYdwmmUA3dXlkftePva3Zu7uC2Nzf/WYStbtIoazYSi8onSy3QKDXo7UHKgMomRP0H/k/tUP8a2dZ1d2lXaTKj0A4oB6+G6IMRoddAOplYQ177A== 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=N5QSL6EFiVoL6IASVkjtWo22PCbTzbE24+HhOd45uLA=; b=bRR/IrS6O5xShdhGAPAnFO1bwogr9ozuNA/2p7cGxkt/S8NevFYvEaZGkjw5WJJ/iD5TuItkIOj6cLbN3v0w8Q5Xu1yDQ4aEU6XJq+KB201E8uHdCGbdJ6aCOMruNXkRWH/LCwKp+BjmKL8zPySprrWeDi8iacQEmE03NBCVJ1oZOPrY25DsN3J3Q9hrTPzzCdpncpM2p8NGxmcTlB801l6VF5MHSgCuflympuhlGw5FinO0wXS9gQVSoWQ+Fy2Ydkz3zLBxFuAcklj9kRkBIkT4DfS2nN4twUscFaTkttn60rCjULNUPofAJA5YlHU+3X2FR0dGasd6+VyiUhk7MA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=sourceware.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 AM6P193CA0123.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:85::28) by DB8PR08MB5097.eurprd08.prod.outlook.com (2603:10a6:10:38::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.18; Fri, 8 Jul 2022 12:52:11 +0000 Received: from VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:85:cafe::54) by AM6P193CA0123.outlook.office365.com (2603:10a6:209:85::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5417.15 via Frontend Transport; Fri, 8 Jul 2022 12:52:11 +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 VE1EUR03FT041.mail.protection.outlook.com (10.152.19.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5417.15 via Frontend Transport; Fri, 8 Jul 2022 12:52:11 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) 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.9; Fri, 8 Jul 2022 12:52:09 +0000 Received: from e120487.cambridge.arm.com (10.2.78.49) by mail.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.9 via Frontend Transport; Fri, 8 Jul 2022 12:52:09 +0000 Content-Type: multipart/mixed; boundary="===============3943491439617699277==" MIME-Version: 1.0 From: Matthew Malcomson To: CC: Subject: [PATCH] ld: aarch64: Improve TLS relaxation condition Date: Fri, 8 Jul 2022 13:52:09 +0100 Message-ID: <08b00134-ec6c-49f5-b735-3c6c8db92360@AZ-NEU-EX03.Arm.com> X-EOPAttributedMessage: 1 X-MS-Office365-Filtering-Correlation-Id: 25efabe5-e2e4-4bc4-8f2e-08da60e0b333 X-MS-TrafficTypeDiagnostic: DB8PR08MB5097:EE_|DBAEUR03FT063:EE_|GV1PR08MB7755:EE_ 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: qe9qhZoj3z/a06/8o2EhyBpVgAdXgdnWQBfnjOUFElZgIw5ULpG32WQ3DCZRY0PAOVJe5NapemClQtLhO7LedknPthiXVthBj7oKw31nJRLoOlUOxpwhRN1hsmtyIOHRrFMgiKIrz4JMp/4MR5nT/mtVLa3iq0x17F5aMHAE2i8mVA3+usVNiN2oFCpAW+0+upp6huJyLg7EaVyJC/qTWs+McDU0pqUsNJkekxQlGI7X2OAOVZBxfzi2HmKRb3oozFoH89yQY/4kPLzSfOFslU4RH6c76ZczNeE3VGTifHjjcDGBg4St/VQO7AEGCfVs9hQEWM7+S0rlFfdkTp08AkmlYsD3T/SjSICM97uzk1rlah6wB1Xz7Kd9USugHlIujHeQSJi6omthKqJgZCoGhUkgjPp+W8flXRixyskbRkcAWuPxByuojbImLS+x6bxMmuTb3XQdB6ka7qHXjN2LlPw62fVV33vTnQhOMv1CR72WsF1pVGbLWiw9U5EauHDVIw3BMCyXrq3pGKlSJmZZTbsiCpu6lUk5+OniNLrXgyeyBkQ5IEsQyNfc91MNqAwDKekhKypbYpqQAR+4lPYNZ/rvPCc0zlGJ0CduuHCBMqxux0shaAMUdXYDELbHkZjICf55HIkeSy+XznWBhe2G5HoTppAZxIYQpsxxmluuGrO3IOEuN05Dh4Dc2XNPMaEJgrJM0ijsmNo2SghhDRJws4j1SQzNd6rAK3BMOPuFz+1tV10/Hmpm4ZaPN/eyn9cy1GVlQJUZ/2m+gNqT0VIwHNet/8tegCbcOZsuU2hXxicOWRBwLJgvgg802HKclbAmhQhyN2lN4uyx1Dk9BKQTS1cx/yN5l15v3NDf8QfQkFM= 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:(13230016)(4636009)(376002)(39860400002)(396003)(136003)(346002)(36840700001)(40470700004)(46966006)(83380400001)(4326008)(478600001)(8676002)(82310400005)(186003)(81166007)(70206006)(26005)(82740400003)(31696002)(316002)(426003)(6916009)(47076005)(86362001)(70586007)(2906002)(31686004)(356005)(336012)(40480700001)(8936002)(36860700001)(30864003)(40460700003)(41300700001)(5660300002)(44832011)(235185007)(33964004)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5097 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 4174a1f2-5634-4262-332e-08da60e0acd1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0n+cuMB64Z+K5hnXn9ebqlAphvbDBPwdDVeL60F1lmiC4l5BPfdD7QnaOxWjE4lDswefNp1qky5lO6IlNcMAOicl0XxTvtUJQNqk57qKitxRz8KeOtruW9PCffRyApUhp9Q4zmdXGHNp7d3P4u9pgP/t4im1U0dGMrE0SzHEHZVKegZBgn3FNpnZPh7mRW5WH6hgD1tCed3q8Ey9fGwpkO7TyAg4aqYFG6fvhDGfe13VAbvbk4NdtjdoG3/KPyxNpdizwM00KR4wUuxE4Eji4Z5lCK4dwA52TpUo4rXnv/wxoIjtiRa+TxCuQ+MQMzSROppmLrylr2Ul+tlnOU0Uo5io1yCRGaVa66ZbtW3C3Ej44C0skISj/PBEk5cn3AWgT61FLSN8iESAoXimAoAi9zxA9usJ+Pc3lyFGX34hKTHC7rIpN6c2Kp3fQmz66ejLia8o1S33ML4tlkk56CLhUEoo923EdiN5gxe+9PIdTScAv87iiYtq/Wecbp44SKgRqgND8yImTg6a4dDZ+G3JY+Sz23xBfbkzbobpx60z7aXwYs3SvrjZB9/djtVuhyBB2Tk9NM0Xf5dEfqzEYW/9XtPvNU0PAm6qBZaM9LI87elo5AiAqHr9AwijQbknBp7rN57D6AGbiVo8PshOuiUdUVHQMNuJE7T1WWsL0a1GUD2lKzNGKldLDmr6/Az/jng+iH3cDjzor35tjxc0ni9k1U6fMymNJLM+vJGSGT18KpbeCIRXwgem2oOeBfDgM6KoLl7f8EHlvnAg18QlFjOTDjgtNoAi1JmojB9fp88C7u1YiTdVh29UjZo4HBeLL7Zgc0lSO9nXafaW7463ApwS3g== 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:(13230016)(4636009)(376002)(39860400002)(396003)(136003)(346002)(46966006)(36840700001)(40470700004)(186003)(6916009)(82310400005)(8936002)(316002)(31686004)(47076005)(83380400001)(40480700001)(33964004)(336012)(26005)(40460700003)(426003)(2906002)(30864003)(81166007)(4326008)(478600001)(8676002)(31696002)(86362001)(41300700001)(5660300002)(82740400003)(70206006)(70586007)(235185007)(36860700001)(44832011); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Jul 2022 12:52:22.1787 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 25efabe5-e2e4-4bc4-8f2e-08da60e0b333 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: DBAEUR03FT063.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB7755 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_DMARC_NONE, KAM_LOTSOFHASH, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Jul 2022 12:52:39 -0000 --===============3943491439617699277== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit In aarch64_tls_transition_without_check and elfNN_aarch64_tls_relax we choose whether to perform a relaxation to an IE access model or an LE access model based on whether the symbol itself is marked as local (i.e. `h == NULL`). This is problematic in two ways. The first is that sometimes a global dynamic access can be relaxed to an initial exec access when creating a shared library, and if that happens on a local symbol then we currently relax it to a local exec access instead. This usually does not happen since we only relax an access if aarch64_can_relax_tls returns true and aarch64_can_relax_tls does not have the same problem. However, it can happen when we have seen both an IE and GD access on the same symbol. This case is exercised in the newly added testcase tls-relax-gd-ie-2. The second problem is that deciding based on whether the symbol is local misses the case when the symbol is global but is still non-interposable and known to be located in the executable. This happens on all global symbols in executables. This case is exercised in the newly added testcase tls-relax-ie-le-4. Here we adjust the condition we base our relaxation on so that we relax to local-exec if we are creating an executable and the relevant symbol we're accessing is stored inside that executable. -- Updating tests for new relaxation criteria Many of the tests added to check our relaxation to IE were implemented by taking advantage of the fact that we did not relax a global symbol defined in an executable. Since a global symbol defined in an executable is still not interposable, we know that a TLS version of such a symbol will be in the main TLS block. This means that we can perform a stronger relaxation on such symbols and relax their accesses to a local-exec access. Hence we have to update all tests that relied on the older suboptimal decision making. The two cases when we still would want to relax a general dynamic access to an initial exec one are: 1) When in a shared library and accessing a symbol which we have already seen accessed with an initial exec access sequence. 2) When in an executable and accessing a symbol defined in a shared library. Both of these require shared library support, which means that these tests are now only available on targets with that. I have chosen to switch the existing testcases from a plain executable to one dynamically linked to a shared object as that doesn't require changing the testcases quite so much (just requires accessing a different variable rather than requiring adding another code sequence). The tls-relax-all testcase was an outlier to the above approach, since it included a general dynamic access to both a local and global symbol and inspected for the difference accordingly. ############### Attachment also inlined for ease of reply ############### diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 251a27edb571a91fc51a2d0de2613f72c29e299d..c675292d232abdde37d6996b3883929ce896e924 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -4898,60 +4898,62 @@ aarch64_calculate_got_entry_vma (struct elf_link_hash_entry *h, static bfd_reloc_code_real_type aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type, - struct elf_link_hash_entry *h) + struct elf_link_hash_entry *h, + struct bfd_link_info *info) { - bool is_local = h == NULL; + bool local_exec = bfd_link_executable (info) + && SYMBOL_REFERENCES_LOCAL (info, h); switch (r_type) { case BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: case BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21); case BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : r_type); case BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19); case BFD_RELOC_AARCH64_TLSDESC_LDR: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : BFD_RELOC_AARCH64_NONE); case BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC); case BFD_RELOC_AARCH64_TLSDESC_OFF_G1: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1); case BFD_RELOC_AARCH64_TLSDESC_LDNN_LO12_NC: case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC); case BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21: - return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : r_type; + return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1 : r_type; case BFD_RELOC_AARCH64_TLSIE_LDNN_GOTTPREL_LO12_NC: - return is_local ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : r_type; + return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC : r_type; case BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19: return r_type; case BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: - return (is_local + return (local_exec ? BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12 : BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19); @@ -4964,16 +4966,16 @@ aarch64_tls_transition_without_check (bfd_reloc_code_real_type r_type, case BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC: case BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21: case BFD_RELOC_AARCH64_TLSLD_ADR_PREL21: - return is_local ? BFD_RELOC_AARCH64_NONE : r_type; + return local_exec ? BFD_RELOC_AARCH64_NONE : r_type; #if ARCH_SIZE == 64 case BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC: - return is_local + return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC; case BFD_RELOC_AARCH64_TLSGD_MOVW_G1: - return is_local + return local_exec ? BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2 : BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1; #endif @@ -5082,7 +5084,7 @@ aarch64_tls_transition (bfd *input_bfd, if (! aarch64_can_relax_tls (input_bfd, info, bfd_r_type, h, r_symndx)) return bfd_r_type; - return aarch64_tls_transition_without_check (bfd_r_type, h); + return aarch64_tls_transition_without_check (bfd_r_type, h, info); } /* Return the base VMA address which should be subtracted from real addresses @@ -6321,9 +6323,11 @@ static bfd_reloc_status_type elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, bfd *input_bfd, asection *input_section, bfd_byte *contents, Elf_Internal_Rela *rel, - struct elf_link_hash_entry *h) + struct elf_link_hash_entry *h, + struct bfd_link_info *info) { - bool is_local = h == NULL; + bool local_exec = bfd_link_executable (info) + && SYMBOL_REFERENCES_LOCAL (info, h); unsigned int r_type = ELFNN_R_TYPE (rel->r_info); unsigned long insn; @@ -6333,7 +6337,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, { case BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21: case BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21: - if (is_local) + if (local_exec) { /* GD->LE relaxation: adrp x0, :tlsgd:var => movz R0, :tprel_g1:var @@ -6362,7 +6366,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, break; case BFD_RELOC_AARCH64_TLSDESC_LD_PREL19: - if (is_local) + if (local_exec) { /* Tiny TLSDESC->LE relaxation: ldr x1, :tlsdesc:var => movz R0, #:tprel_g1:var @@ -6404,7 +6408,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, } case BFD_RELOC_AARCH64_TLSGD_ADR_PREL21: - if (is_local) + if (local_exec) { /* Tiny GD->LE relaxation: adr x0, :tlsgd:var => mrs x1, tpidr_el0 @@ -6456,7 +6460,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, BFD_ASSERT (rel->r_offset + 12 == rel[2].r_offset); BFD_ASSERT (ELFNN_R_TYPE (rel[2].r_info) == AARCH64_R (CALL26)); - if (is_local) + if (local_exec) { /* Large GD->LE relaxation: movz x0, #:tlsgd_g1:var => movz x0, #:tprel_g2:var, lsl #32 @@ -6500,7 +6504,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, return bfd_reloc_continue; case BFD_RELOC_AARCH64_TLSDESC_LDNN_LO12_NC: - if (is_local) + if (local_exec) { /* GD->LE relaxation: ldr xd, [x0, #:tlsdesc_lo12:var] => movk x0, :tprel_g0_nc:var @@ -6521,7 +6525,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, } case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC: - if (is_local) + if (local_exec) { /* GD->LE relaxation add x0, #:tlsgd_lo12:var => movk R0, :tprel_g0_nc:var @@ -6574,7 +6578,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, return bfd_reloc_ok; case BFD_RELOC_AARCH64_TLSDESC_LDR: - if (is_local) + if (local_exec) { /* GD->LE relaxation: ldr xd, [gp, xn] => movk R0, #:tprel_g0_nc:var @@ -6601,12 +6605,12 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, movk xd, #:tlsdesc_off_g0_nc:var => movk Rd, #:gottprel_g0_nc:var Where R is x for lp64 mode, and w for ILP32 mode. */ - if (is_local) + if (local_exec) bfd_putl32 (ldr_hw_R0, contents + rel->r_offset); return bfd_reloc_continue; case BFD_RELOC_AARCH64_TLSDESC_OFF_G1: - if (is_local) + if (local_exec) { /* GD->LE relaxation: movz xd, #:tlsdesc_off_g1:var => movz R0, #:tprel_g2:var, lsl #32 @@ -6631,7 +6635,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, adrp xd, :gottprel:var => movz Rd, :tprel_g1:var Where R is x for lp64 mode, and w for ILP32 mode. */ - if (is_local) + if (local_exec) { insn = bfd_getl32 (contents + rel->r_offset); bfd_putl32 (movz_R0 | (insn & 0x1f), contents + rel->r_offset); @@ -6646,7 +6650,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, ldr xd, [xm, #:gottprel_lo12:var] => movk Rd, :tprel_g0_nc:var Where R is x for lp64 mode, and w for ILP32 mode. */ - if (is_local) + if (local_exec) { insn = bfd_getl32 (contents + rel->r_offset); bfd_putl32 (movk_R0 | (insn & 0x1f), contents + rel->r_offset); @@ -6659,7 +6663,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, bl __tls_get_addr => add R0, R0, TCB_SIZE Where R is x for lp64 mode, and w for ilp32 mode. */ - if (is_local) + if (local_exec) { BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset); BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) == AARCH64_R (CALL26)); @@ -6676,7 +6680,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, /* LD->LE relaxation (small): adrp x0, :tlsldm:x => mrs x0, tpidr_el0 */ - if (is_local) + if (local_exec) { bfd_putl32 (0xd53bd040, contents + rel->r_offset); return bfd_reloc_ok; @@ -6689,7 +6693,7 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals, bl __tls_get_addr => nop Where R is x for lp64 mode, and w for ilp32 mode. */ - if (is_local) + if (local_exec) { BFD_ASSERT (rel->r_offset + 4 == rel[1].r_offset); BFD_ASSERT (ELFNN_R_TYPE (rel[1].r_info) == AARCH64_R (CALL26)); @@ -6863,7 +6867,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd, BFD_ASSERT (howto != NULL); r_type = howto->type; r = elfNN_aarch64_tls_relax (globals, input_bfd, input_section, - contents, rel, h); + contents, rel, h, info); unresolved_reloc = 0; } else diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 3c45f87151f82b2a3a5fcb10cea4b0cab534ab40..337beadcbfe5d7ea54a7bba45017b10bb1604cb0 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -273,17 +273,8 @@ run_dump_test "tls-relax-gd-le-ilp32" run_dump_test "tls-relax-gdesc-le" run_dump_test "tls-relax-gdesc-le-now" run_dump_test "tls-relax-gdesc-le-ilp32" -run_dump_test "tls-relax-gd-ie" -run_dump_test "tls-relax-gd-ie-ilp32" -run_dump_test_lp64 "tls-relax-large-gd-ie" -run_dump_test_lp64 "tls-relax-large-gd-ie-be" run_dump_test_lp64 "tls-relax-large-gd-le" run_dump_test_lp64 "tls-relax-large-gd-le-be" -run_dump_test_lp64 "tls-relax-large-desc-ie" -run_dump_test_lp64 "tls-relax-large-desc-ie-be" -run_dump_test_lp64 "tls-relax-large-desc-le" -run_dump_test_lp64 "tls-relax-large-desc-le-be" -run_dump_test "tls-relax-gdesc-ie" run_dump_test "tls-relax-ie-le" run_dump_test "tls-relax-ie-le-ilp32" run_dump_test "tls-relax-ld-le-small" @@ -292,7 +283,6 @@ run_dump_test "tls-relax-ld-le-tiny" run_dump_test "tls-relax-ld-le-tiny-ilp32" run_dump_test "tls-desc-ie" run_dump_test "tls-desc-ie-ilp32" -run_dump_test "tls-relax-gdesc-ie-2" run_dump_test "tls-relax-gdesc-le-2" run_dump_test "tls-relax-gdesc-le-2-ilp32" run_dump_test "tls-relax-ie-le-2" @@ -300,13 +290,9 @@ run_dump_test "tls-relax-ie-le-2-ilp32" run_dump_test "tls-relax-ie-le-3" run_dump_test "tls-relax-ie-le-3-ilp32" run_dump_test "tls-tiny-gd" -run_dump_test "tls-tiny-gd-ie" -run_dump_test "tls-tiny-gd-ie-ilp32" run_dump_test "tls-tiny-gd-le" run_dump_test "tls-tiny-gd-le-ilp32" run_dump_test "tls-tiny-desc" -run_dump_test "tls-tiny-desc-ie" -run_dump_test "tls-tiny-desc-ie-ilp32" run_dump_test "tls-tiny-desc-le" run_dump_test "tls-tiny-desc-le-ilp32" run_dump_test "tls-tiny-ie" @@ -331,6 +317,33 @@ run_dump_test "protected-data" run_dump_test_lp64 "pr22764" run_dump_test_lp64 "pr20402" +if {[check_shared_lib_support] + && [ld_assemble $as $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o] + && [ld_link $ld tmpdir/tls-sharedlib.so "-shared tmpdir/tls-sharedlib.o"] } { + run_dump_test "tls-relax-gd-ie" + run_dump_test_lp64 "tls-relax-large-gd-ie" + run_dump_test_lp64 "tls-relax-large-gd-ie-be" + run_dump_test_lp64 "tls-relax-large-desc-ie" + run_dump_test_lp64 "tls-relax-large-desc-ie-be" + run_dump_test_lp64 "tls-relax-large-desc-le" + run_dump_test_lp64 "tls-relax-large-desc-le-be" + run_dump_test "tls-relax-gdesc-ie" + run_dump_test "tls-relax-gdesc-ie-2" + run_dump_test "tls-tiny-gd-ie" + run_dump_test "tls-tiny-desc-ie" +} +if {[check_shared_lib_support] + && [ld_assemble_flags $as -mabi=ilp32 $srcdir/$subdir/tls-sharedlib.s tmpdir/tls-sharedlib.o] + && [ld_link $ld tmpdir/tls-sharedlib-ilp32.so "-shared tmpdir/tls-sharedlib.o -m [aarch64_choose_ilp32_emul]"] } { + run_dump_test "tls-relax-gd-ie-ilp32" + run_dump_test "tls-tiny-gd-ie-ilp32" + run_dump_test "tls-tiny-desc-ie-ilp32" +} +run_dump_test "tls-relax-gd-ie-2" +run_dump_test "tls-relax-gd-ie-3" +run_dump_test "tls-relax-ie-le-4" +run_dump_test "tls-gd-symbolic" + # ifunc tests run_dump_test "ifunc-1" run_dump_test "ifunc-1-local" diff --git a/ld/testsuite/ld-aarch64/tls-gd-symbolic.d b/ld/testsuite/ld-aarch64/tls-gd-symbolic.d new file mode 100644 index 0000000000000000000000000000000000000000..d6732acdaf1543ffd51fe23d0da5633ecbe04d14 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-gd-symbolic.d @@ -0,0 +1,20 @@ +# Testcase to show that -Bsymbolic does not trigger any relaxation from general +# dynamic or initial exec for global symbols. +#target: [check_shared_lib_support] +#ld: -shared -Bsymbolic +#objdump: -d -j .text + +.*: file format .* + + +Disassembly of section \.text: + +[0-9a-f]+ <_test_tls_desc>: + +[0-9a-f]+: ........ adrp x0, .* + +[0-9a-f]+: ........ ldr x1, \[x0, #.*\] + +[0-9a-f]+: ........ add x0, x0, .* + +[0-9a-f]+: d63f0020 blr x1 + +[0-9a-f]+ <_test_tls_desc2>: + +[0-9a-f]+: ........ adrp x0, .* + +[0-9a-f]+: ........ ldr x0, \[x0, #.*\] diff --git a/ld/testsuite/ld-aarch64/tls-gd-symbolic.s b/ld/testsuite/ld-aarch64/tls-gd-symbolic.s new file mode 100644 index 0000000000000000000000000000000000000000..d2ca5dac7be2aeab897d9e7b0d8ec30afc7cec19 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-gd-symbolic.s @@ -0,0 +1,27 @@ + # Demonstrating TLS relaxation behavior for -Bsymbolic linking. + # (i.e. no extra relaxation when using -Bsymbolic). + .global tlsdescvar + .global tlsdescvar2 + .section .tbss,"awT",%nobits + .align 2 + .type tlsdescvar, %object + .size tlsdescvar, 4 +tlsdescvar: + .zero 4 + .type tlsdescvar2, %object + .size tlsdescvar2, 4 +tlsdescvar2: + .zero 4 +.text +_test_tls_desc: + + adrp x0, :tlsdesc:tlsdescvar + ldr x1, [x0, :tlsdesc_lo12:tlsdescvar] + add x0, x0, :tlsdesc_lo12:tlsdescvar + .tlsdesccall tlsdescvar + blr x1 + +_test_tls_desc2: + + adrp x0, :gottprel:tlsdescvar2 + ldr x0, [x0, #:gottprel_lo12:tlsdescvar2] diff --git a/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d b/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d index 1cb4ef4261307c13139707ad27b8e85bbe11b0a9..62faed4b73aac484119ed18dbc7f588f6ec8c794 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d +++ b/ld/testsuite/ld-aarch64/tls-relax-all-ilp32.d @@ -5,8 +5,8 @@ #... +10000: a9bf7bfd stp x29, x30, \[sp, #-16\]! +10004: 910003fd mov x29, sp - +10008: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> - +1000c: b9400400 ldr w0, \[x0, #4\] + +10008: 52a00000 movz w0, #0x0, lsl #16 + +1000c: 72800100 movk w0, #0x8 +10010: d503201f nop +10014: d503201f nop +10018: d53bd041 mrs x1, tpidr_el0 @@ -20,8 +20,8 @@ +10038: 8b000040 add x0, x2, x0 +1003c: b9400000 ldr w0, \[x0\] +10040: 0b000021 add w1, w1, w0 - +10044: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> - +10048: b9400800 ldr w0, \[x0, #8\] + +10044: 52a00000 movz w0, #0x0, lsl #16 + +10048: 72800200 movk w0, #0x10 +1004c: d53bd041 mrs x1, tpidr_el0 +10050: 0b000020 add w0, w1, w0 +10054: b9400000 ldr w0, \[x0\] diff --git a/ld/testsuite/ld-aarch64/tls-relax-all.d b/ld/testsuite/ld-aarch64/tls-relax-all.d index 59421864f9558050bf1d2ae1cab794bf54ac30df..1262a99a6a0debb22256903a25e9075f1666543b 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-all.d +++ b/ld/testsuite/ld-aarch64/tls-relax-all.d @@ -4,8 +4,8 @@ #... +10000: a9bf7bfd stp x29, x30, \[sp, #-16\]! +10004: 910003fd mov x29, sp - +10008: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> - +1000c: f9400400 ldr x0, \[x0, #8\] + +10008: d2a00000 movz x0, #0x0, lsl #16 + +1000c: f2800200 movk x0, #0x10 +10010: d503201f nop +10014: d503201f nop +10018: d53bd041 mrs x1, tpidr_el0 @@ -19,8 +19,8 @@ +10038: 8b000040 add x0, x2, x0 +1003c: b9400000 ldr w0, \[x0\] +10040: 0b000021 add w1, w1, w0 - +10044: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> - +10048: f9400800 ldr x0, \[x0, #16\] + +10044: d2a00000 movz x0, #0x0, lsl #16 + +10048: f2800300 movk x0, #0x18 +1004c: d53bd041 mrs x1, tpidr_el0 +10050: 8b000020 add x0, x1, x0 +10054: b9400000 ldr w0, \[x0\] diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d new file mode 100644 index 0000000000000000000000000000000000000000..f0281b77579d2587062517be9513e7ad76d39a22 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.d @@ -0,0 +1,27 @@ +# The linker recognises that if we have one IE access to a TLS symbol then all +# accesses to that symbol could be IE. Here we are also interested to check +# the linker does not also decide that a second access to that symbol could be +# LE. +#target: [check_shared_lib_support] +#ld: -shared +#objdump: -dr + +.*: file format .* + + +Disassembly of section \.text: + +[0-9a-f]+ : + +[0-9a-f]+: d2800000 mov x0, #0x0 // #0 + +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0 + +[0-9a-f]+: .* adrp x0, .* + +[0-9a-f]+: .* ldr x0, \[x0, #.*\] + +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\] + +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0 + +[0-9a-f]+: 910003fd mov x29, sp + +[0-9a-f]+: .* adrp x0, .* + +[0-9a-f]+: .* ldr x0, \[x0, #.*\] + +[0-9a-f]+: d503201f nop + +[0-9a-f]+: d503201f nop + +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\] + +[0-9a-f]+: d65f03c0 ret diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s new file mode 100644 index 0000000000000000000000000000000000000000..568ceb4857cf98e411ccee0d4b62898d1b3c3b22 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-2.s @@ -0,0 +1,34 @@ + .section .tbss,"awT",@nobits + .align 2 + .type y, %object + .size y, 4 +y: + .zero 4 + + + + + .text + .global foo + .type foo, @function +foo: + # Access the local symbol with an IE access. + mov x0, 0 + mrs x1, tpidr_el0 + adrp x0, :gottprel:y + ldr x0, [x0, #:gottprel_lo12:y] + ldr w0, [x1, x0] + + # Also access the same symbol with a General Dynamic access. + # The linker should be able to recognise that if we're already + # accessing this symbol with an Initial Exec access then this General + # Dynamic access could be relaxed to an Initial Exec one too. + mrs x1, tpidr_el0 + mov x29, sp + adrp x0, :tlsdesc:y + ldr x2, [x0, #:tlsdesc_lo12:y] + add x0, x0, :tlsdesc_lo12:y + .tlsdesccall y + blr x2 + ldr w0, [x1, x0] + ret diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d new file mode 100644 index 0000000000000000000000000000000000000000..2e45ec90d1a853d58834b219bf9ff0fa6847db60 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-3.d @@ -0,0 +1,29 @@ +# The linker recognises that if we have one IE access to a TLS symbol then all +# accesses to that symbol could be IE. Here we are also interested to check +# the linker does not also decide that a second access to that symbol could be +# LE. +#source: tls-relax-gd-ie-2.s +#target: [check_shared_lib_support] +#ld: -shared -Bsymbolic +#objdump: -dr + +.*: file format .* + + +Disassembly of section \.text: + +[0-9a-f]+ : + +[0-9a-f]+: d2800000 mov x0, #0x0 // #0 + +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0 + +[0-9a-f]+: .* adrp x0, .* + +[0-9a-f]+: .* ldr x0, \[x0, #.*\] + +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\] + +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0 + +[0-9a-f]+: 910003fd mov x29, sp + +[0-9a-f]+: .* adrp x0, .* + +[0-9a-f]+: .* ldr x0, \[x0, #.*\] + +[0-9a-f]+: d503201f nop + +[0-9a-f]+: d503201f nop + +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\] + +[0-9a-f]+: d65f03c0 ret + diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d index ab08c6161b9330110a9ffbb33eb6d44b0a8e8ac7..340206a9e2bbd37534eb3a1fed79e6386480aed3 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie-ilp32.d @@ -1,6 +1,6 @@ #source: tls-relax-gd-ie.s #as: -mabi=ilp32 -#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 +#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so #objdump: -dr #... +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d index f80bb9077705d83e793fcdd6b45169ac82a24aa9..0c03290e0a9cca61baab061e0b24475f9a8f00ab 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.d @@ -1,5 +1,5 @@ #source: tls-relax-gd-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #objdump: -dr #... +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> diff --git a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s index 88c7eec73e43afb680a6c1c9051bf5485491fa1e..afe076c8c8203ee547e84ccab544b67e388279d3 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s +++ b/ld/testsuite/ld-aarch64/tls-relax-gd-ie.s @@ -1,7 +1,3 @@ - .global var - .section .tdata,"awT",%progbits -var: - .word 2 .text adrp x0, :tlsgd:var add x0, x0, :tlsgd_lo12:var diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d index 2b8e346fc66c79c3d992714da7a876dc83c0b5ee..f13263f201ff781b0c8c41f468c069ee71c4fd61 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d +++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.d @@ -1,5 +1,5 @@ #source: tls-relax-gdesc-ie-2.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #objdump: -dr #... +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s index 790b6c6eb8bb4b9c2efa0688f46a5413d8231f78..f7be57c320716d6c56559d2ebfa181a2944bdb88 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s +++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie-2.s @@ -1,9 +1,5 @@ // Test TLS Desc to TLS IE relaxation when instructions are not consecutive. - .global var - .section .tdata -var: - .word 2 .text adrp x0, :tlsdesc:var nop @@ -20,5 +16,4 @@ var: mrs x1, tpidr_el0 add x0, x1, x0 ldr w0, [x0] - .global var .section .tdata diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d index 86277f82565c401aa6d2b4b365e2c9c8bc8ccfe6..1ace84858a32e1ef0336cf24f7017a55ccbb611e 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d +++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.d @@ -1,5 +1,5 @@ #source: tls-relax-gdesc-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #objdump: -dr #... +10000: 90000080 adrp x0, 20000 <_GLOBAL_OFFSET_TABLE_> diff --git a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s index 38b372132f49c926be8d6527bce9d203b794a4b5..089d36c9cc8a9f4dd9f6cfe71996bdbdd9b68502 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s +++ b/ld/testsuite/ld-aarch64/tls-relax-gdesc-ie.s @@ -1,7 +1,3 @@ - .global var - .section .tdata -var: - .word 2 .text adrp x0, :tlsdesc:var ldr x17, [x0, #:tlsdesc_lo12:var] diff --git a/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d new file mode 100644 index 0000000000000000000000000000000000000000..e2bc5f1530440d19077c455db5783ef10da24bf2 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.d @@ -0,0 +1,20 @@ +# We already test that we relax an access to a local symbol, this testcase +# checks that we relax an access to a global-binding symbol if the static linker +# knows that the symbol will resolve to the executable local value. +# +# The access should be relaxed to a LE access. +#ld: +#objdump: -d + +.*: file format .* + + +Disassembly of section \.text: + +[0-9a-f]+ <_start>: + +[0-9a-f]+: d2800000 mov x0, #0x0 // #0 + +[0-9a-f]+: d53bd041 mrs x1, tpidr_el0 + +[0-9a-f]+: d2a00000 movz x0, #0x0, lsl #16 + +[0-9a-f]+: f2800200 movk x0, #0x10 + +[0-9a-f]+: b8606820 ldr w0, \[x1, x0\] + +[0-9a-f]+: d65f03c0 ret diff --git a/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s new file mode 100644 index 0000000000000000000000000000000000000000..e151cd4efd6cc729d220ceea5f318ecd3a8ed3d8 --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-relax-ie-le-4.s @@ -0,0 +1,22 @@ +# Test TLS IE to TLS LE relaxation for global symbols. + .section .tbss,"awT",@nobits + .global x + .align 2 + .type x, %object + .size x, 4 +x: + .zero 4 + + + + .text + .global _start + .type _start, @function +_start: + mov x0, 0 + mrs x1, tpidr_el0 + adrp x0, :gottprel:x + ldr x0, [x0, #:gottprel_lo12:x] + ldr w0, [x1, x0] + ret + diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d index 21ad5e5a18c265e5e095b2053752a578d689d411..cb546ad74e6da35e7d3cd4f56ba62af52afebc22 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d +++ b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.d @@ -1,5 +1,5 @@ #source: tls-relax-large-desc-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #notarget: aarch64_be-*-* #objdump: -dr #... diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s index a4d1e00086ad3ed3818eb73b4aba606cb0de6cf7..98dc2a571d5836b60f05cb9daf47b385456a3ee2 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s +++ b/ld/testsuite/ld-aarch64/tls-relax-large-desc-ie.s @@ -1,8 +1,3 @@ - .global var - .section .tdata,"awT",%progbits -var: - .word 2 - .text test: ldr x1, .Lgot diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d index 2b398dbb9c6ce48f48f258e3ed337dcd383af82c..740178d46105483fa4176b1a4c77ebac459ef846 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d +++ b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.d @@ -1,5 +1,5 @@ #source: tls-relax-large-gd-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #notarget: aarch64_be-*-* #objdump: -dr #... diff --git a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s index 8e0310d6b3f8caecdbfc2bdd3f310b6ee3942d80..d35aace776ee0bc327cfa1cf258c8ce687865d7a 100644 --- a/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s +++ b/ld/testsuite/ld-aarch64/tls-relax-large-gd-ie.s @@ -1,8 +1,3 @@ - .global var - .section .tdata,"awT",%progbits -var: - .word 2 - .text test: ldr x1, .Lgot diff --git a/ld/testsuite/ld-aarch64/tls-sharedlib.s b/ld/testsuite/ld-aarch64/tls-sharedlib.s new file mode 100644 index 0000000000000000000000000000000000000000..8838b9f23484ac6c0535c43256818050fbf3a4fd --- /dev/null +++ b/ld/testsuite/ld-aarch64/tls-sharedlib.s @@ -0,0 +1,4 @@ + .global var + .section .tdata,"awT",@progbits +var: + .word 2 diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d index ebbaf854baa9548503d0eeac351ab3ee6e330183..3dffa1b85e6376fd72970ba79ecf8d42640173ae 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d +++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie-ilp32.d @@ -1,12 +1,12 @@ #source: tls-tiny-desc-ie.s #as: -mabi=ilp32 -#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 +#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so #objdump: -dr #... Disassembly of section .text: 00010000 \: - +10000: 18080020 ldr w0, 20004 \<_GLOBAL_OFFSET_TABLE_\+0x4\> + +10000: 18080020 ldr w0, 20004 \ +10004: d503201f nop +10008: d503201f nop diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d index 0088539d6bfae0bdfc70c86afeaf7f1d16305d12..e759ae94576ccca484a9690d1334032f97df6fd6 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d +++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.d @@ -1,11 +1,11 @@ #source: tls-tiny-desc-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #objdump: -dr #... Disassembly of section .text: 0000000000010000 \: - +10000: 58080040 ldr x0, 20008 \<_GLOBAL_OFFSET_TABLE_\+0x8\> + +10000: 58080040 ldr x0, 20008 \ +10004: d503201f nop +10008: d503201f nop diff --git a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s index 520cd4e85b29f8c3acc912d2d31b902b91ee337e..fcc970f6d8f46b7c57724b55c857dcee77bc0722 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s +++ b/ld/testsuite/ld-aarch64/tls-tiny-desc-ie.s @@ -1,12 +1,3 @@ - .global var - - .section .tbss,"awT",%nobits - .align 2 - .type var, %object - .size var, 4 -var: - .zero 4 - .text test: ldr x1, :tlsdesc:var diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d index 1ea61103b47ba1a23703be914da5f5f1008a9cb1..6317152eb1ecc8830d8a0b736276c4ef19301d58 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d +++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie-ilp32.d @@ -1,12 +1,12 @@ #source: tls-tiny-gd-ie.s #as: -mabi=ilp32 -#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 +#ld: -m [aarch64_choose_ilp32_emul] -T relocs-ilp32.ld -e0 tmpdir/tls-sharedlib-ilp32.so #objdump: -dr #... Disassembly of section .text: 00010000 \: - +10000: 18080020 ldr w0, 20004 \<_GLOBAL_OFFSET_TABLE_\+0x4\> + +10000: 18080020 ldr w0, 20004 \ +10004: d53bd041 mrs x1, tpidr_el0 +10008: 0b000020 add w0, w1, w0 diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d index 629d90c942d34845e700b935ef2701d06235b7dd..66b996e6f4abc279d96be510956eff0c606ab240 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d +++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.d @@ -1,11 +1,11 @@ #source: tls-tiny-gd-ie.s -#ld: -T relocs.ld -e0 +#ld: -T relocs.ld -e0 tmpdir/tls-sharedlib.so #objdump: -dr #... Disassembly of section .text: 0000000000010000 \: - +10000: 58080040 ldr x0, 20008 \<_GLOBAL_OFFSET_TABLE_\+0x8\> + +10000: 58080040 ldr x0, 20008 \ +10004: d53bd041 mrs x1, tpidr_el0 +10008: 8b000020 add x0, x1, x0 diff --git a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s index 4dc7e66bbdb7d7c01754aebcdaf4b1328667e143..3ae4a0cc9fe1329140c60ed9424b80e8b4669da3 100644 --- a/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s +++ b/ld/testsuite/ld-aarch64/tls-tiny-gd-ie.s @@ -1,12 +1,3 @@ - .global var - - .section .tbss,"awT",%nobits - .align 2 - .type var, %object - .size var, 4 -var: - .zero 4 - .text test: adr x0, :tlsgd:var --===============3943491439617699277== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="local-exec-tls.patch" ZGlmZiAtLWdpdCBhL2JmZC9lbGZubi1hYXJjaDY0LmMgYi9iZmQvZWxmbm4tYWFyY2g2NC5jCmlu ZGV4IDI1MWEyN2VkYjU3MWE5MWZjNTFhMmQwZGUyNjEzZjcyYzI5ZTI5OWQuLmM2NzUyOTJkMjMy YWJkZGUzN2Q2OTk2YjM4ODM5MjljZTg5NmU5MjQgMTAwNjQ0Ci0tLSBhL2JmZC9lbGZubi1hYXJj aDY0LmMKKysrIGIvYmZkL2VsZm5uLWFhcmNoNjQuYwpAQCAtNDg5OCw2MCArNDg5OCw2MiBAQCBh YXJjaDY0X2NhbGN1bGF0ZV9nb3RfZW50cnlfdm1hIChzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRy eSAqaCwKIAogc3RhdGljIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZQogYWFyY2g2NF90bHNfdHJh bnNpdGlvbl93aXRob3V0X2NoZWNrIChiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUgcl90eXBlLAot CQkJCSAgICAgIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpoKQorCQkJCSAgICAgIHN0cnVj dCBlbGZfbGlua19oYXNoX2VudHJ5ICpoLAorCQkJCSAgICAgIHN0cnVjdCBiZmRfbGlua19pbmZv ICppbmZvKQogewotICBib29sIGlzX2xvY2FsID0gaCA9PSBOVUxMOworICBib29sIGxvY2FsX2V4 ZWMgPSBiZmRfbGlua19leGVjdXRhYmxlIChpbmZvKQorICAgICYmIFNZTUJPTF9SRUZFUkVOQ0VT X0xPQ0FMIChpbmZvLCBoKTsKIAogICBzd2l0Y2ggKHJfdHlwZSkKICAgICB7CiAgICAgY2FzZSBC RkRfUkVMT0NfQUFSQ0g2NF9UTFNERVNDX0FEUl9QQUdFMjE6CiAgICAgY2FzZSBCRkRfUkVMT0Nf QUFSQ0g2NF9UTFNHRF9BRFJfUEFHRTIxOgotICAgICAgcmV0dXJuIChpc19sb2NhbAorICAgICAg cmV0dXJuIChsb2NhbF9leGVjCiAJICAgICAgPyBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNMRV9NT1ZX X1RQUkVMX0cxCiAJICAgICAgOiBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNJRV9BRFJfR09UVFBSRUxf UEFHRTIxKTsKIAogICAgIGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExTREVTQ19BRFJfUFJFTDIx OgotICAgICAgcmV0dXJuIChpc19sb2NhbAorICAgICAgcmV0dXJuIChsb2NhbF9leGVjCiAJICAg ICAgPyBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNMRV9NT1ZXX1RQUkVMX0cwX05DCiAJICAgICAgOiBy X3R5cGUpOwogCiAgICAgY2FzZSBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNERVNDX0xEX1BSRUwxOToK LSAgICAgIHJldHVybiAoaXNfbG9jYWwKKyAgICAgIHJldHVybiAobG9jYWxfZXhlYwogCSAgICAg ID8gQkZEX1JFTE9DX0FBUkNINjRfVExTTEVfTU9WV19UUFJFTF9HMQogCSAgICAgIDogQkZEX1JF TE9DX0FBUkNINjRfVExTSUVfTERfR09UVFBSRUxfUFJFTDE5KTsKIAogICAgIGNhc2UgQkZEX1JF TE9DX0FBUkNINjRfVExTREVTQ19MRFI6Ci0gICAgICByZXR1cm4gKGlzX2xvY2FsCisgICAgICBy ZXR1cm4gKGxvY2FsX2V4ZWMKIAkgICAgICA/IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xFX01PVldf VFBSRUxfRzBfTkMKIAkgICAgICA6IEJGRF9SRUxPQ19BQVJDSDY0X05PTkUpOwogCiAgICAgY2Fz ZSBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNERVNDX09GRl9HMF9OQzoKLSAgICAgIHJldHVybiAoaXNf bG9jYWwKKyAgICAgIHJldHVybiAobG9jYWxfZXhlYwogCSAgICAgID8gQkZEX1JFTE9DX0FBUkNI NjRfVExTTEVfTU9WV19UUFJFTF9HMV9OQwogCSAgICAgIDogQkZEX1JFTE9DX0FBUkNINjRfVExT SUVfTU9WV19HT1RUUFJFTF9HMF9OQyk7CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RM U0RFU0NfT0ZGX0cxOgotICAgICAgcmV0dXJuIChpc19sb2NhbAorICAgICAgcmV0dXJuIChsb2Nh bF9leGVjCiAJICAgICAgPyBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNMRV9NT1ZXX1RQUkVMX0cyCiAJ ICAgICAgOiBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNJRV9NT1ZXX0dPVFRQUkVMX0cxKTsKIAogICAg IGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExTREVTQ19MRE5OX0xPMTJfTkM6CiAgICAgY2FzZSBC RkRfUkVMT0NfQUFSQ0g2NF9UTFNHRF9BRERfTE8xMl9OQzoKLSAgICAgIHJldHVybiAoaXNfbG9j YWwKKyAgICAgIHJldHVybiAobG9jYWxfZXhlYwogCSAgICAgID8gQkZEX1JFTE9DX0FBUkNINjRf VExTTEVfTU9WV19UUFJFTF9HMF9OQwogCSAgICAgIDogQkZEX1JFTE9DX0FBUkNINjRfVExTSUVf TEROTl9HT1RUUFJFTF9MTzEyX05DKTsKIAogICAgIGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExT SUVfQURSX0dPVFRQUkVMX1BBR0UyMToKLSAgICAgIHJldHVybiBpc19sb2NhbCA/IEJGRF9SRUxP Q19BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzEgOiByX3R5cGU7CisgICAgICByZXR1cm4gbG9j YWxfZXhlYyA/IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzEgOiByX3R5cGU7 CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0lFX0xETk5fR09UVFBSRUxfTE8xMl9O QzoKLSAgICAgIHJldHVybiBpc19sb2NhbCA/IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xFX01PVldf VFBSRUxfRzBfTkMgOiByX3R5cGU7CisgICAgICByZXR1cm4gbG9jYWxfZXhlYyA/IEJGRF9SRUxP Q19BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzBfTkMgOiByX3R5cGU7CiAKICAgICBjYXNlIEJG RF9SRUxPQ19BQVJDSDY0X1RMU0lFX0xEX0dPVFRQUkVMX1BSRUwxOToKICAgICAgIHJldHVybiBy X3R5cGU7CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0dEX0FEUl9QUkVMMjE6Ci0g ICAgICByZXR1cm4gKGlzX2xvY2FsCisgICAgICByZXR1cm4gKGxvY2FsX2V4ZWMKIAkgICAgICA/ IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xFX0FERF9UUFJFTF9ISTEyCiAJICAgICAgOiBCRkRfUkVM T0NfQUFSQ0g2NF9UTFNJRV9MRF9HT1RUUFJFTF9QUkVMMTkpOwogCkBAIC00OTY0LDE2ICs0OTY2 LDE2IEBAIGFhcmNoNjRfdGxzX3RyYW5zaXRpb25fd2l0aG91dF9jaGVjayAoYmZkX3JlbG9jX2Nv ZGVfcmVhbF90eXBlIHJfdHlwZSwKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xEX0FE RF9MTzEyX05DOgogICAgIGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExTTERfQURSX1BBR0UyMToK ICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xEX0FEUl9QUkVMMjE6Ci0gICAgICByZXR1 cm4gaXNfbG9jYWwgPyBCRkRfUkVMT0NfQUFSQ0g2NF9OT05FIDogcl90eXBlOworICAgICAgcmV0 dXJuIGxvY2FsX2V4ZWMgPyBCRkRfUkVMT0NfQUFSQ0g2NF9OT05FIDogcl90eXBlOwogCiAjaWYg QVJDSF9TSVpFID09IDY0CiAgICAgY2FzZSBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNHRF9NT1ZXX0cw X05DOgotICAgICAgcmV0dXJuIGlzX2xvY2FsCisgICAgICByZXR1cm4gbG9jYWxfZXhlYwogCT8g QkZEX1JFTE9DX0FBUkNINjRfVExTTEVfTU9WV19UUFJFTF9HMV9OQwogCTogQkZEX1JFTE9DX0FB UkNINjRfVExTSUVfTU9WV19HT1RUUFJFTF9HMF9OQzsKIAogICAgIGNhc2UgQkZEX1JFTE9DX0FB UkNINjRfVExTR0RfTU9WV19HMToKLSAgICAgIHJldHVybiBpc19sb2NhbAorICAgICAgcmV0dXJu IGxvY2FsX2V4ZWMKIAk/IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0xFX01PVldfVFBSRUxfRzIKIAk6 IEJGRF9SRUxPQ19BQVJDSDY0X1RMU0lFX01PVldfR09UVFBSRUxfRzE7CiAjZW5kaWYKQEAgLTUw ODIsNyArNTA4NCw3IEBAIGFhcmNoNjRfdGxzX3RyYW5zaXRpb24gKGJmZCAqaW5wdXRfYmZkLAog ICBpZiAoISBhYXJjaDY0X2Nhbl9yZWxheF90bHMgKGlucHV0X2JmZCwgaW5mbywgYmZkX3JfdHlw ZSwgaCwgcl9zeW1uZHgpKQogICAgIHJldHVybiBiZmRfcl90eXBlOwogCi0gIHJldHVybiBhYXJj aDY0X3Rsc190cmFuc2l0aW9uX3dpdGhvdXRfY2hlY2sgKGJmZF9yX3R5cGUsIGgpOworICByZXR1 cm4gYWFyY2g2NF90bHNfdHJhbnNpdGlvbl93aXRob3V0X2NoZWNrIChiZmRfcl90eXBlLCBoLCBp bmZvKTsKIH0KIAogLyogUmV0dXJuIHRoZSBiYXNlIFZNQSBhZGRyZXNzIHdoaWNoIHNob3VsZCBi ZSBzdWJ0cmFjdGVkIGZyb20gcmVhbCBhZGRyZXNzZXMKQEAgLTYzMjEsOSArNjMyMywxMSBAQCBz dGF0aWMgYmZkX3JlbG9jX3N0YXR1c190eXBlCiBlbGZOTl9hYXJjaDY0X3Rsc19yZWxheCAoc3Ry dWN0IGVsZl9hYXJjaDY0X2xpbmtfaGFzaF90YWJsZSAqZ2xvYmFscywKIAkJCSBiZmQgKmlucHV0 X2JmZCwgYXNlY3Rpb24gKmlucHV0X3NlY3Rpb24sCiAJCQkgYmZkX2J5dGUgKmNvbnRlbnRzLCBF bGZfSW50ZXJuYWxfUmVsYSAqcmVsLAotCQkJIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpo KQorCQkJIHN0cnVjdCBlbGZfbGlua19oYXNoX2VudHJ5ICpoLAorCQkJIHN0cnVjdCBiZmRfbGlu a19pbmZvICppbmZvKQogewotICBib29sIGlzX2xvY2FsID0gaCA9PSBOVUxMOworICBib29sIGxv Y2FsX2V4ZWMgPSBiZmRfbGlua19leGVjdXRhYmxlIChpbmZvKQorICAgICYmIFNZTUJPTF9SRUZF UkVOQ0VTX0xPQ0FMIChpbmZvLCBoKTsKICAgdW5zaWduZWQgaW50IHJfdHlwZSA9IEVMRk5OX1Jf VFlQRSAocmVsLT5yX2luZm8pOwogICB1bnNpZ25lZCBsb25nIGluc247CiAKQEAgLTYzMzMsNyAr NjMzNyw3IEBAIGVsZk5OX2FhcmNoNjRfdGxzX3JlbGF4IChzdHJ1Y3QgZWxmX2FhcmNoNjRfbGlu a19oYXNoX3RhYmxlICpnbG9iYWxzLAogICAgIHsKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0 X1RMU0RFU0NfQURSX1BBR0UyMToKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0dEX0FE Ul9QQUdFMjE6Ci0gICAgICBpZiAoaXNfbG9jYWwpCisgICAgICBpZiAobG9jYWxfZXhlYykKIAl7 CiAJICAvKiBHRC0+TEUgcmVsYXhhdGlvbjoKIAkgICAgIGFkcnAgeDAsIDp0bHNnZDp2YXIgICAg ID0+ICAgbW92eiBSMCwgOnRwcmVsX2cxOnZhcgpAQCAtNjM2Miw3ICs2MzY2LDcgQEAgZWxmTk5f YWFyY2g2NF90bHNfcmVsYXggKHN0cnVjdCBlbGZfYWFyY2g2NF9saW5rX2hhc2hfdGFibGUgKmds b2JhbHMsCiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExTREVT Q19MRF9QUkVMMTk6Ci0gICAgICBpZiAoaXNfbG9jYWwpCisgICAgICBpZiAobG9jYWxfZXhlYykK IAl7CiAJICAvKiBUaW55IFRMU0RFU0MtPkxFIHJlbGF4YXRpb246CiAJICAgICBsZHIgICB4MSwg OnRsc2Rlc2M6dmFyCSA9PiAgbW92eiAgUjAsICM6dHByZWxfZzE6dmFyCkBAIC02NDA0LDcgKzY0 MDgsNyBAQCBlbGZOTl9hYXJjaDY0X3Rsc19yZWxheCAoc3RydWN0IGVsZl9hYXJjaDY0X2xpbmtf aGFzaF90YWJsZSAqZ2xvYmFscywKIAl9CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RM U0dEX0FEUl9QUkVMMjE6Ci0gICAgICBpZiAoaXNfbG9jYWwpCisgICAgICBpZiAobG9jYWxfZXhl YykKIAl7CiAJICAvKiBUaW55IEdELT5MRSByZWxheGF0aW9uOgogCSAgICAgYWRyIHgwLCA6dGxz Z2Q6dmFyCSAgICAgPT4JICBtcnMgIHgxLCB0cGlkcl9lbDAKQEAgLTY0NTYsNyArNjQ2MCw3IEBA IGVsZk5OX2FhcmNoNjRfdGxzX3JlbGF4IChzdHJ1Y3QgZWxmX2FhcmNoNjRfbGlua19oYXNoX3Rh YmxlICpnbG9iYWxzLAogICAgICAgQkZEX0FTU0VSVCAocmVsLT5yX29mZnNldCArIDEyID09IHJl bFsyXS5yX29mZnNldCk7CiAgICAgICBCRkRfQVNTRVJUIChFTEZOTl9SX1RZUEUgKHJlbFsyXS5y X2luZm8pID09IEFBUkNINjRfUiAoQ0FMTDI2KSk7CiAKLSAgICAgIGlmIChpc19sb2NhbCkKKyAg ICAgIGlmIChsb2NhbF9leGVjKQogCXsKIAkgIC8qIExhcmdlIEdELT5MRSByZWxheGF0aW9uOgog CSAgICAgbW92eiB4MCwgIzp0bHNnZF9nMTp2YXIJPT4gbW92eiB4MCwgIzp0cHJlbF9nMjp2YXIs IGxzbCAjMzIKQEAgLTY1MDAsNyArNjUwNCw3IEBAIGVsZk5OX2FhcmNoNjRfdGxzX3JlbGF4IChz dHJ1Y3QgZWxmX2FhcmNoNjRfbGlua19oYXNoX3RhYmxlICpnbG9iYWxzLAogICAgICAgcmV0dXJu IGJmZF9yZWxvY19jb250aW51ZTsKIAogICAgIGNhc2UgQkZEX1JFTE9DX0FBUkNINjRfVExTREVT Q19MRE5OX0xPMTJfTkM6Ci0gICAgICBpZiAoaXNfbG9jYWwpCisgICAgICBpZiAobG9jYWxfZXhl YykKIAl7CiAJICAvKiBHRC0+TEUgcmVsYXhhdGlvbjoKIAkgICAgIGxkciB4ZCwgW3gwLCAjOnRs c2Rlc2NfbG8xMjp2YXJdICAgPT4gICBtb3ZrIHgwLCA6dHByZWxfZzBfbmM6dmFyCkBAIC02NTIx LDcgKzY1MjUsNyBAQCBlbGZOTl9hYXJjaDY0X3Rsc19yZWxheCAoc3RydWN0IGVsZl9hYXJjaDY0 X2xpbmtfaGFzaF90YWJsZSAqZ2xvYmFscywKIAl9CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJD SDY0X1RMU0dEX0FERF9MTzEyX05DOgotICAgICAgaWYgKGlzX2xvY2FsKQorICAgICAgaWYgKGxv Y2FsX2V4ZWMpCiAJewogCSAgLyogR0QtPkxFIHJlbGF4YXRpb24KIAkgICAgIGFkZCAgeDAsICM6 dGxzZ2RfbG8xMjp2YXIJPT4gbW92ayBSMCwgOnRwcmVsX2cwX25jOnZhcgpAQCAtNjU3NCw3ICs2 NTc4LDcgQEAgZWxmTk5fYWFyY2g2NF90bHNfcmVsYXggKHN0cnVjdCBlbGZfYWFyY2g2NF9saW5r X2hhc2hfdGFibGUgKmdsb2JhbHMsCiAgICAgICByZXR1cm4gYmZkX3JlbG9jX29rOwogCiAgICAg Y2FzZSBCRkRfUkVMT0NfQUFSQ0g2NF9UTFNERVNDX0xEUjoKLSAgICAgIGlmIChpc19sb2NhbCkK KyAgICAgIGlmIChsb2NhbF9leGVjKQogCXsKIAkgIC8qIEdELT5MRSByZWxheGF0aW9uOgogCSAg ICAgbGRyIHhkLCBbZ3AsIHhuXSAgID0+ICAgbW92ayBSMCwgIzp0cHJlbF9nMF9uYzp2YXIKQEAg LTY2MDEsMTIgKzY2MDUsMTIgQEAgZWxmTk5fYWFyY2g2NF90bHNfcmVsYXggKHN0cnVjdCBlbGZf YWFyY2g2NF9saW5rX2hhc2hfdGFibGUgKmdsb2JhbHMsCiAJIG1vdmsgeGQsICM6dGxzZGVzY19v ZmZfZzBfbmM6dmFyID0+IG1vdmsgUmQsICM6Z290dHByZWxfZzBfbmM6dmFyCiAKIAkgV2hlcmUg UiBpcyB4IGZvciBscDY0IG1vZGUsIGFuZCB3IGZvciBJTFAzMiBtb2RlLiAgKi8KLSAgICAgIGlm IChpc19sb2NhbCkKKyAgICAgIGlmIChsb2NhbF9leGVjKQogCWJmZF9wdXRsMzIgKGxkcl9od19S MCwgY29udGVudHMgKyByZWwtPnJfb2Zmc2V0KTsKICAgICAgIHJldHVybiBiZmRfcmVsb2NfY29u dGludWU7CiAKICAgICBjYXNlIEJGRF9SRUxPQ19BQVJDSDY0X1RMU0RFU0NfT0ZGX0cxOgotICAg ICAgaWYgKGlzX2xvY2FsKQorICAgICAgaWYgKGxvY2FsX2V4ZWMpCiAJewogCSAgLyogR0QtPkxF IHJlbGF4YXRpb246CiAJICAgICBtb3Z6IHhkLCAjOnRsc2Rlc2Nfb2ZmX2cxOnZhciA9PiBtb3Z6 IFIwLCAjOnRwcmVsX2cyOnZhciwgbHNsICMzMgpAQCAtNjYzMSw3ICs2NjM1LDcgQEAgZWxmTk5f YWFyY2g2NF90bHNfcmVsYXggKHN0cnVjdCBlbGZfYWFyY2g2NF9saW5rX2hhc2hfdGFibGUgKmds b2JhbHMsCiAJIGFkcnAgeGQsIDpnb3R0cHJlbDp2YXIgICA9PiAgIG1vdnogUmQsIDp0cHJlbF9n MTp2YXIKIAogCSBXaGVyZSBSIGlzIHggZm9yIGxwNjQgbW9kZSwgYW5kIHcgZm9yIElMUDMyIG1v ZGUuICAqLwotICAgICAgaWYgKGlzX2xvY2FsKQorICAgICAgaWYgKGxvY2FsX2V4ZWMpCiAJewog CSAgaW5zbiA9IGJmZF9nZXRsMzIgKGNvbnRlbnRzICsgcmVsLT5yX29mZnNldCk7CiAJICBiZmRf cHV0bDMyIChtb3Z6X1IwIHwgKGluc24gJiAweDFmKSwgY29udGVudHMgKyByZWwtPnJfb2Zmc2V0 KTsKQEAgLTY2NDYsNyArNjY1MCw3IEBAIGVsZk5OX2FhcmNoNjRfdGxzX3JlbGF4IChzdHJ1Y3Qg ZWxmX2FhcmNoNjRfbGlua19oYXNoX3RhYmxlICpnbG9iYWxzLAogCSBsZHIgIHhkLCBbeG0sICM6 Z290dHByZWxfbG8xMjp2YXJdICAgPT4gICBtb3ZrIFJkLCA6dHByZWxfZzBfbmM6dmFyCiAKIAkg V2hlcmUgUiBpcyB4IGZvciBscDY0IG1vZGUsIGFuZCB3IGZvciBJTFAzMiBtb2RlLiAgKi8KLSAg ICAgIGlmIChpc19sb2NhbCkKKyAgICAgIGlmIChsb2NhbF9leGVjKQogCXsKIAkgIGluc24gPSBi ZmRfZ2V0bDMyIChjb250ZW50cyArIHJlbC0+cl9vZmZzZXQpOwogCSAgYmZkX3B1dGwzMiAobW92 a19SMCB8IChpbnNuICYgMHgxZiksIGNvbnRlbnRzICsgcmVsLT5yX29mZnNldCk7CkBAIC02NjU5 LDcgKzY2NjMsNyBAQCBlbGZOTl9hYXJjaDY0X3Rsc19yZWxheCAoc3RydWN0IGVsZl9hYXJjaDY0 X2xpbmtfaGFzaF90YWJsZSAqZ2xvYmFscywKIAkgYmwgICBfX3Rsc19nZXRfYWRkciA9PiBhZGQg UjAsIFIwLCBUQ0JfU0laRQogCiAJIFdoZXJlIFIgaXMgeCBmb3IgbHA2NCBtb2RlLCBhbmQgdyBm b3IgaWxwMzIgbW9kZS4gICovCi0gICAgICBpZiAoaXNfbG9jYWwpCisgICAgICBpZiAobG9jYWxf ZXhlYykKIAl7CiAJICBCRkRfQVNTRVJUIChyZWwtPnJfb2Zmc2V0ICsgNCA9PSByZWxbMV0ucl9v ZmZzZXQpOwogCSAgQkZEX0FTU0VSVCAoRUxGTk5fUl9UWVBFIChyZWxbMV0ucl9pbmZvKSA9PSBB QVJDSDY0X1IgKENBTEwyNikpOwpAQCAtNjY3Niw3ICs2NjgwLDcgQEAgZWxmTk5fYWFyY2g2NF90 bHNfcmVsYXggKHN0cnVjdCBlbGZfYWFyY2g2NF9saW5rX2hhc2hfdGFibGUgKmdsb2JhbHMsCiAg ICAgICAvKiBMRC0+TEUgcmVsYXhhdGlvbiAoc21hbGwpOgogCSBhZHJwICB4MCwgOnRsc2xkbTp4 ICAgICAgID0+IG1ycyB4MCwgdHBpZHJfZWwwCiAgICAgICAgKi8KLSAgICAgIGlmIChpc19sb2Nh bCkKKyAgICAgIGlmIChsb2NhbF9leGVjKQogCXsKIAkgIGJmZF9wdXRsMzIgKDB4ZDUzYmQwNDAs IGNvbnRlbnRzICsgcmVsLT5yX29mZnNldCk7CiAJICByZXR1cm4gYmZkX3JlbG9jX29rOwpAQCAt NjY4OSw3ICs2NjkzLDcgQEAgZWxmTk5fYWFyY2g2NF90bHNfcmVsYXggKHN0cnVjdCBlbGZfYWFy Y2g2NF9saW5rX2hhc2hfdGFibGUgKmdsb2JhbHMsCiAJIGJsICAgX190bHNfZ2V0X2FkZHIgICAg ICAgPT4gbm9wCiAKIAkgV2hlcmUgUiBpcyB4IGZvciBscDY0IG1vZGUsIGFuZCB3IGZvciBpbHAz MiBtb2RlLiAgKi8KLSAgICAgIGlmIChpc19sb2NhbCkKKyAgICAgIGlmIChsb2NhbF9leGVjKQog CXsKIAkgIEJGRF9BU1NFUlQgKHJlbC0+cl9vZmZzZXQgKyA0ID09IHJlbFsxXS5yX29mZnNldCk7 CiAJICBCRkRfQVNTRVJUIChFTEZOTl9SX1RZUEUgKHJlbFsxXS5yX2luZm8pID09IEFBUkNINjRf UiAoQ0FMTDI2KSk7CkBAIC02ODYzLDcgKzY4NjcsNyBAQCBlbGZOTl9hYXJjaDY0X3JlbG9jYXRl X3NlY3Rpb24gKGJmZCAqb3V0cHV0X2JmZCwKIAkgIEJGRF9BU1NFUlQgKGhvd3RvICE9IE5VTEwp OwogCSAgcl90eXBlID0gaG93dG8tPnR5cGU7CiAJICByID0gZWxmTk5fYWFyY2g2NF90bHNfcmVs YXggKGdsb2JhbHMsIGlucHV0X2JmZCwgaW5wdXRfc2VjdGlvbiwKLQkJCQkgICAgICAgY29udGVu dHMsIHJlbCwgaCk7CisJCQkJICAgICAgIGNvbnRlbnRzLCByZWwsIGgsIGluZm8pOwogCSAgdW5y ZXNvbHZlZF9yZWxvYyA9IDA7CiAJfQogICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1 aXRlL2xkLWFhcmNoNjQvYWFyY2g2NC1lbGYuZXhwIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQv YWFyY2g2NC1lbGYuZXhwCmluZGV4IDNjNDVmODcxNTFmODJiMmEzYTVmY2IxMGNlYTRiMGNhYjUz NGFiNDAuLjMzN2JlYWRjYmZlNWQ3ZWE1NGE3YmJhNDUwMTdiMTBiYjE2MDRjYjAgMTAwNjQ0Ci0t LSBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L2FhcmNoNjQtZWxmLmV4cAorKysgYi9sZC90ZXN0 c3VpdGUvbGQtYWFyY2g2NC9hYXJjaDY0LWVsZi5leHAKQEAgLTI3MywxNyArMjczLDggQEAgcnVu X2R1bXBfdGVzdCAidGxzLXJlbGF4LWdkLWxlLWlscDMyIgogcnVuX2R1bXBfdGVzdCAidGxzLXJl bGF4LWdkZXNjLWxlIgogcnVuX2R1bXBfdGVzdCAidGxzLXJlbGF4LWdkZXNjLWxlLW5vdyIKIHJ1 bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZGVzYy1sZS1pbHAzMiIKLXJ1bl9kdW1wX3Rlc3QgInRs cy1yZWxheC1nZC1pZSIKLXJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZC1pZS1pbHAzMiIKLXJ1 bl9kdW1wX3Rlc3RfbHA2NCAidGxzLXJlbGF4LWxhcmdlLWdkLWllIgotcnVuX2R1bXBfdGVzdF9s cDY0ICJ0bHMtcmVsYXgtbGFyZ2UtZ2QtaWUtYmUiCiBydW5fZHVtcF90ZXN0X2xwNjQgInRscy1y ZWxheC1sYXJnZS1nZC1sZSIKIHJ1bl9kdW1wX3Rlc3RfbHA2NCAidGxzLXJlbGF4LWxhcmdlLWdk LWxlLWJlIgotcnVuX2R1bXBfdGVzdF9scDY0ICJ0bHMtcmVsYXgtbGFyZ2UtZGVzYy1pZSIKLXJ1 bl9kdW1wX3Rlc3RfbHA2NCAidGxzLXJlbGF4LWxhcmdlLWRlc2MtaWUtYmUiCi1ydW5fZHVtcF90 ZXN0X2xwNjQgInRscy1yZWxheC1sYXJnZS1kZXNjLWxlIgotcnVuX2R1bXBfdGVzdF9scDY0ICJ0 bHMtcmVsYXgtbGFyZ2UtZGVzYy1sZS1iZSIKLXJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZGVz Yy1pZSIKIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1pZS1sZSIKIHJ1bl9kdW1wX3Rlc3QgInRs cy1yZWxheC1pZS1sZS1pbHAzMiIKIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1sZC1sZS1zbWFs bCIKQEAgLTI5Miw3ICsyODMsNiBAQCBydW5fZHVtcF90ZXN0ICJ0bHMtcmVsYXgtbGQtbGUtdGlu eSIKIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1sZC1sZS10aW55LWlscDMyIgogcnVuX2R1bXBf dGVzdCAidGxzLWRlc2MtaWUiCiBydW5fZHVtcF90ZXN0ICJ0bHMtZGVzYy1pZS1pbHAzMiIKLXJ1 bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZGVzYy1pZS0yIgogcnVuX2R1bXBfdGVzdCAidGxzLXJl bGF4LWdkZXNjLWxlLTIiCiBydW5fZHVtcF90ZXN0ICJ0bHMtcmVsYXgtZ2Rlc2MtbGUtMi1pbHAz MiIKIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1pZS1sZS0yIgpAQCAtMzAwLDEzICsyOTAsOSBA QCBydW5fZHVtcF90ZXN0ICJ0bHMtcmVsYXgtaWUtbGUtMi1pbHAzMiIKIHJ1bl9kdW1wX3Rlc3Qg InRscy1yZWxheC1pZS1sZS0zIgogcnVuX2R1bXBfdGVzdCAidGxzLXJlbGF4LWllLWxlLTMtaWxw MzIiCiBydW5fZHVtcF90ZXN0ICJ0bHMtdGlueS1nZCIKLXJ1bl9kdW1wX3Rlc3QgInRscy10aW55 LWdkLWllIgotcnVuX2R1bXBfdGVzdCAidGxzLXRpbnktZ2QtaWUtaWxwMzIiCiBydW5fZHVtcF90 ZXN0ICJ0bHMtdGlueS1nZC1sZSIKIHJ1bl9kdW1wX3Rlc3QgInRscy10aW55LWdkLWxlLWlscDMy IgogcnVuX2R1bXBfdGVzdCAidGxzLXRpbnktZGVzYyIKLXJ1bl9kdW1wX3Rlc3QgInRscy10aW55 LWRlc2MtaWUiCi1ydW5fZHVtcF90ZXN0ICJ0bHMtdGlueS1kZXNjLWllLWlscDMyIgogcnVuX2R1 bXBfdGVzdCAidGxzLXRpbnktZGVzYy1sZSIKIHJ1bl9kdW1wX3Rlc3QgInRscy10aW55LWRlc2Mt bGUtaWxwMzIiCiBydW5fZHVtcF90ZXN0ICJ0bHMtdGlueS1pZSIKQEAgLTMzMSw2ICszMTcsMzMg QEAgcnVuX2R1bXBfdGVzdCAicHJvdGVjdGVkLWRhdGEiCiBydW5fZHVtcF90ZXN0X2xwNjQgInBy MjI3NjQiCiBydW5fZHVtcF90ZXN0X2xwNjQgInByMjA0MDIiCiAKK2lmIHtbY2hlY2tfc2hhcmVk X2xpYl9zdXBwb3J0XQorICAgICYmIFtsZF9hc3NlbWJsZSAkYXMgJHNyY2Rpci8kc3ViZGlyL3Rs cy1zaGFyZWRsaWIucyB0bXBkaXIvdGxzLXNoYXJlZGxpYi5vXQorICAgICYmIFtsZF9saW5rICRs ZCB0bXBkaXIvdGxzLXNoYXJlZGxpYi5zbyAiLXNoYXJlZCB0bXBkaXIvdGxzLXNoYXJlZGxpYi5v Il0gfSB7CisgICAgICBydW5fZHVtcF90ZXN0ICJ0bHMtcmVsYXgtZ2QtaWUiCisgICAgICBydW5f ZHVtcF90ZXN0X2xwNjQgInRscy1yZWxheC1sYXJnZS1nZC1pZSIKKyAgICAgIHJ1bl9kdW1wX3Rl c3RfbHA2NCAidGxzLXJlbGF4LWxhcmdlLWdkLWllLWJlIgorICAgICAgcnVuX2R1bXBfdGVzdF9s cDY0ICJ0bHMtcmVsYXgtbGFyZ2UtZGVzYy1pZSIKKyAgICAgIHJ1bl9kdW1wX3Rlc3RfbHA2NCAi dGxzLXJlbGF4LWxhcmdlLWRlc2MtaWUtYmUiCisgICAgICBydW5fZHVtcF90ZXN0X2xwNjQgInRs cy1yZWxheC1sYXJnZS1kZXNjLWxlIgorICAgICAgcnVuX2R1bXBfdGVzdF9scDY0ICJ0bHMtcmVs YXgtbGFyZ2UtZGVzYy1sZS1iZSIKKyAgICAgIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZGVz Yy1pZSIKKyAgICAgIHJ1bl9kdW1wX3Rlc3QgInRscy1yZWxheC1nZGVzYy1pZS0yIgorICAgICAg cnVuX2R1bXBfdGVzdCAidGxzLXRpbnktZ2QtaWUiCisgICAgICBydW5fZHVtcF90ZXN0ICJ0bHMt dGlueS1kZXNjLWllIgorfQoraWYge1tjaGVja19zaGFyZWRfbGliX3N1cHBvcnRdCisgICAgJiYg W2xkX2Fzc2VtYmxlX2ZsYWdzICRhcyAtbWFiaT1pbHAzMiAkc3JjZGlyLyRzdWJkaXIvdGxzLXNo YXJlZGxpYi5zIHRtcGRpci90bHMtc2hhcmVkbGliLm9dCisgICAgJiYgW2xkX2xpbmsgJGxkIHRt cGRpci90bHMtc2hhcmVkbGliLWlscDMyLnNvICItc2hhcmVkIHRtcGRpci90bHMtc2hhcmVkbGli Lm8gLW0gW2FhcmNoNjRfY2hvb3NlX2lscDMyX2VtdWxdIl0gfSB7CisgICAgICBydW5fZHVtcF90 ZXN0ICJ0bHMtcmVsYXgtZ2QtaWUtaWxwMzIiCisgICAgICBydW5fZHVtcF90ZXN0ICJ0bHMtdGlu eS1nZC1pZS1pbHAzMiIKKyAgICAgIHJ1bl9kdW1wX3Rlc3QgInRscy10aW55LWRlc2MtaWUtaWxw MzIiCit9CitydW5fZHVtcF90ZXN0ICJ0bHMtcmVsYXgtZ2QtaWUtMiIKK3J1bl9kdW1wX3Rlc3Qg InRscy1yZWxheC1nZC1pZS0zIgorcnVuX2R1bXBfdGVzdCAidGxzLXJlbGF4LWllLWxlLTQiCity dW5fZHVtcF90ZXN0ICJ0bHMtZ2Qtc3ltYm9saWMiCisKICMgaWZ1bmMgdGVzdHMKIHJ1bl9kdW1w X3Rlc3QgImlmdW5jLTEiCiBydW5fZHVtcF90ZXN0ICJpZnVuYy0xLWxvY2FsIgpkaWZmIC0tZ2l0 IGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLWdkLXN5bWJvbGljLmQgYi9sZC90ZXN0c3Vp dGUvbGQtYWFyY2g2NC90bHMtZ2Qtc3ltYm9saWMuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjczMmFjZGFmMTU0 M2ZmZDUxZmUyM2QwZGE1NjMzZWNiZTA0ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGQvdGVzdHN1 aXRlL2xkLWFhcmNoNjQvdGxzLWdkLXN5bWJvbGljLmQKQEAgLTAsMCArMSwyMCBAQAorIyBUZXN0 Y2FzZSB0byBzaG93IHRoYXQgLUJzeW1ib2xpYyBkb2VzIG5vdCB0cmlnZ2VyIGFueSByZWxheGF0 aW9uIGZyb20gZ2VuZXJhbAorIyBkeW5hbWljIG9yIGluaXRpYWwgZXhlYyBmb3IgZ2xvYmFsIHN5 bWJvbHMuCisjdGFyZ2V0OiBbY2hlY2tfc2hhcmVkX2xpYl9zdXBwb3J0XQorI2xkOiAtc2hhcmVk IC1Cc3ltYm9saWMKKyNvYmpkdW1wOiAtZCAtaiAudGV4dAorCisuKjogICAgIGZpbGUgZm9ybWF0 IC4qCisKKworRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisKK1swLTlhLWZdKyA8X3Rl c3RfdGxzX2Rlc2M+OgorICtbMC05YS1mXSs6CS4uLi4uLi4uIAlhZHJwCXgwLCAuKgorICtbMC05 YS1mXSs6CS4uLi4uLi4uIAlsZHIJeDEsIFxbeDAsICMuKlxdCisgK1swLTlhLWZdKzoJLi4uLi4u Li4gCWFkZAl4MCwgeDAsIC4qCisgK1swLTlhLWZdKzoJZDYzZjAwMjAgCWJscgl4MQorCitbMC05 YS1mXSsgPF90ZXN0X3Rsc19kZXNjMj46CisgK1swLTlhLWZdKzoJLi4uLi4uLi4gCWFkcnAJeDAs IC4qCisgK1swLTlhLWZdKzoJLi4uLi4uLi4gCWxkcgl4MCwgXFt4MCwgIy4qXF0KZGlmZiAtLWdp dCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1nZC1zeW1ib2xpYy5zIGIvbGQvdGVzdHN1 aXRlL2xkLWFhcmNoNjQvdGxzLWdkLXN5bWJvbGljLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDJjYTVkYWM3YmUy YWVhYjg5N2Q5ZTdiMGQ4ZWMzMGFmYzdjZWMxOQotLS0gL2Rldi9udWxsCisrKyBiL2xkL3Rlc3Rz dWl0ZS9sZC1hYXJjaDY0L3Rscy1nZC1zeW1ib2xpYy5zCkBAIC0wLDAgKzEsMjcgQEAKKwkjIERl bW9uc3RyYXRpbmcgVExTIHJlbGF4YXRpb24gYmVoYXZpb3IgZm9yIC1Cc3ltYm9saWMgbGlua2lu Zy4KKwkjIChpLmUuIG5vIGV4dHJhIHJlbGF4YXRpb24gd2hlbiB1c2luZyAtQnN5bWJvbGljKS4K KyAgICAgICAgLmdsb2JhbCB0bHNkZXNjdmFyCisgICAgICAgIC5nbG9iYWwgdGxzZGVzY3ZhcjIK KyAgICAgICAgLnNlY3Rpb24gICAgICAgIC50YnNzLCJhd1QiLCVub2JpdHMKKyAgICAgICAgLmFs aWduICAyCisgICAgICAgIC50eXBlICAgdGxzZGVzY3ZhciwgJW9iamVjdAorICAgICAgICAuc2l6 ZSAgIHRsc2Rlc2N2YXIsIDQKK3Rsc2Rlc2N2YXI6CisgICAgICAgIC56ZXJvICAgNAorICAgICAg ICAudHlwZSAgIHRsc2Rlc2N2YXIyLCAlb2JqZWN0CisgICAgICAgIC5zaXplICAgdGxzZGVzY3Zh cjIsIDQKK3Rsc2Rlc2N2YXIyOgorICAgICAgICAuemVybyAgIDQKKy50ZXh0CitfdGVzdF90bHNf ZGVzYzoKKworICAgICAgICBhZHJwICB4MCwgOnRsc2Rlc2M6dGxzZGVzY3ZhcgorICAgICAgICBs ZHIgICB4MSwgW3gwLCA6dGxzZGVzY19sbzEyOnRsc2Rlc2N2YXJdCisgICAgICAgIGFkZCAgIHgw LCB4MCwgOnRsc2Rlc2NfbG8xMjp0bHNkZXNjdmFyCisgICAgICAgIC50bHNkZXNjY2FsbCB0bHNk ZXNjdmFyCisgICAgICAgIGJsciAgIHgxCisKK190ZXN0X3Rsc19kZXNjMjoKKworICAgICAgICBh ZHJwICAgIHgwLCA6Z290dHByZWw6dGxzZGVzY3ZhcjIKKyAgICAgICAgbGRyICAgICB4MCwgW3gw LCAjOmdvdHRwcmVsX2xvMTI6dGxzZGVzY3ZhcjJdCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUv bGQtYWFyY2g2NC90bHMtcmVsYXgtYWxsLWlscDMyLmQgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2 NC90bHMtcmVsYXgtYWxsLWlscDMyLmQKaW5kZXggMWNiNGVmNDI2MTMwN2MxMzEzOTcwN2FkMjdi OGU4NWJiZTExYjBhOS4uNjJmYWVkNGI3M2FhYzQ4NDExOWVkMThkYmM3ZjU4OGY2ZWM4Yzc5NCAx MDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWFsbC1pbHAzMi5k CisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1hbGwtaWxwMzIuZApAQCAt NSw4ICs1LDggQEAKICMuLi4KICArMTAwMDA6CWE5YmY3YmZkIAlzdHAJeDI5LCB4MzAsIFxbc3As ICMtMTZcXSEKICArMTAwMDQ6CTkxMDAwM2ZkIAltb3YJeDI5LCBzcAotICsxMDAwODoJOTAwMDAw ODAgCWFkcnAJeDAsIDIwMDAwIDxfR0xPQkFMX09GRlNFVF9UQUJMRV8+Ci0gKzEwMDBjOgliOTQw MDQwMCAJbGRyCXcwLCBcW3gwLCAjNFxdCisgKzEwMDA4Ogk1MmEwMDAwMCAJbW92egl3MCwgIzB4 MCwgbHNsICMxNgorICsxMDAwYzoJNzI4MDAxMDAgCW1vdmsJdzAsICMweDgKICArMTAwMTA6CWQ1 MDMyMDFmIAlub3AKICArMTAwMTQ6CWQ1MDMyMDFmIAlub3AKICArMTAwMTg6CWQ1M2JkMDQxIAlt cnMJeDEsIHRwaWRyX2VsMApAQCAtMjAsOCArMjAsOCBAQAogICsxMDAzODoJOGIwMDAwNDAgCWFk ZAl4MCwgeDIsIHgwCiAgKzEwMDNjOgliOTQwMDAwMCAJbGRyCXcwLCBcW3gwXF0KICArMTAwNDA6 CTBiMDAwMDIxIAlhZGQJdzEsIHcxLCB3MAotICsxMDA0NDoJOTAwMDAwODAgCWFkcnAJeDAsIDIw MDAwIDxfR0xPQkFMX09GRlNFVF9UQUJMRV8+Ci0gKzEwMDQ4OgliOTQwMDgwMCAJbGRyCXcwLCBc W3gwLCAjOFxdCisgKzEwMDQ0Ogk1MmEwMDAwMCAJbW92egl3MCwgIzB4MCwgbHNsICMxNgorICsx MDA0ODoJNzI4MDAyMDAgCW1vdmsJdzAsICMweDEwCiAgKzEwMDRjOglkNTNiZDA0MSAJbXJzCXgx LCB0cGlkcl9lbDAKICArMTAwNTA6CTBiMDAwMDIwIAlhZGQJdzAsIHcxLCB3MAogICsxMDA1NDoJ Yjk0MDAwMDAgCWxkcgl3MCwgXFt4MFxdCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtYWFy Y2g2NC90bHMtcmVsYXgtYWxsLmQgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgt YWxsLmQKaW5kZXggNTk0MjE4NjRmOTU1ODA1MGJmMWQyYWUxY2FiNzk0YmY1NGFjMzBkZi4uMTI2 MmE5OWE2YTBkZWJiMjIyNTY5MDNhMjVlOTA3NWYxNjY2NTQzYiAxMDA2NDQKLS0tIGEvbGQvdGVz dHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWFsbC5kCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1h YXJjaDY0L3Rscy1yZWxheC1hbGwuZApAQCAtNCw4ICs0LDggQEAKICMuLi4KICArMTAwMDA6CWE5 YmY3YmZkIAlzdHAJeDI5LCB4MzAsIFxbc3AsICMtMTZcXSEKICArMTAwMDQ6CTkxMDAwM2ZkIAlt b3YJeDI5LCBzcAotICsxMDAwODoJOTAwMDAwODAgCWFkcnAJeDAsIDIwMDAwIDxfR0xPQkFMX09G RlNFVF9UQUJMRV8+Ci0gKzEwMDBjOglmOTQwMDQwMCAJbGRyCXgwLCBcW3gwLCAjOFxdCisgKzEw MDA4OglkMmEwMDAwMCAJbW92egl4MCwgIzB4MCwgbHNsICMxNgorICsxMDAwYzoJZjI4MDAyMDAg CW1vdmsJeDAsICMweDEwCiAgKzEwMDEwOglkNTAzMjAxZiAJbm9wCiAgKzEwMDE0OglkNTAzMjAx ZiAJbm9wCiAgKzEwMDE4OglkNTNiZDA0MSAJbXJzCXgxLCB0cGlkcl9lbDAKQEAgLTE5LDggKzE5 LDggQEAKICArMTAwMzg6CThiMDAwMDQwIAlhZGQJeDAsIHgyLCB4MAogICsxMDAzYzoJYjk0MDAw MDAgCWxkcgl3MCwgXFt4MFxdCiAgKzEwMDQwOgkwYjAwMDAyMSAJYWRkCXcxLCB3MSwgdzAKLSAr MTAwNDQ6CTkwMDAwMDgwIAlhZHJwCXgwLCAyMDAwMCA8X0dMT0JBTF9PRkZTRVRfVEFCTEVfPgot ICsxMDA0ODoJZjk0MDA4MDAgCWxkcgl4MCwgXFt4MCwgIzE2XF0KKyArMTAwNDQ6CWQyYTAwMDAw IAltb3Z6CXgwLCAjMHgwLCBsc2wgIzE2CisgKzEwMDQ4OglmMjgwMDMwMCAJbW92awl4MCwgIzB4 MTgKICArMTAwNGM6CWQ1M2JkMDQxIAltcnMJeDEsIHRwaWRyX2VsMAogICsxMDA1MDoJOGIwMDAw MjAgCWFkZAl4MCwgeDEsIHgwCiAgKzEwMDU0OgliOTQwMDAwMCAJbGRyCXcwLCBcW3gwXF0KZGlm ZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZC1pZS0yLmQgYi9s ZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2QtaWUtMi5kCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYw MjgxYjc3NTc5ZDI1ODcwNjI1MTdiZTk1MTNlN2FkNzZkMzlhMjIKLS0tIC9kZXYvbnVsbAorKysg Yi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2QtaWUtMi5kCkBAIC0wLDAgKzEs MjcgQEAKKyMgVGhlIGxpbmtlciByZWNvZ25pc2VzIHRoYXQgaWYgd2UgaGF2ZSBvbmUgSUUgYWNj ZXNzIHRvIGEgVExTIHN5bWJvbCB0aGVuIGFsbAorIyBhY2Nlc3NlcyB0byB0aGF0IHN5bWJvbCBj b3VsZCBiZSBJRS4gIEhlcmUgd2UgYXJlIGFsc28gaW50ZXJlc3RlZCB0byBjaGVjaworIyB0aGUg bGlua2VyIGRvZXMgbm90IGFsc28gZGVjaWRlIHRoYXQgYSBzZWNvbmQgYWNjZXNzIHRvIHRoYXQg c3ltYm9sIGNvdWxkIGJlCisjIExFLgorI3RhcmdldDogW2NoZWNrX3NoYXJlZF9saWJfc3VwcG9y dF0KKyNsZDogLXNoYXJlZAorI29iamR1bXA6IC1kcgorCisuKjogICAgIGZpbGUgZm9ybWF0IC4q CisKKworRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisKK1swLTlhLWZdKyA8Zm9vPjoK KyArWzAtOWEtZl0rOglkMjgwMDAwMCAJbW92CXgwLCAjMHgwICAgICAgICAgICAgICAgICAgIAkv LyAjMAorICtbMC05YS1mXSs6CWQ1M2JkMDQxIAltcnMJeDEsIHRwaWRyX2VsMAorICtbMC05YS1m XSs6CS4qIAlhZHJwCXgwLCAuKgorICtbMC05YS1mXSs6CS4qIAlsZHIJeDAsIFxbeDAsICMuKlxd CisgK1swLTlhLWZdKzoJYjg2MDY4MjAgCWxkcgl3MCwgXFt4MSwgeDBcXQorICtbMC05YS1mXSs6 CWQ1M2JkMDQxIAltcnMJeDEsIHRwaWRyX2VsMAorICtbMC05YS1mXSs6CTkxMDAwM2ZkIAltb3YJ eDI5LCBzcAorICtbMC05YS1mXSs6CS4qIAlhZHJwCXgwLCAuKgorICtbMC05YS1mXSs6CS4qIAls ZHIJeDAsIFxbeDAsICMuKlxdCisgK1swLTlhLWZdKzoJZDUwMzIwMWYgCW5vcAorICtbMC05YS1m XSs6CWQ1MDMyMDFmIAlub3AKKyArWzAtOWEtZl0rOgliODYwNjgyMCAJbGRyCXcwLCBcW3gxLCB4 MFxdCisgK1swLTlhLWZdKzoJZDY1ZjAzYzAgCXJldApkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRl L2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkLWllLTIucyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0 L3Rscy1yZWxheC1nZC1pZS0yLnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY4Y2ViNDg1N2NmOThlNDExY2NlZTBk NGI2Mjg5OGQxYjNjM2IyMgotLS0gL2Rldi9udWxsCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJj aDY0L3Rscy1yZWxheC1nZC1pZS0yLnMKQEAgLTAsMCArMSwzNCBAQAorICAgICAgICAuc2VjdGlv biAgICAgICAgLnRic3MsImF3VCIsQG5vYml0cworICAgICAgICAuYWxpZ24gIDIKKyAgICAgICAg LnR5cGUgICB5LCAlb2JqZWN0CisgICAgICAgIC5zaXplICAgeSwgNAoreToKKyAgICAgICAgLnpl cm8gICA0CisKKworCisKKyAgICAgICAgLnRleHQKKyAgICAgICAgLmdsb2JhbCBmb28KKyAgICAg ICAgLnR5cGUgZm9vLCBAZnVuY3Rpb24KK2ZvbzoKKwkjIEFjY2VzcyB0aGUgbG9jYWwgc3ltYm9s IHdpdGggYW4gSUUgYWNjZXNzLgorICAgICAgICBtb3YgICAgIHgwLCAwCisgICAgICAgIG1ycyAg ICAgeDEsIHRwaWRyX2VsMAorICAgICAgICBhZHJwICAgIHgwLCA6Z290dHByZWw6eQorICAgICAg ICBsZHIgICAgIHgwLCBbeDAsICM6Z290dHByZWxfbG8xMjp5XQorICAgICAgICBsZHIgICAgIHcw LCBbeDEsIHgwXQorCisJIyBBbHNvIGFjY2VzcyB0aGUgc2FtZSBzeW1ib2wgd2l0aCBhIEdlbmVy YWwgRHluYW1pYyBhY2Nlc3MuCisJIyBUaGUgbGlua2VyIHNob3VsZCBiZSBhYmxlIHRvIHJlY29n bmlzZSB0aGF0IGlmIHdlJ3JlIGFscmVhZHkKKwkjIGFjY2Vzc2luZyB0aGlzIHN5bWJvbCB3aXRo IGFuIEluaXRpYWwgRXhlYyBhY2Nlc3MgdGhlbiB0aGlzIEdlbmVyYWwKKwkjIER5bmFtaWMgYWNj ZXNzIGNvdWxkIGJlIHJlbGF4ZWQgdG8gYW4gSW5pdGlhbCBFeGVjIG9uZSB0b28uCisgICAgICAg IG1ycyAgICAgeDEsIHRwaWRyX2VsMAorICAgICAgICBtb3YgICAgIHgyOSwgc3AKKyAgICAgICAg YWRycCAgICB4MCwgOnRsc2Rlc2M6eQorICAgICAgICBsZHIgICAgIHgyLCBbeDAsICM6dGxzZGVz Y19sbzEyOnldCisgICAgICAgIGFkZCAgICAgeDAsIHgwLCA6dGxzZGVzY19sbzEyOnkKKyAgICAg ICAgLnRsc2Rlc2NjYWxsICAgIHkKKyAgICAgICAgYmxyICAgICB4MgorICAgICAgICBsZHIgICAg IHcwLCBbeDEsIHgwXQorICAgICAgICByZXQKZGlmZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1h YXJjaDY0L3Rscy1yZWxheC1nZC1pZS0zLmQgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMt cmVsYXgtZ2QtaWUtMy5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNDVlYzkwZDFhODUzZDU4ODM0YjIxOWJmOWZm MGZhNjg0N2RiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90 bHMtcmVsYXgtZ2QtaWUtMy5kCkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhlIGxpbmtlciByZWNvZ25p c2VzIHRoYXQgaWYgd2UgaGF2ZSBvbmUgSUUgYWNjZXNzIHRvIGEgVExTIHN5bWJvbCB0aGVuIGFs bAorIyBhY2Nlc3NlcyB0byB0aGF0IHN5bWJvbCBjb3VsZCBiZSBJRS4gIEhlcmUgd2UgYXJlIGFs c28gaW50ZXJlc3RlZCB0byBjaGVjaworIyB0aGUgbGlua2VyIGRvZXMgbm90IGFsc28gZGVjaWRl IHRoYXQgYSBzZWNvbmQgYWNjZXNzIHRvIHRoYXQgc3ltYm9sIGNvdWxkIGJlCisjIExFLgorI3Nv dXJjZTogdGxzLXJlbGF4LWdkLWllLTIucworI3RhcmdldDogW2NoZWNrX3NoYXJlZF9saWJfc3Vw cG9ydF0KKyNsZDogLXNoYXJlZCAtQnN5bWJvbGljCisjb2JqZHVtcDogLWRyCisKKy4qOiAgICAg ZmlsZSBmb3JtYXQgLioKKworCitEaXNhc3NlbWJseSBvZiBzZWN0aW9uIFwudGV4dDoKKworWzAt OWEtZl0rIDxmb28+OgorICtbMC05YS1mXSs6CWQyODAwMDAwIAltb3YJeDAsICMweDAgICAgICAg ICAgICAgICAgICAgCS8vICMwCisgK1swLTlhLWZdKzoJZDUzYmQwNDEgCW1ycwl4MSwgdHBpZHJf ZWwwCisgK1swLTlhLWZdKzoJLiogCWFkcnAJeDAsIC4qCisgK1swLTlhLWZdKzoJLiogCWxkcgl4 MCwgXFt4MCwgIy4qXF0KKyArWzAtOWEtZl0rOgliODYwNjgyMCAJbGRyCXcwLCBcW3gxLCB4MFxd CisgK1swLTlhLWZdKzoJZDUzYmQwNDEgCW1ycwl4MSwgdHBpZHJfZWwwCisgK1swLTlhLWZdKzoJ OTEwMDAzZmQgCW1vdgl4MjksIHNwCisgK1swLTlhLWZdKzoJLiogCWFkcnAJeDAsIC4qCisgK1sw LTlhLWZdKzoJLiogCWxkcgl4MCwgXFt4MCwgIy4qXF0KKyArWzAtOWEtZl0rOglkNTAzMjAxZiAJ bm9wCisgK1swLTlhLWZdKzoJZDUwMzIwMWYgCW5vcAorICtbMC05YS1mXSs6CWI4NjA2ODIwIAls ZHIJdzAsIFxbeDEsIHgwXF0KKyArWzAtOWEtZl0rOglkNjVmMDNjMCAJcmV0CisKZGlmZiAtLWdp dCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZC1pZS1pbHAzMi5kIGIvbGQv dGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkLWllLWlscDMyLmQKaW5kZXggYWIwOGM2 MTYxYjkzMzAxMTBhOWZmYmIzM2ViNmQ0NGIwYThlOGFjNy4uMzQwMjA2YTllMmJiZDM3NTM0ZWIz YTFmZWQ3OWU2Mzg2NDgwYWVkMyAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQv dGxzLXJlbGF4LWdkLWllLWlscDMyLmQKKysrIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxz LXJlbGF4LWdkLWllLWlscDMyLmQKQEAgLTEsNiArMSw2IEBACiAjc291cmNlOiB0bHMtcmVsYXgt Z2QtaWUucwogI2FzOiAtbWFiaT1pbHAzMgotI2xkOiAtbSBbYWFyY2g2NF9jaG9vc2VfaWxwMzJf ZW11bF0gLVQgcmVsb2NzLWlscDMyLmxkIC1lMAorI2xkOiAtbSBbYWFyY2g2NF9jaG9vc2VfaWxw MzJfZW11bF0gLVQgcmVsb2NzLWlscDMyLmxkIC1lMCB0bXBkaXIvdGxzLXNoYXJlZGxpYi1pbHAz Mi5zbwogI29iamR1bXA6IC1kcgogIy4uLgogICsxMDAwMDoJOTAwMDAwODAgCWFkcnAJeDAsIDIw MDAwIDxfR0xPQkFMX09GRlNFVF9UQUJMRV8+CmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQt YWFyY2g2NC90bHMtcmVsYXgtZ2QtaWUuZCBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1y ZWxheC1nZC1pZS5kCmluZGV4IGY4MGJiOTA3NzcwNWQ4M2U3OTNmY2RkNmI0NTE2OWFjODJhMjRh YTkuLjBjMDMyOTBlMGE5Y2NhNjFiYWFiMDYxZTBiMjQ0NzVmOWE4ZjAwYWIgMTAwNjQ0Ci0tLSBh L2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZC1pZS5kCisrKyBiL2xkL3Rlc3Rz dWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZC1pZS5kCkBAIC0xLDUgKzEsNSBAQAogI3NvdXJj ZTogdGxzLXJlbGF4LWdkLWllLnMKLSNsZDogLVQgcmVsb2NzLmxkIC1lMAorI2xkOiAtVCByZWxv Y3MubGQgLWUwIHRtcGRpci90bHMtc2hhcmVkbGliLnNvCiAjb2JqZHVtcDogLWRyCiAjLi4uCiAg KzEwMDAwOgk5MDAwMDA4MCAJYWRycAl4MCwgMjAwMDAgPF9HTE9CQUxfT0ZGU0VUX1RBQkxFXz4K ZGlmZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZC1pZS5zIGIv bGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkLWllLnMKaW5kZXggODhjN2VlYzcz ZTQzYWZiNjgwYTZjMWM5MDUxYmY1NDg1NDkxZmExZS4uYWZlMDc2YzhjODIwM2VlNTQ3ZTg0Y2Nh YjU0NGI2N2UzODgyNzlkMyAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxz LXJlbGF4LWdkLWllLnMKKysrIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdk LWllLnMKQEAgLTEsNyArMSwzIEBACi0JLmdsb2JhbAl2YXIKLQkuc2VjdGlvbgkudGRhdGEsImF3 VCIsJXByb2diaXRzCi12YXI6Ci0JLndvcmQJMgogCS50ZXh0CiAJYWRycAl4MCwgOnRsc2dkOnZh cgogCWFkZAl4MCwgeDAsIDp0bHNnZF9sbzEyOnZhcgpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRl L2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkZXNjLWllLTIuZCBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJj aDY0L3Rscy1yZWxheC1nZGVzYy1pZS0yLmQKaW5kZXggMmI4ZTM0NmZjNjZjNzljM2Q5OTI3MTRk YTdhODc2ZGM4M2MwYjVlZS4uZjEzMjYzZjIwMWZmNzgxYjBjOGM0MWY0NjhjMDY5ZWU3MWM0ZmQ2 MSAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkZXNjLWll LTIuZAorKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2Rlc2MtaWUtMi5k CkBAIC0xLDUgKzEsNSBAQAogI3NvdXJjZTogdGxzLXJlbGF4LWdkZXNjLWllLTIucwotI2xkOiAt VCByZWxvY3MubGQgLWUwCisjbGQ6IC1UIHJlbG9jcy5sZCAtZTAgdG1wZGlyL3Rscy1zaGFyZWRs aWIuc28KICNvYmpkdW1wOiAtZHIKICMuLi4KICArMTAwMDA6CTkwMDAwMDgwIAlhZHJwCXgwLCAy MDAwMCA8X0dMT0JBTF9PRkZTRVRfVEFCTEVfPgpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xk LWFhcmNoNjQvdGxzLXJlbGF4LWdkZXNjLWllLTIucyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0 L3Rscy1yZWxheC1nZGVzYy1pZS0yLnMKaW5kZXggNzkwYjZjNmViOGJiNGI5YzJlZmEwNjg4ZjQ2 YTU0MTNkODIzMWY3OC4uZjdiZTU3YzMyMDcxNmQ2YzU2NTU5ZDJlYmZhMTgxYTI5NDRiZGI4OCAx MDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkZXNjLWllLTIu cworKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2Rlc2MtaWUtMi5zCkBA IC0xLDkgKzEsNSBAQAogLy8gVGVzdCBUTFMgRGVzYyB0byBUTFMgSUUgcmVsYXhhdGlvbiB3aGVu IGluc3RydWN0aW9ucyBhcmUgbm90IGNvbnNlY3V0aXZlLgogCi0JLmdsb2JhbAl2YXIKLQkuc2Vj dGlvbgkudGRhdGEKLXZhcjoKLQkud29yZAkyCiAJLnRleHQKIAlhZHJwCXgwLCA6dGxzZGVzYzp2 YXIKIAlub3AKQEAgLTIwLDUgKzE2LDQgQEAgdmFyOgogCW1ycwl4MSwgdHBpZHJfZWwwCiAJYWRk CXgwLCB4MSwgeDAKIAlsZHIJdzAsIFt4MF0KLQkuZ2xvYmFsCXZhcgogCS5zZWN0aW9uCS50ZGF0 YQpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWdkZXNjLWll LmQgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2Rlc2MtaWUuZAppbmRleCA4 NjI3N2Y4MjU2NWM0MDFhYTZkMmI0YjM2NWUyYzljOGJjOGNjZmU2Li4xYWNlODQ4NThhMzJlMWVm MDMzNmNmMjRmNzAxN2E1NWNjYmI2MTFlIDEwMDY0NAotLS0gYS9sZC90ZXN0c3VpdGUvbGQtYWFy Y2g2NC90bHMtcmVsYXgtZ2Rlc2MtaWUuZAorKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90 bHMtcmVsYXgtZ2Rlc2MtaWUuZApAQCAtMSw1ICsxLDUgQEAKICNzb3VyY2U6IHRscy1yZWxheC1n ZGVzYy1pZS5zCi0jbGQ6IC1UIHJlbG9jcy5sZCAtZTAKKyNsZDogLVQgcmVsb2NzLmxkIC1lMCB0 bXBkaXIvdGxzLXNoYXJlZGxpYi5zbwogI29iamR1bXA6IC1kcgogIy4uLgogICsxMDAwMDoJOTAw MDAwODAgCWFkcnAJeDAsIDIwMDAwIDxfR0xPQkFMX09GRlNFVF9UQUJMRV8+CmRpZmYgLS1naXQg YS9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtZ2Rlc2MtaWUucyBiL2xkL3Rlc3Rz dWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZGVzYy1pZS5zCmluZGV4IDM4YjM3MjEzMmY0OWM5 MjZiZThkNjUyN2JjZTlkMjAzYjc5NGE0YjUuLjA4OWQzNmM5Y2M4YTlmNGRkOWY2Y2ZlNzE5OTZi ZGJkZDliNjg1MDIgMTAwNjQ0Ci0tLSBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxh eC1nZGVzYy1pZS5zCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1nZGVz Yy1pZS5zCkBAIC0xLDcgKzEsMyBAQAotCS5nbG9iYWwJdmFyCi0JLnNlY3Rpb24JLnRkYXRhCi12 YXI6Ci0JLndvcmQJMgogCS50ZXh0CiAJYWRycAl4MCwgOnRsc2Rlc2M6dmFyCiAJbGRyCXgxNywg W3gwLCAjOnRsc2Rlc2NfbG8xMjp2YXJdCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtYWFy Y2g2NC90bHMtcmVsYXgtaWUtbGUtNC5kIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJl bGF4LWllLWxlLTQuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmJjNWYxNTMwNDQwZDE5MDc3YzQ1NWRiNTc4M2Vm MTBkYTI0YmYyCi0tLSAvZGV2L251bGwKKysrIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxz LXJlbGF4LWllLWxlLTQuZApAQCAtMCwwICsxLDIwIEBACisjIFdlIGFscmVhZHkgdGVzdCB0aGF0 IHdlIHJlbGF4IGFuIGFjY2VzcyB0byBhIGxvY2FsIHN5bWJvbCwgdGhpcyB0ZXN0Y2FzZQorIyBj aGVja3MgdGhhdCB3ZSByZWxheCBhbiBhY2Nlc3MgdG8gYSBnbG9iYWwtYmluZGluZyBzeW1ib2wg aWYgdGhlIHN0YXRpYyBsaW5rZXIKKyMga25vd3MgdGhhdCB0aGUgc3ltYm9sIHdpbGwgcmVzb2x2 ZSB0byB0aGUgZXhlY3V0YWJsZSBsb2NhbCB2YWx1ZS4KKyMKKyMgVGhlIGFjY2VzcyBzaG91bGQg YmUgcmVsYXhlZCB0byBhIExFIGFjY2Vzcy4KKyNsZDoKKyNvYmpkdW1wOiAtZAorCisuKjogICAg IGZpbGUgZm9ybWF0IC4qCisKKworRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiBcLnRleHQ6CisKK1sw LTlhLWZdKyA8X3N0YXJ0PjoKKyArWzAtOWEtZl0rOglkMjgwMDAwMCAJbW92CXgwLCAjMHgwICAg ICAgICAgICAgICAgICAgIAkvLyAjMAorICtbMC05YS1mXSs6CWQ1M2JkMDQxIAltcnMJeDEsIHRw aWRyX2VsMAorICtbMC05YS1mXSs6CWQyYTAwMDAwIAltb3Z6CXgwLCAjMHgwLCBsc2wgIzE2Cisg K1swLTlhLWZdKzoJZjI4MDAyMDAgCW1vdmsJeDAsICMweDEwCisgK1swLTlhLWZdKzoJYjg2MDY4 MjAgCWxkcgl3MCwgXFt4MSwgeDBcXQorICtbMC05YS1mXSs6CWQ2NWYwM2MwIAlyZXQKZGlmZiAt LWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1pZS1sZS00LnMgYi9sZC90 ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtaWUtbGUtNC5zCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxNTFj ZDRlZmQ2Y2M3MjlkMjIwY2VlYTVmMzE4ZWNkM2E4ZWQzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9s ZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtaWUtbGUtNC5zCkBAIC0wLDAgKzEsMjIg QEAKKyMgVGVzdCBUTFMgSUUgdG8gVExTIExFIHJlbGF4YXRpb24gZm9yIGdsb2JhbCBzeW1ib2xz LgorICAgICAgICAuc2VjdGlvbiAgICAgICAgLnRic3MsImF3VCIsQG5vYml0cworICAgICAgICAu Z2xvYmFsIHgKKyAgICAgICAgLmFsaWduICAyCisgICAgICAgIC50eXBlICAgeCwgJW9iamVjdAor ICAgICAgICAuc2l6ZSAgIHgsIDQKK3g6CisgICAgICAgIC56ZXJvICAgNAorCisKKworICAgICAg ICAudGV4dAorICAgICAgICAuZ2xvYmFsIF9zdGFydAorICAgICAgICAudHlwZSBfc3RhcnQsIEBm dW5jdGlvbgorX3N0YXJ0OgorICAgICAgICBtb3YgICAgIHgwLCAwCisgICAgICAgIG1ycyAgICAg eDEsIHRwaWRyX2VsMAorICAgICAgICBhZHJwICAgIHgwLCA6Z290dHByZWw6eAorICAgICAgICBs ZHIgICAgIHgwLCBbeDAsICM6Z290dHByZWxfbG8xMjp4XQorICAgICAgICBsZHIgICAgIHcwLCBb eDEsIHgwXQorICAgICAgICByZXQKKwpkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNo NjQvdGxzLXJlbGF4LWxhcmdlLWRlc2MtaWUuZCBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rs cy1yZWxheC1sYXJnZS1kZXNjLWllLmQKaW5kZXggMjFhZDVlNWExOGMyNjVlNWUwOTViMjA1Mzc1 MmE1NzhkNjg5ZDQxMS4uY2I1NDZhZDc0ZTZkYTM1ZTdkM2NkNGY1NmJhNjJhZjUyYWZlYmMyMiAx MDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWxhcmdlLWRlc2Mt aWUuZAorKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtbGFyZ2UtZGVzYy1p ZS5kCkBAIC0xLDUgKzEsNSBAQAogI3NvdXJjZTogdGxzLXJlbGF4LWxhcmdlLWRlc2MtaWUucwot I2xkOiAtVCByZWxvY3MubGQgLWUwCisjbGQ6IC1UIHJlbG9jcy5sZCAtZTAgdG1wZGlyL3Rscy1z aGFyZWRsaWIuc28KICNub3RhcmdldDogYWFyY2g2NF9iZS0qLSoKICNvYmpkdW1wOiAtZHIKICMu Li4KZGlmZiAtLWdpdCBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1k ZXNjLWllLnMgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtbGFyZ2UtZGVzYy1p ZS5zCmluZGV4IGE0ZDFlMDAwODZhZDNlZDM4MThlYjczYjRhYmE2MDZjYjBkZTZjZjcuLjk4ZGMy YTU3MWQ1ODM2YjYwZjA1Y2I5ZGFmNDdiMzg1NDU2YTNlZTIgMTAwNjQ0Ci0tLSBhL2xkL3Rlc3Rz dWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1kZXNjLWllLnMKKysrIGIvbGQvdGVzdHN1 aXRlL2xkLWFhcmNoNjQvdGxzLXJlbGF4LWxhcmdlLWRlc2MtaWUucwpAQCAtMSw4ICsxLDMgQEAK LQkuZ2xvYmFsIHZhcgotCS5zZWN0aW9uCS50ZGF0YSwiYXdUIiwlcHJvZ2JpdHMKLXZhcjoKLQku d29yZCAyCi0KIAkudGV4dAogdGVzdDoKIAlsZHIgeDEsIC5MZ290CmRpZmYgLS1naXQgYS9sZC90 ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgtbGFyZ2UtZ2QtaWUuZCBiL2xkL3Rlc3RzdWl0 ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1nZC1pZS5kCmluZGV4IDJiMzk4ZGJiOWM2Y2U0 OGY0OGYyNThlM2VkMzM3ZGNkMzgzYWY4MmMuLjc0MDE3OGQ0NjEwNTQ4M2ZhNDE3NmIxYTRjNzdl YmFjNDU5ZWY4NDYgMTAwNjQ0Ci0tLSBhL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxh eC1sYXJnZS1nZC1pZS5kCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1s YXJnZS1nZC1pZS5kCkBAIC0xLDUgKzEsNSBAQAogI3NvdXJjZTogdGxzLXJlbGF4LWxhcmdlLWdk LWllLnMKLSNsZDogLVQgcmVsb2NzLmxkIC1lMAorI2xkOiAtVCByZWxvY3MubGQgLWUwIHRtcGRp ci90bHMtc2hhcmVkbGliLnNvCiAjbm90YXJnZXQ6IGFhcmNoNjRfYmUtKi0qCiAjb2JqZHVtcDog LWRyCiAjLi4uCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtcmVsYXgt bGFyZ2UtZ2QtaWUucyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1n ZC1pZS5zCmluZGV4IDhlMDMxMGQ2YjNmOGNhZWNkYmZjMmJkZDNmMzEwYjZlZTM5NDJkODAuLmQz NWFhY2U3NzZlZTBiYzMyN2NmYTFjZjI1OGM4Y2U2ODc4NjVkN2EgMTAwNjQ0Ci0tLSBhL2xkL3Rl c3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1nZC1pZS5zCisrKyBiL2xkL3Rlc3Rz dWl0ZS9sZC1hYXJjaDY0L3Rscy1yZWxheC1sYXJnZS1nZC1pZS5zCkBAIC0xLDggKzEsMyBAQAot CS5nbG9iYWwgdmFyCi0JLnNlY3Rpb24JLnRkYXRhLCJhd1QiLCVwcm9nYml0cwotdmFyOgotCS53 b3JkCTIKLQogCS50ZXh0CiB0ZXN0OgogCWxkcgl4MSwgLkxnb3QKZGlmZiAtLWdpdCBhL2xkL3Rl c3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy1zaGFyZWRsaWIucyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJj aDY0L3Rscy1zaGFyZWRsaWIucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODM4YjlmMjM0ODRhYzZjMDUzNWM0MzI1 NjgxODA1MGZiZjNhNGZkCi0tLSAvZGV2L251bGwKKysrIGIvbGQvdGVzdHN1aXRlL2xkLWFhcmNo NjQvdGxzLXNoYXJlZGxpYi5zCkBAIC0wLDAgKzEsNCBAQAorICAgIC5nbG9iYWwgdmFyCisgICAg LnNlY3Rpb24gIC50ZGF0YSwiYXdUIixAcHJvZ2JpdHMKK3ZhcjoKKyAgICAud29yZCAyCmRpZmYg LS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1kZXNjLWllLWlscDMyLmQg Yi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1kZXNjLWllLWlscDMyLmQKaW5kZXgg ZWJiYWY4NTRiYWE5NTQ4NTAzZDBlZWFjMzUxYWIzZWU2ZTMzMDE4My4uM2RmZmExYjg1ZTYzNzZm ZDcyOTcwYmE3OWVjZjhkNDI2NDAxNzNhZSAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFh cmNoNjQvdGxzLXRpbnktZGVzYy1pZS1pbHAzMi5kCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJj aDY0L3Rscy10aW55LWRlc2MtaWUtaWxwMzIuZApAQCAtMSwxMiArMSwxMiBAQAogI3NvdXJjZTog dGxzLXRpbnktZGVzYy1pZS5zCiAjYXM6IC1tYWJpPWlscDMyCi0jbGQ6IC1tIFthYXJjaDY0X2No b29zZV9pbHAzMl9lbXVsXSAtVCByZWxvY3MtaWxwMzIubGQgLWUwCisjbGQ6IC1tIFthYXJjaDY0 X2Nob29zZV9pbHAzMl9lbXVsXSAtVCByZWxvY3MtaWxwMzIubGQgLWUwIHRtcGRpci90bHMtc2hh cmVkbGliLWlscDMyLnNvCiAjb2JqZHVtcDogLWRyCiAjLi4uCiAKIERpc2Fzc2VtYmx5IG9mIHNl Y3Rpb24gLnRleHQ6CiAKIDAwMDEwMDAwIFw8dGVzdFw+OgotICsxMDAwMDoJMTgwODAwMjAgCWxk cgl3MCwgMjAwMDQgXDxfR0xPQkFMX09GRlNFVF9UQUJMRV9cKzB4NFw+CisgKzEwMDAwOgkxODA4 MDAyMCAJbGRyCXcwLCAyMDAwNCBcPHZhclw+CiAgKzEwMDA0OglkNTAzMjAxZiAJbm9wCiAgKzEw MDA4OglkNTAzMjAxZiAJbm9wCmRpZmYgLS1naXQgYS9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90 bHMtdGlueS1kZXNjLWllLmQgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1kZXNj LWllLmQKaW5kZXggMDA4ODUzOWQ2YmZhZTBiZGZjNzBjODZhZmVhZjdmMWQxNjMwNWQxMi4uZTc1 OWFlOTQ1NzZjY2NhNDg0YTk2OTBkMTMzNDAzMmY5N2RmNmZkNiAxMDA2NDQKLS0tIGEvbGQvdGVz dHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnktZGVzYy1pZS5kCisrKyBiL2xkL3Rlc3RzdWl0ZS9s ZC1hYXJjaDY0L3Rscy10aW55LWRlc2MtaWUuZApAQCAtMSwxMSArMSwxMSBAQAogI3NvdXJjZTog dGxzLXRpbnktZGVzYy1pZS5zCi0jbGQ6IC1UIHJlbG9jcy5sZCAtZTAKKyNsZDogLVQgcmVsb2Nz LmxkIC1lMCB0bXBkaXIvdGxzLXNoYXJlZGxpYi5zbwogI29iamR1bXA6IC1kcgogIy4uLgogCiBE aXNhc3NlbWJseSBvZiBzZWN0aW9uIC50ZXh0OgogCiAwMDAwMDAwMDAwMDEwMDAwIFw8dGVzdFw+ OgotICsxMDAwMDoJNTgwODAwNDAgCWxkcgl4MCwgMjAwMDggXDxfR0xPQkFMX09GRlNFVF9UQUJM RV9cKzB4OFw+CisgKzEwMDAwOgk1ODA4MDA0MCAJbGRyCXgwLCAyMDAwOCBcPHZhclw+CiAgKzEw MDA0OglkNTAzMjAxZiAJbm9wCiAgKzEwMDA4OglkNTAzMjAxZiAJbm9wCmRpZmYgLS1naXQgYS9s ZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1kZXNjLWllLnMgYi9sZC90ZXN0c3VpdGUv bGQtYWFyY2g2NC90bHMtdGlueS1kZXNjLWllLnMKaW5kZXggNTIwY2Q0ZTg1YjI5ZjhjM2FjYzkx MmQyZDMxYjkwMmI5MWVlMzM3ZS4uZmNjOTcwZjZkOGY0NmI3YzU3NzI0YjU1Yzg1N2RjZWU3N2Jj MDcyMiAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnktZGVzYy1p ZS5zCisrKyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy10aW55LWRlc2MtaWUucwpAQCAt MSwxMiArMSwzIEBACi0gICAgICAgIC5nbG9iYWwgdmFyCi0KLSAgICAgICAgLnNlY3Rpb24gLnRi c3MsImF3VCIsJW5vYml0cwotICAgICAgICAuYWxpZ24gIDIKLSAgICAgICAgLnR5cGUgICB2YXIs ICVvYmplY3QKLSAgICAgICAgLnNpemUgICB2YXIsIDQKLXZhcjoKLQkuemVybyAgIDQKLQogCS50 ZXh0CiB0ZXN0OgogICAgICAgICBsZHIJeDEsIDp0bHNkZXNjOnZhcgpkaWZmIC0tZ2l0IGEvbGQv dGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnktZ2QtaWUtaWxwMzIuZCBiL2xkL3Rlc3RzdWl0 ZS9sZC1hYXJjaDY0L3Rscy10aW55LWdkLWllLWlscDMyLmQKaW5kZXggMWVhNjExMDNiNDdiYTFh MjM3MDNiZTkxNGRhNWY1ZjEwMDhhOWNiMS4uNjMxNzE1MmViMWVjYzg4MzBkOGEwYjczNjI3NmM0 ZWYxOTMwMWQ1OCAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnkt Z2QtaWUtaWxwMzIuZAorKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1nZC1p ZS1pbHAzMi5kCkBAIC0xLDEyICsxLDEyIEBACiAjc291cmNlOiB0bHMtdGlueS1nZC1pZS5zCiAj YXM6IC1tYWJpPWlscDMyCi0jbGQ6IC1tIFthYXJjaDY0X2Nob29zZV9pbHAzMl9lbXVsXSAtVCBy ZWxvY3MtaWxwMzIubGQgLWUwCisjbGQ6IC1tIFthYXJjaDY0X2Nob29zZV9pbHAzMl9lbXVsXSAt VCByZWxvY3MtaWxwMzIubGQgLWUwIHRtcGRpci90bHMtc2hhcmVkbGliLWlscDMyLnNvCiAjb2Jq ZHVtcDogLWRyCiAjLi4uCiAKIERpc2Fzc2VtYmx5IG9mIHNlY3Rpb24gLnRleHQ6CiAKIDAwMDEw MDAwIFw8dGVzdFw+OgotICsxMDAwMDoJMTgwODAwMjAgCWxkcgl3MCwgMjAwMDQgXDxfR0xPQkFM X09GRlNFVF9UQUJMRV9cKzB4NFw+CisgKzEwMDAwOgkxODA4MDAyMCAJbGRyCXcwLCAyMDAwNCBc PHZhclw+CiAgKzEwMDA0OglkNTNiZDA0MSAJbXJzCXgxLCB0cGlkcl9lbDAKICArMTAwMDg6CTBi MDAwMDIwIAlhZGQJdzAsIHcxLCB3MApkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNo NjQvdGxzLXRpbnktZ2QtaWUuZCBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy10aW55LWdk LWllLmQKaW5kZXggNjI5ZDkwYzk0MmQzNDg0NWU3MDBiOTM1ZWYyNzAxZDA2MjM1YjdkZC4uNjZi OTk2ZTZmNGFiYzI3OWQ5NmJlNTEwOTU2ZWZmMGM2MDZhYjI0MCAxMDA2NDQKLS0tIGEvbGQvdGVz dHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnktZ2QtaWUuZAorKysgYi9sZC90ZXN0c3VpdGUvbGQt YWFyY2g2NC90bHMtdGlueS1nZC1pZS5kCkBAIC0xLDExICsxLDExIEBACiAjc291cmNlOiB0bHMt dGlueS1nZC1pZS5zCi0jbGQ6IC1UIHJlbG9jcy5sZCAtZTAKKyNsZDogLVQgcmVsb2NzLmxkIC1l MCB0bXBkaXIvdGxzLXNoYXJlZGxpYi5zbwogI29iamR1bXA6IC1kcgogIy4uLgogCiBEaXNhc3Nl bWJseSBvZiBzZWN0aW9uIC50ZXh0OgogCiAwMDAwMDAwMDAwMDEwMDAwIFw8dGVzdFw+OgotICsx MDAwMDoJNTgwODAwNDAgCWxkcgl4MCwgMjAwMDggXDxfR0xPQkFMX09GRlNFVF9UQUJMRV9cKzB4 OFw+CisgKzEwMDAwOgk1ODA4MDA0MCAJbGRyCXgwLCAyMDAwOCBcPHZhclw+CiAgKzEwMDA0Oglk NTNiZDA0MSAJbXJzCXgxLCB0cGlkcl9lbDAKICArMTAwMDg6CThiMDAwMDIwIAlhZGQJeDAsIHgx LCB4MApkaWZmIC0tZ2l0IGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQvdGxzLXRpbnktZ2QtaWUu cyBiL2xkL3Rlc3RzdWl0ZS9sZC1hYXJjaDY0L3Rscy10aW55LWdkLWllLnMKaW5kZXggNGRjN2U2 NmJiZGI3ZDdjMDE3NTRhZWJjZGFmNGIxMzI4NjY3ZTE0My4uM2FlNGEwY2M5ZmUxMzI5MTQwYzYw ZWQ5NDI0YjgwZThiNDY2OWRhMyAxMDA2NDQKLS0tIGEvbGQvdGVzdHN1aXRlL2xkLWFhcmNoNjQv dGxzLXRpbnktZ2QtaWUucworKysgYi9sZC90ZXN0c3VpdGUvbGQtYWFyY2g2NC90bHMtdGlueS1n ZC1pZS5zCkBAIC0xLDEyICsxLDMgQEAKLSAgICAgICAgLmdsb2JhbCB2YXIKLQotICAgICAgICAu c2VjdGlvbiAudGJzcywiYXdUIiwlbm9iaXRzCi0gICAgICAgIC5hbGlnbiAgMgotICAgICAgICAu dHlwZSAgIHZhciwgJW9iamVjdAotICAgICAgICAuc2l6ZSAgIHZhciwgNAotdmFyOgotCS56ZXJv ICAgNAotCiAJLnRleHQKIHRlc3Q6CiAgICAgICAgIGFkciB4MCwgOnRsc2dkOnZhcgoKCgo= --===============3943491439617699277==--