From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2059.outbound.protection.outlook.com [40.107.20.59]) by sourceware.org (Postfix) with ESMTPS id D0EF138582B0 for ; Tue, 18 Jul 2023 14:47:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D0EF138582B0 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=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=lp6RWhkY3QHxRnJx8XGpECZd1zmcOXgMolvUljoTIQM=; b=7WwUnVazDH3K0ayHS/frzWdNGcudVlMJJLIPUZNI6XU4X/VvExSLI9998BUiRIMcqJvlvAaagxA/0O3cwqHTCAdGWYyz36Qv5hCjYlrXuu4O9IDKG6ONoYvIxUdqgeETIyJMvtagWDdG9o+ClCnufsZZMSIVsX1R0+33EtayZIA= Received: from DB8PR04CA0022.eurprd04.prod.outlook.com (2603:10a6:10:110::32) by DU0PR08MB9275.eurprd08.prod.outlook.com (2603:10a6:10:41b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.31; Tue, 18 Jul 2023 14:47:45 +0000 Received: from DBAEUR03FT017.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:110:cafe::64) by DB8PR04CA0022.outlook.office365.com (2603:10a6:10:110::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33 via Frontend Transport; Tue, 18 Jul 2023 14:47:45 +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 DBAEUR03FT017.mail.protection.outlook.com (100.127.142.243) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33 via Frontend Transport; Tue, 18 Jul 2023 14:47:44 +0000 Received: ("Tessian outbound 997ae1cc9f47:v145"); Tue, 18 Jul 2023 14:47:44 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 2f4f2ffd01d0d480 X-CR-MTA-TID: 64aa7808 Received: from 4a2f075c33fd.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 2DC2B4B8-522B-4D34-A03F-3A440A1AF6CD.1; Tue, 18 Jul 2023 14:47:37 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 4a2f075c33fd.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 18 Jul 2023 14:47:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EWMbc2RMP3TqKEWXAm0JSWcHREHAku4SbqKfDMpdNHXONMvBlaew1qiJI2Z7tfJbJa2BRvN/0PpigLxHtcSXNaZYlANFzaMUKH6sREFd2HQUGurIPjt20mwld5kqWYHYcHC1lxYghS6m6EhLzDKsCZsc1nWko4Jlx08m4/CG0H/dv7iFvhXxJIhPt7KQ7zG+isdJ+My07wrqPsZKqIEUkaGyTpeS02zwyoSBoKulCj6B1W0MOqwZ79xOGltCMgnitJpOcWB8vxyFif2rPNvzmV7Xu4mIQMoMUiDO2WfoHnflLlpFF2UGjRQz0fTFkNtBo5sbYpYyGErX9MGWVIDQ5g== 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=lp6RWhkY3QHxRnJx8XGpECZd1zmcOXgMolvUljoTIQM=; b=IsW/qkx0PATWGlw+kGCAE/VfFhiNIEF22yluKcfxe1rH92bYwAqm/roPz7Y7tzDeVoSnB9e/nxiFxeq8LjIoUpSZPx2ryys0hD44493sBq33kP4CV5kLT7ZjNTM1Hu2xPkQvoQpOH2enng4R7CreKnvHEvPgRvXFl6WLADwj+sZucdoEbQr3tl9bRc1hNJ3QV5g96dnwxNzpdU2BqeeXAZxe+9gRiBvQ7iW8bQILIVB5olv+ylufg5lCPA4RVh2pqyT+W/OYsBxHlmHbrV2XLVbB4LG2izrZWfJXJa+96hGYnje2290I9yVChrhtLDLBURZ8InuDdozKONHTQC1imQ== 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=lp6RWhkY3QHxRnJx8XGpECZd1zmcOXgMolvUljoTIQM=; b=7WwUnVazDH3K0ayHS/frzWdNGcudVlMJJLIPUZNI6XU4X/VvExSLI9998BUiRIMcqJvlvAaagxA/0O3cwqHTCAdGWYyz36Qv5hCjYlrXuu4O9IDKG6ONoYvIxUdqgeETIyJMvtagWDdG9o+ClCnufsZZMSIVsX1R0+33EtayZIA= Received: from AM0PR03CA0079.eurprd03.prod.outlook.com (2603:10a6:208:69::20) by DB9PR08MB6698.eurprd08.prod.outlook.com (2603:10a6:10:2a2::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33; Tue, 18 Jul 2023 14:47:32 +0000 Received: from AM7EUR03FT039.eop-EUR03.prod.protection.outlook.com (2603:10a6:208:69:cafe::9d) by AM0PR03CA0079.outlook.office365.com (2603:10a6:208:69::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33 via Frontend Transport; Tue, 18 Jul 2023 14:47:32 +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 AM7EUR03FT039.mail.protection.outlook.com (100.127.140.224) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6588.33 via Frontend Transport; Tue, 18 Jul 2023 14:47:32 +0000 Received: from AZ-NEU-EX03.Arm.com (10.251.24.31) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 18 Jul 2023 14:47:31 +0000 Received: from e124762.cambridge.arm.com (10.57.32.137) 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.27 via Frontend Transport; Tue, 18 Jul 2023 14:47:30 +0000 Content-Type: multipart/mixed; boundary="===============3440972030636510790==" MIME-Version: 1.0 From: Matthew Malcomson To: CC: , , References: <7f2d155c-20e4-4bae-89d8-849882526a07@AZ-NEU-EX03.Arm.com> In-Reply-To: <7f2d155c-20e4-4bae-89d8-849882526a07@AZ-NEU-EX03.Arm.com> Subject: Re: vectorizer: Avoid an OOB access from vectorization Date: Tue, 18 Jul 2023 15:47:30 +0100 Message-ID: <24ccac55-7ec3-4f1b-b53b-6496df8b5c32@AZ-NEU-EX03.Arm.com> X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT039:EE_|DB9PR08MB6698:EE_|DBAEUR03FT017:EE_|DU0PR08MB9275:EE_ X-MS-Office365-Filtering-Correlation-Id: c51ffd42-447a-4ee1-d2d9-08db879df223 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: 3jbEHigSUqJcnp195QXQcwUZQfhywwbXi/mjEI9zp2kYywoqpToUU6LJCVnlMWQBDr5xVo1Mxg4DpTFsAlwr594yTUEQIGA3OkAW7/zxOksoXp4Y5RhEVxE6Ur/M20zGDrRK7CveTgKyd7rznBx+mYHuyfLHFNPAH35/pdEfwO7qyoYaPlQg18O0ZuHAeqhBcL2NS3ywYV4OY+qNcz29n3iyZUetmndOpn+LfSz4iPD2uVnrbPeCNk0EXf5kP5N+ggGIMGh6ojBNG03Lprj11Rkm7bJY8oeQA0m7c6YuTeiTmY1pJM4r30pcSui3XqRtUcdPAEtDaxcqmW34JWc44F1kSh2ypLGazI/C3SV7NYHetEaZltXtOKnsthPHvAgl/PKbwyl+kjSCw/WvDtBxG1R1KzthLMdxBz2IF+pT0vkYLQc3teX7UKOh+lLMnnrysjQkNSw34B01oImgDEQ6W6icOCJoj2iZGMkSHk4XCUagvbwE9mY32Fk18bnRTylFoCbwUDPK9uX24oYSgT08SuuWP5rQJKf+tieH/+/jRv1auige+9WFWJJK2l2Z1weCV33bvhczwj5tRgcshZBWHqPzuQ2FpT++ZPh8dJf0BOrX9Yvvn9R3/POP2nT6oM6UrITnrvqiCnBQxFozksBdBpsXYXHADlBeG0Qn3DaokLaCG+GrkkfD9Djtzw8BtOPHyEkew0pm3VvEL+SEMiHasD++YqMzSDjUAP48EENf5vFmgD7DePzDr6M8k+2OEeod4xjj1Ko3K9MixOhpr1qgkQ== 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:(13230028)(4636009)(376002)(39860400002)(136003)(346002)(396003)(451199021)(82310400008)(40470700004)(46966006)(36840700001)(2906002)(8676002)(8936002)(5660300002)(235185007)(44832011)(41300700001)(40460700003)(40480700001)(86362001)(31696002)(26005)(33964004)(478600001)(82740400003)(47076005)(83380400001)(36860700001)(186003)(31686004)(336012)(426003)(356005)(6916009)(81166007)(4326008)(316002)(54906003)(70586007)(70206006)(36900700001);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB6698 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT017.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: b2885528-8bff-4b11-8722-08db879deafa X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: H2LSkytSpjpQSlO7/yHNLhdL/0g8Xs6B2tvwpIdmnm3bVPY3/HwRszZnjR3quavjnGBp341qOCcSVQQhbIqpAxGzmVY9VROcWvnbbD0r4UfAGTRyPOn2CyGa6iBAiMRQKU6uhBTqSILQoYxqASqGekdw+iiWbZtbF1p6llkupTKYBuGzo1cCCq2Xzy30ibZoYU6gngMjer1yxDTQpuMxnDOGQIROMwCwUhdAu5lepAXtIxvF/IpLbgg/cJhNR6jWMvcqllqHMe3sMQaaNS5O3m8KTegDIelcJv7vO9PdX3X/h13wkMRJ+zY+yYn7ZXvQHflKCizThKm2DEtQA3ESgvAPrsaqHrw9Z6AOrONTmd/Jm7zTuMZlrqI1yGLKwPmx4ApCfV50nGuwpZqHVnGst1CITVpcHwCJJK3fEFV2qZ5kUpo4Y8oimt2KEkNZFzvobuWssVNeS/lU1xIQdD8U4nX/fy2Uoo3GRYNmeboSTRPGoR/VF6+F8AISAMToskUISdP/UDO/FowO+GfcfMEDEhjuRw1XxEdvln+U7n/BQ7QVOIdFvPYVOkOdzr4mwnjZWKCRZXCEq8hOrZCVCBEvFdM1ChTCALGIcWX8XOdLlnBD4hKlPfhgDaI5ShymWGU4D+BB2cWZnLlJYBdZiG1MLTp1RhFswZECaN5oBd7vHVcnjU4FpyQgJ8wwd/88D9L4ojtdRq7OqHf2KpXfq9MeReh/LFqcH7CVMUsLDKIitPMfVORaEMt68OGgjYPVfevU 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:(13230028)(4636009)(396003)(136003)(346002)(39860400002)(376002)(451199021)(82310400008)(46966006)(36840700001)(40470700004)(54906003)(478600001)(33964004)(336012)(186003)(82740400003)(316002)(70586007)(2906002)(4326008)(44832011)(70206006)(41300700001)(235185007)(36860700001)(5660300002)(8676002)(8936002)(81166007)(6916009)(26005)(86362001)(31696002)(426003)(83380400001)(47076005)(40480700001)(40460700003)(31686004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jul 2023 14:47:44.4950 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c51ffd42-447a-4ee1-d2d9-08db879df223 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: DBAEUR03FT017.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9275 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,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 List-Id: --===============3440972030636510790== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Tamar pointed out it would be good to have a `scan-tree-dump` in the testcase just to make sure that when something is currently vectorizing it stays vectorizing (and hence that the new code is still likely running). Attached patch has that change, also inlined for ease of reply. ------------------------------ > Our checks for whether the vectorization of a given loop would make an > out of bounds access miss the case when the vector we load is so large > as to span multiple iterations worth of data (while only being there to > implement a single iteration). > > This patch adds a check for such an access. > > Example where this was going wrong (smaller version of testcase added): > > ``` > extern unsigned short multi_array[5][16][16]; > extern void initialise_s(int *); > extern int get_sval(); > > void foo() { > int s0 = get_sval(); > int s[31]; > int i,j; > initialise_s(&s[0]); > s0 = get_sval(); > for (j=0; j < 16; j++) > for (i=0; i < 16; i++) > multi_array[1][j][i]=s[j*2]; > } > ``` > > With the above loop we would load the `s[j*2]` integer into a 4 element > vector, which reads 3 extra elements than the scalar loop would. > `get_group_load_store_type` identifies that the loop requires a scalar > epilogue due to gaps. However we do not identify that the above code > requires *two* scalar loops to be peeled due to the fact that each > iteration loads an amount of data from the *next* iteration (while not > using it). > > Bootstrapped and regtested on aarch64-none-linux-gnu. > N.b. out of interest we came across this working with Morello. > > ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c b/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c new file mode 100644 index 0000000000000000000000000000000000000000..1aab4c5a14d1e8346d89587bd9544a1516535a45 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c @@ -0,0 +1,61 @@ +/* For some targets we end up vectorizing the below loop such that the `sp` + single integer is loaded into a 4 integer vector. + While the writes are all safe, without 2 scalar loops being peeled into the + epilogue we would read past the end of the 31 integer array. This happens + because we load a 4 integer chunk to only use the first integer and + increment by 2 integers at a time, hence the last load needs s[30-33] and + the penultimate load needs s[28-31]. + This testcase ensures that we do not crash due to that behaviour. */ +/* { dg-require-effective-target mmap } */ +#include +#include + +#define MMAP_SIZE 0x20000 +#define ADDRESS 0x1122000000 + +#define MB_BLOCK_SIZE 16 +#define VERT_PRED_16 0 +#define HOR_PRED_16 1 +#define DC_PRED_16 2 +int *sptr; +extern void intrapred_luma_16x16(); +unsigned short mprr_2[5][16][16]; +void initialise_s(int *s) { } +int main() { + void *s_mapping; + void *end_s; + s_mapping = mmap ((void *)ADDRESS, MMAP_SIZE, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (s_mapping == MAP_FAILED) + { + perror ("mmap"); + return 1; + } + end_s = (s_mapping + MMAP_SIZE); + sptr = (int*)(end_s - sizeof(int[31])); + intrapred_luma_16x16(sptr); + return 0; +} + +void intrapred_luma_16x16(int * restrict sp) { + for (int j=0; j < MB_BLOCK_SIZE; j++) + { + mprr_2[VERT_PRED_16][j][0]=sp[j*2]; + mprr_2[VERT_PRED_16][j][1]=sp[j*2]; + mprr_2[VERT_PRED_16][j][2]=sp[j*2]; + mprr_2[VERT_PRED_16][j][3]=sp[j*2]; + mprr_2[VERT_PRED_16][j][4]=sp[j*2]; + mprr_2[VERT_PRED_16][j][5]=sp[j*2]; + mprr_2[VERT_PRED_16][j][6]=sp[j*2]; + mprr_2[VERT_PRED_16][j][7]=sp[j*2]; + mprr_2[VERT_PRED_16][j][8]=sp[j*2]; + mprr_2[VERT_PRED_16][j][9]=sp[j*2]; + mprr_2[VERT_PRED_16][j][10]=sp[j*2]; + mprr_2[VERT_PRED_16][j][11]=sp[j*2]; + mprr_2[VERT_PRED_16][j][12]=sp[j*2]; + mprr_2[VERT_PRED_16][j][13]=sp[j*2]; + mprr_2[VERT_PRED_16][j][14]=sp[j*2]; + mprr_2[VERT_PRED_16][j][15]=sp[j*2]; + } +} +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" {target vect_int } } } */ diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index c08d0ef951fc63adcfffc601917134ddf51ece45..1c8c6784cc7b5f2d327339ff55a5a5ea08835aab 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -2217,7 +2217,9 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, but the access in the loop doesn't cover the full vector we can end up with no gap recorded but still excess elements accessed, see PR103116. Make sure we peel for - gaps if necessary and sufficient and give up if not. */ + gaps if necessary and sufficient and give up if not. + If there is a combination of the access not covering the full vector and + a gap recorded then we may need to peel twice. */ if (loop_vinfo && *memory_access_type == VMAT_CONTIGUOUS && SLP_TREE_LOAD_PERMUTATION (slp_node).exists () @@ -2233,7 +2235,7 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, access excess elements. ??? Enhancements include peeling multiple iterations or using masked loads with a static mask. */ - || (group_size * cvf) % cnunits + group_size < cnunits) + || (group_size * cvf) % cnunits + group_size - gap < cnunits) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, --===============3440972030636510790== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="vect-multipeel.patch" ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1tdWx0aS1wZWVsLWdh cHMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1tdWx0aS1wZWVsLWdhcHMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4xYWFiNGM1YTE0ZDFlODM0NmQ4OTU4N2JkOTU0NGExNTE2NTM1YTQ1Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LW11bHRpLXBlZWwt Z2Fwcy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIEZvciBzb21lIHRhcmdldHMgd2UgZW5kIHVwIHZl Y3Rvcml6aW5nIHRoZSBiZWxvdyBsb29wIHN1Y2ggdGhhdCB0aGUgYHNwYAorICAgc2luZ2xlIGlu dGVnZXIgaXMgbG9hZGVkIGludG8gYSA0IGludGVnZXIgdmVjdG9yLgorICAgV2hpbGUgdGhlIHdy aXRlcyBhcmUgYWxsIHNhZmUsIHdpdGhvdXQgMiBzY2FsYXIgbG9vcHMgYmVpbmcgcGVlbGVkIGlu dG8gdGhlCisgICBlcGlsb2d1ZSB3ZSB3b3VsZCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgMzEg aW50ZWdlciBhcnJheS4gIFRoaXMgaGFwcGVucworICAgYmVjYXVzZSB3ZSBsb2FkIGEgNCBpbnRl Z2VyIGNodW5rIHRvIG9ubHkgdXNlIHRoZSBmaXJzdCBpbnRlZ2VyIGFuZAorICAgaW5jcmVtZW50 IGJ5IDIgaW50ZWdlcnMgYXQgYSB0aW1lLCBoZW5jZSB0aGUgbGFzdCBsb2FkIG5lZWRzIHNbMzAt MzNdIGFuZAorICAgdGhlIHBlbnVsdGltYXRlIGxvYWQgbmVlZHMgc1syOC0zMV0uCisgICBUaGlz IHRlc3RjYXNlIGVuc3VyZXMgdGhhdCB3ZSBkbyBub3QgY3Jhc2ggZHVlIHRvIHRoYXQgYmVoYXZp b3VyLiAgKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IG1tYXAgfSAqLworI2lu Y2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBNTUFQX1NJ WkUgMHgyMDAwMAorI2RlZmluZSBBRERSRVNTIDB4MTEyMjAwMDAwMAorCisjZGVmaW5lIE1CX0JM T0NLX1NJWkUgMTYKKyNkZWZpbmUgVkVSVF9QUkVEXzE2IDAKKyNkZWZpbmUgSE9SX1BSRURfMTYg MQorI2RlZmluZSBEQ19QUkVEXzE2IDIKK2ludCAqc3B0cjsKK2V4dGVybiB2b2lkIGludHJhcHJl ZF9sdW1hXzE2eDE2KCk7Cit1bnNpZ25lZCBzaG9ydCBtcHJyXzJbNV1bMTZdWzE2XTsKK3ZvaWQg aW5pdGlhbGlzZV9zKGludCAqcykgeyB9CitpbnQgbWFpbigpIHsKKyAgICB2b2lkICpzX21hcHBp bmc7CisgICAgdm9pZCAqZW5kX3M7CisgICAgc19tYXBwaW5nID0gbW1hcCAoKHZvaWQgKilBRERS RVNTLCBNTUFQX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICAgIE1BUF9QUklW QVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOworICAgIGlmIChzX21hcHBpbmcgPT0gTUFQX0ZB SUxFRCkKKyAgICAgIHsKKwlwZXJyb3IgKCJtbWFwIik7CisJcmV0dXJuIDE7CisgICAgICB9Cisg ICAgZW5kX3MgPSAoc19tYXBwaW5nICsgTU1BUF9TSVpFKTsKKyAgICBzcHRyID0gKGludCopKGVu ZF9zIC0gc2l6ZW9mKGludFszMV0pKTsKKyAgICBpbnRyYXByZWRfbHVtYV8xNngxNihzcHRyKTsK KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBpbnRyYXByZWRfbHVtYV8xNngxNihpbnQgKiByZXN0 cmljdCBzcCkgeworICAgIGZvciAoaW50IGo9MDsgaiA8IE1CX0JMT0NLX1NJWkU7IGorKykKKyAg ICAgIHsKKwltcHJyXzJbVkVSVF9QUkVEXzE2XVtqXVswXT1zcFtqKjJdOworCW1wcnJfMltWRVJU X1BSRURfMTZdW2pdWzFdPXNwW2oqMl07CisJbXBycl8yW1ZFUlRfUFJFRF8xNl1bal1bMl09c3Bb aioyXTsKKwltcHJyXzJbVkVSVF9QUkVEXzE2XVtqXVszXT1zcFtqKjJdOworCW1wcnJfMltWRVJU X1BSRURfMTZdW2pdWzRdPXNwW2oqMl07CisJbXBycl8yW1ZFUlRfUFJFRF8xNl1bal1bNV09c3Bb aioyXTsKKwltcHJyXzJbVkVSVF9QUkVEXzE2XVtqXVs2XT1zcFtqKjJdOworCW1wcnJfMltWRVJU X1BSRURfMTZdW2pdWzddPXNwW2oqMl07CisJbXBycl8yW1ZFUlRfUFJFRF8xNl1bal1bOF09c3Bb aioyXTsKKwltcHJyXzJbVkVSVF9QUkVEXzE2XVtqXVs5XT1zcFtqKjJdOworCW1wcnJfMltWRVJU X1BSRURfMTZdW2pdWzEwXT1zcFtqKjJdOworCW1wcnJfMltWRVJUX1BSRURfMTZdW2pdWzExXT1z cFtqKjJdOworCW1wcnJfMltWRVJUX1BSRURfMTZdW2pdWzEyXT1zcFtqKjJdOworCW1wcnJfMltW RVJUX1BSRURfMTZdW2pdWzEzXT1zcFtqKjJdOworCW1wcnJfMltWRVJUX1BSRURfMTZdW2pdWzE0 XT1zcFtqKjJdOworCW1wcnJfMltWRVJUX1BSRURfMTZdW2pdWzE1XT1zcFtqKjJdOworICAgICAg fQorfQorLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJMT09QIFZFQ1RPUklaRUQiICJ2 ZWN0IiB7dGFyZ2V0IHZlY3RfaW50IH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0 LXN0bXRzLmNjIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYwppbmRleCBjMDhkMGVmOTUxZmM2M2Fk Y2ZmZmM2MDE5MTcxMzRkZGY1MWVjZTQ1Li4xYzhjNjc4NGNjN2I1ZjJkMzI3MzM5ZmY1NWE1YTVl YTA4ODM1YWFiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmNjCisrKyBiL2djYy90 cmVlLXZlY3Qtc3RtdHMuY2MKQEAgLTIyMTcsNyArMjIxNyw5IEBAIGdldF9ncm91cF9sb2FkX3N0 b3JlX3R5cGUgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAJICAg ICBidXQgdGhlIGFjY2VzcyBpbiB0aGUgbG9vcCBkb2Vzbid0IGNvdmVyIHRoZSBmdWxsIHZlY3Rv cgogCSAgICAgd2UgY2FuIGVuZCB1cCB3aXRoIG5vIGdhcCByZWNvcmRlZCBidXQgc3RpbGwgZXhj ZXNzCiAJICAgICBlbGVtZW50cyBhY2Nlc3NlZCwgc2VlIFBSMTAzMTE2LiAgTWFrZSBzdXJlIHdl IHBlZWwgZm9yCi0JICAgICBnYXBzIGlmIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCBhbmQgZ2l2 ZSB1cCBpZiBub3QuICAqLworCSAgICAgZ2FwcyBpZiBuZWNlc3NhcnkgYW5kIHN1ZmZpY2llbnQg YW5kIGdpdmUgdXAgaWYgbm90LgorCSAgICAgSWYgdGhlcmUgaXMgYSBjb21iaW5hdGlvbiBvZiB0 aGUgYWNjZXNzIG5vdCBjb3ZlcmluZyB0aGUgZnVsbCB2ZWN0b3IgYW5kCisJICAgICBhIGdhcCBy ZWNvcmRlZCB0aGVuIHdlIG1heSBuZWVkIHRvIHBlZWwgdHdpY2UuICAqLwogCSAgaWYgKGxvb3Bf dmluZm8KIAkgICAgICAmJiAqbWVtb3J5X2FjY2Vzc190eXBlID09IFZNQVRfQ09OVElHVU9VUwog CSAgICAgICYmIFNMUF9UUkVFX0xPQURfUEVSTVVUQVRJT04gKHNscF9ub2RlKS5leGlzdHMgKCkK QEAgLTIyMzMsNyArMjIzNSw3IEBAIGdldF9ncm91cF9sb2FkX3N0b3JlX3R5cGUgKHZlY19pbmZv ICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCiAJCSAgICAgYWNjZXNzIGV4Y2VzcyBl bGVtZW50cy4KIAkJICAgICA/Pz8gIEVuaGFuY2VtZW50cyBpbmNsdWRlIHBlZWxpbmcgbXVsdGlw bGUgaXRlcmF0aW9ucwogCQkgICAgIG9yIHVzaW5nIG1hc2tlZCBsb2FkcyB3aXRoIGEgc3RhdGlj IG1hc2suICAqLwotCQkgIHx8IChncm91cF9zaXplICogY3ZmKSAlIGNudW5pdHMgKyBncm91cF9z aXplIDwgY251bml0cykKKwkJICB8fCAoZ3JvdXBfc2l6ZSAqIGN2ZikgJSBjbnVuaXRzICsgZ3Jv dXBfc2l6ZSAtIGdhcCA8IGNudW5pdHMpCiAJCXsKIAkJICBpZiAoZHVtcF9lbmFibGVkX3AgKCkp CiAJCSAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xv Y2F0aW9uLAoKCgo= --===============3440972030636510790==--