From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31433 invoked by alias); 22 Aug 2011 10:30:56 -0000 Received: (qmail 31422 invoked by uid 22791); 22 Aug 2011 10:30:53 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,TW_CP,TW_XT,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org Received: from mailout-de.gmx.net (HELO mailout-de.gmx.net) (213.165.64.22) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Mon, 22 Aug 2011 10:30:37 +0000 Received: (qmail invoked by alias); 22 Aug 2011 10:30:35 -0000 Received: from teras.ics.forth.gr (EHLO [139.91.70.93]) [139.91.70.93] by mail.gmx.net (mp064) with SMTP; 22 Aug 2011 12:30:35 +0200 Date: Mon, 22 Aug 2011 11:38:00 -0000 From: Dimitrios Apostolou To: gcc-patches@gcc.gnu.org cc: jimis@gmx.net, Steven Bosscher , Alexandre Oliva Subject: [var-tracking] small speed-ups Message-ID: User-Agent: Alpine 2.02 (LNX 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-34278658-1314009035=:1374" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2011-08/txt/msg01747.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-34278658-1314009035=:1374 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 2179 Hello list, this patch has all of my changes to var-tracking that I believe are worth keeping. These are all minor changes not touching algorithmic issues, I lost much time trying to understand what is actually done in var-tracking.c but I still don't get it. I wish there was some document describing current implementation. I'd appreciate all help I can get here. Bootstrapped/tested on x86_64. Thanks to lxo for helping me, hopefully his plan for better var-tracking throughout all optimisation passes will be implemented. This is the only var-tracking related doc I could find... ( http://gcc.gnu.org/wiki/Var_Tracking_Assignments). This patch also includes minor stylistic changes that made the code just a tiny bit more accessible to me, the indirection was so much that it hardly reminded me of C, let me know if I should remove these parts. :-s For the sake of completion I'll also post a follow-up patch where I delete/simplify a big part of var-tracking, unfortunately with some impact on performance. 2011-08-22 Dimitrios Apostolou * var-tracking.c (init_attrs_list_set): Remove function, instead use a memset() call to zero the attr list in... (dataflow_set_init). (vars_copy): Remove function because inserting each element into a new hash table was too costly. Replaced with the ... (htab_dup): ... new function that only does a memcpy() of the element table in htab_t, without rehashing any elements. (shared_hash_unshare): Replace the vars_copy() call with htab_dup(), plus do a little extra work (reference counting) which was in vars_copy. (shared_hash_destroy, dataflow_set_destroy): Add an extra "do_free" bool argument, to avoid iterating over hash tables freeing elements, when not needed. (vt_finalize, vt_emit_notes): Call the above with do_free=false since all pools will be freed later. (dataflow_set_clear, dataflow_set_copy, dataflow_set_union) (dataflow_set_merge, dataflow_set_different, compute_bb_dataflow) (vt_find_locations): Call shared_hash_destroy with do_free=true. (attrs_list_copy): Do not free destination list but reuse already allocated elements if possible. --8323328-34278658-1314009035=:1374 Content-Type: TEXT/plain; name=var-track.2.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=var-track.2.diff Content-length: 14779 PT09IG1vZGlmaWVkIGZpbGUgJ2djYy92YXItdHJhY2tpbmcuYycNCi0tLSBn Y2MvdmFyLXRyYWNraW5nLmMJMjAxMS0wNi0wMyAwMTo0MjozMSArMDAwMA0K KysrIGdjYy92YXItdHJhY2tpbmcuYwkyMDExLTA4LTIyIDA5OjUyOjA4ICsw MDAwDQpAQCAtNDE0LDcgKzQxNCw2IEBAIHN0YXRpYyBoYXNodmFsX3QgdmFy aWFibGVfaHRhYl9oYXNoIChjb24NCiBzdGF0aWMgaW50IHZhcmlhYmxlX2h0 YWJfZXEgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsNCiBzdGF0aWMg dm9pZCB2YXJpYWJsZV9odGFiX2ZyZWUgKHZvaWQgKik7DQogDQotc3RhdGlj IHZvaWQgaW5pdF9hdHRyc19saXN0X3NldCAoYXR0cnMgKik7DQogc3RhdGlj IHZvaWQgYXR0cnNfbGlzdF9jbGVhciAoYXR0cnMgKik7DQogc3RhdGljIGF0 dHJzIGF0dHJzX2xpc3RfbWVtYmVyIChhdHRycywgZGVjbF9vcl92YWx1ZSwg SE9TVF9XSURFX0lOVCk7DQogc3RhdGljIHZvaWQgYXR0cnNfbGlzdF9pbnNl cnQgKGF0dHJzICosIGRlY2xfb3JfdmFsdWUsIEhPU1RfV0lERV9JTlQsIHJ0 eCk7DQpAQCAtNDIzLDcgKzQyMiw2IEBAIHN0YXRpYyB2b2lkIGF0dHJzX2xp c3RfdW5pb24gKGF0dHJzICosIGENCiANCiBzdGF0aWMgdm9pZCAqKnVuc2hh cmVfdmFyaWFibGUgKGRhdGFmbG93X3NldCAqc2V0LCB2b2lkICoqc2xvdCwg dmFyaWFibGUgdmFyLA0KIAkJCQllbnVtIHZhcl9pbml0X3N0YXR1cyk7DQot c3RhdGljIHZvaWQgdmFyc19jb3B5IChodGFiX3QsIGh0YWJfdCk7DQogc3Rh dGljIHRyZWUgdmFyX2RlYnVnX2RlY2wgKHRyZWUpOw0KIHN0YXRpYyB2b2lk IHZhcl9yZWdfc2V0IChkYXRhZmxvd19zZXQgKiwgcnR4LCBlbnVtIHZhcl9p bml0X3N0YXR1cywgcnR4KTsNCiBzdGF0aWMgdm9pZCB2YXJfcmVnX2RlbGV0 ZV9hbmRfc2V0IChkYXRhZmxvd19zZXQgKiwgcnR4LCBib29sLA0KQEAgLTQ0 Nyw3ICs0NDUsNyBAQCBzdGF0aWMgYm9vbCB2YXJpYWJsZV9wYXJ0X2RpZmZl cmVudF9wICh2DQogc3RhdGljIGJvb2wgb25lcGFydF92YXJpYWJsZV9kaWZm ZXJlbnRfcCAodmFyaWFibGUsIHZhcmlhYmxlKTsNCiBzdGF0aWMgYm9vbCB2 YXJpYWJsZV9kaWZmZXJlbnRfcCAodmFyaWFibGUsIHZhcmlhYmxlKTsNCiBz dGF0aWMgYm9vbCBkYXRhZmxvd19zZXRfZGlmZmVyZW50IChkYXRhZmxvd19z ZXQgKiwgZGF0YWZsb3dfc2V0ICopOw0KLXN0YXRpYyB2b2lkIGRhdGFmbG93 X3NldF9kZXN0cm95IChkYXRhZmxvd19zZXQgKik7DQorc3RhdGljIHZvaWQg ZGF0YWZsb3dfc2V0X2Rlc3Ryb3kgKGRhdGFmbG93X3NldCAqLCBib29sKTsN CiANCiBzdGF0aWMgYm9vbCBjb250YWluc19zeW1ib2xfcmVmIChydHgpOw0K IHN0YXRpYyBib29sIHRyYWNrX2V4cHJfcCAodHJlZSwgYm9vbCk7DQpAQCAt MTA2OSwxNCArMTA2NywxNCBAQCBhZGp1c3RfaW5zbiAoYmFzaWNfYmxvY2sg YmIsIHJ0eCBpbnNuKQ0KIHN0YXRpYyBpbmxpbmUgYm9vbA0KIGR2X2lzX2Rl Y2xfcCAoZGVjbF9vcl92YWx1ZSBkdikNCiB7DQotICByZXR1cm4gIWR2IHx8 IChpbnQpIFRSRUVfQ09ERSAoKHRyZWUpIGR2KSAhPSAoaW50KSBWQUxVRTsN CisgIHJldHVybiAhZHYgfHwgKChpbnQpIFRSRUVfQ09ERSAoKHRyZWUpIGR2 KSAhPSAoaW50KSBWQUxVRSk7DQogfQ0KIA0KIC8qIFJldHVybiB0cnVlIGlm IGEgZGVjbF9vcl92YWx1ZSBpcyBhIFZBTFVFIHJ0bC4gICovDQogc3RhdGlj IGlubGluZSBib29sDQogZHZfaXNfdmFsdWVfcCAoZGVjbF9vcl92YWx1ZSBk dikNCiB7DQotICByZXR1cm4gZHYgJiYgIWR2X2lzX2RlY2xfcCAoZHYpOw0K KyAgcmV0dXJuICFkdl9pc19kZWNsX3AgKGR2KTsNCiB9DQogDQogLyogUmV0 dXJuIHRoZSBkZWNsIGluIHRoZSBkZWNsX29yX3ZhbHVlLiAgKi8NCkBAIC0x MDkyLDcgKzEwOTAsNyBAQCBzdGF0aWMgaW5saW5lIHJ0eA0KIGR2X2FzX3Zh bHVlIChkZWNsX29yX3ZhbHVlIGR2KQ0KIHsNCiAgIGdjY19jaGVja2luZ19h c3NlcnQgKGR2X2lzX3ZhbHVlX3AgKGR2KSk7DQotICByZXR1cm4gKHJ0eClk djsNCisgIHJldHVybiAocnR4KSBkdjsNCiB9DQogDQogLyogUmV0dXJuIHRo ZSBvcGFxdWUgcG9pbnRlciBpbiB0aGUgZGVjbF9vcl92YWx1ZS4gICovDQpA QCAtMTE5MSw3ICsxMTg5LDcgQEAgZHZfdWlkMmhhc2ggKGR2dWlkIHVpZCkN CiBzdGF0aWMgaW5saW5lIGhhc2h2YWxfdA0KIGR2X2h0YWJfaGFzaCAoZGVj bF9vcl92YWx1ZSBkdikNCiB7DQotICByZXR1cm4gZHZfdWlkMmhhc2ggKGR2 X3VpZCAoZHYpKTsNCisgIHJldHVybiAoaGFzaHZhbF90KSAoZHZfdWlkIChk dikpOw0KIH0NCiANCiAvKiBUaGUgaGFzaCBmdW5jdGlvbiBmb3IgdmFyaWFi bGVfaHRhYiwgY29tcHV0ZXMgdGhlIGhhc2ggdmFsdWUNCkBAIC0xMjAyLDcg KzEyMDAsNyBAQCB2YXJpYWJsZV9odGFiX2hhc2ggKGNvbnN0IHZvaWQgKngp DQogew0KICAgY29uc3RfdmFyaWFibGUgY29uc3QgdiA9IChjb25zdF92YXJp YWJsZSkgeDsNCiANCi0gIHJldHVybiBkdl9odGFiX2hhc2ggKHYtPmR2KTsN CisgIHJldHVybiAoaGFzaHZhbF90KSAoZHZfdWlkICh2LT5kdikpOw0KIH0N CiANCiAvKiBDb21wYXJlIHRoZSBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZSBY IHdpdGggZGVjbGFyYXRpb24gWS4gICovDQpAQCAtMTIxMSw5ICsxMjA5LDgg QEAgc3RhdGljIGludA0KIHZhcmlhYmxlX2h0YWJfZXEgKGNvbnN0IHZvaWQg KngsIGNvbnN0IHZvaWQgKnkpDQogew0KICAgY29uc3RfdmFyaWFibGUgY29u c3QgdiA9IChjb25zdF92YXJpYWJsZSkgeDsNCi0gIGRlY2xfb3JfdmFsdWUg ZHYgPSBDT05TVF9DQVNUMiAoZGVjbF9vcl92YWx1ZSwgY29uc3Qgdm9pZCAq LCB5KTsNCiANCi0gIHJldHVybiAoZHZfYXNfb3BhcXVlICh2LT5kdikgPT0g ZHZfYXNfb3BhcXVlIChkdikpOw0KKyAgcmV0dXJuICh2LT5kdikgPT0geTsN CiB9DQogDQogLyogRnJlZSB0aGUgZWxlbWVudCBvZiBWQVJJQUJMRV9IVEFC IChpdHMgdHlwZSBpcyBzdHJ1Y3QgdmFyaWFibGVfZGVmKS4gICovDQpAQCAt MTI2NSwxNyArMTI2Miw2IEBAIHZhbHVlX2NoYWluX2h0YWJfZXEgKGNvbnN0 IHZvaWQgKngsIGNvbnMNCiAgIHJldHVybiBkdl9hc19vcGFxdWUgKHYtPmR2 KSA9PSBkdl9hc19vcGFxdWUgKGR2KTsNCiB9DQogDQotLyogSW5pdGlhbGl6 ZSB0aGUgc2V0IChhcnJheSkgU0VUIG9mIGF0dHJzIHRvIGVtcHR5IGxpc3Rz LiAgKi8NCi0NCi1zdGF0aWMgdm9pZA0KLWluaXRfYXR0cnNfbGlzdF9zZXQg KGF0dHJzICpzZXQpDQotew0KLSAgaW50IGk7DQotDQotICBmb3IgKGkgPSAw OyBpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspDQotICAgIHNldFtp XSA9IE5VTEw7DQotfQ0KLQ0KIC8qIE1ha2UgdGhlIGxpc3QgKkxJU1RQIGVt cHR5LiAgKi8NCiANCiBzdGF0aWMgdm9pZA0KQEAgLTEzMjMsMTggKzEzMDks MzMgQEAgYXR0cnNfbGlzdF9pbnNlcnQgKGF0dHJzICpsaXN0cCwgZGVjbF9v cg0KIHN0YXRpYyB2b2lkDQogYXR0cnNfbGlzdF9jb3B5IChhdHRycyAqZHN0 cCwgYXR0cnMgc3JjKQ0KIHsNCi0gIGF0dHJzIG47DQorICBhdHRycyBuLCBu ZXh0LCAqbmV4dHA7DQogDQotICBhdHRyc19saXN0X2NsZWFyIChkc3RwKTsN Ci0gIGZvciAoOyBzcmM7IHNyYyA9IHNyYy0+bmV4dCkNCisgIC8qIENvcHkg dG8gYWxyZWFkeSBleGlzdGluZyBub2RlcyBvZiAqZHN0cCwgYWxsb2NhdGlu ZyBuZXcgb25seSBpZiBuZWVkZWQgKi8NCisgIG5leHRwID0gZHN0cDsNCisg IHdoaWxlIChzcmMpDQogICAgIHsNCi0gICAgICBuID0gKGF0dHJzKSBwb29s X2FsbG9jIChhdHRyc19wb29sKTsNCisgICAgICBpZiAoKm5leHRwID09IE5V TEwpDQorCXsNCisJICAoKm5leHRwKSA9IChhdHRycykgcG9vbF9hbGxvYyAo YXR0cnNfcG9vbCk7DQorCSAgKCpuZXh0cCktPm5leHQgPSBOVUxMOw0KKwl9 DQorICAgICAgbiA9ICpuZXh0cDsNCiAgICAgICBuLT5sb2MgPSBzcmMtPmxv YzsNCiAgICAgICBuLT5kdiA9IHNyYy0+ZHY7DQogICAgICAgbi0+b2Zmc2V0 ID0gc3JjLT5vZmZzZXQ7DQotICAgICAgbi0+bmV4dCA9ICpkc3RwOw0KLSAg ICAgICpkc3RwID0gbjsNCisgICAgICBuZXh0cCA9ICZuLT5uZXh0Ow0KKyAg ICAgIHNyYyA9IHNyYy0+bmV4dDsNCiAgICAgfQ0KKyAgLyogRnJlZSByZW1h aW5pbmcgZWxlbWVudHMgb2YgKmRzdHAsIGlmIGl0IHdhcyBsb25nZXIgdGhh biBzcmMuICovDQorICBuID0gKm5leHRwOw0KKyAgd2hpbGUgKG4gIT0gTlVM TCkNCisgICAgew0KKyAgICAgIG5leHQgPSBuLT5uZXh0Ow0KKyAgICAgIHBv b2xfZnJlZSAoYXR0cnNfcG9vbCwgbik7DQorICAgICAgbiA9IG5leHQ7DQor ICAgIH0NCisgICgqbmV4dHApID0gTlVMTDsNCiB9DQogDQogLyogQWRkIGFs bCBub2RlcyBmcm9tIFNSQyB3aGljaCBhcmUgbm90IGluICpEU1RQIHRvICpE U1RQLiAgKi8NCkBAIC0xMzk3LDE5ICsxMzk4LDQwIEBAIHNoYXJlZF92YXJf cCAodmFyaWFibGUgdmFyLCBzaGFyZWRfaGFzaCANCiAJICB8fCBzaGFyZWRf aGFzaF9zaGFyZWQgKHZhcnMpKTsNCiB9DQogDQorLyogQ29weSBhbGwgdmFy aWFibGVzIGZyb20gaGFzaCB0YWJsZSBTUkMgdG8gaGFzaCB0YWJsZSBEU1Qg d2l0aG91dCByZWhhc2hpbmcNCisgICBhbnkgdmFsdWVzLiAgKi8NCisNCitz dGF0aWMgaHRhYl90DQoraHRhYl9kdXAgKGh0YWJfdCBzcmMpDQorew0KKyAg aHRhYl90IGRzdDsNCisNCisgIGRzdCA9IChodGFiX3QpIHhtYWxsb2MgKHNp emVvZiAoKnNyYykpOw0KKyAgbWVtY3B5IChkc3QsIHNyYywgc2l6ZW9mICgq c3JjKSk7DQorICBkc3QtPmVudHJpZXMgPSAodm9pZCAqKikgeG1hbGxvYyAo c3JjLT5zaXplICogc2l6ZW9mICgqc3JjLT5lbnRyaWVzKSk7DQorICBtZW1j cHkgKGRzdC0+ZW50cmllcywgc3JjLT5lbnRyaWVzLA0KKwkgIHNyYy0+c2l6 ZSAqIHNpemVvZiAoKnNyYy0+ZW50cmllcykpOw0KKyAgcmV0dXJuIGRzdDsN Cit9DQorDQogLyogQ29weSB2YXJpYWJsZXMgaW50byBhIG5ldyBoYXNoIHRh YmxlLiAgKi8NCiANCiBzdGF0aWMgc2hhcmVkX2hhc2gNCiBzaGFyZWRfaGFz aF91bnNoYXJlIChzaGFyZWRfaGFzaCB2YXJzKQ0KIHsNCisgIHZhcmlhYmxl IHZhcjsNCisgIGh0YWJfaXRlcmF0b3IgaGk7DQogICBzaGFyZWRfaGFzaCBu ZXdfdmFycyA9IChzaGFyZWRfaGFzaCkgcG9vbF9hbGxvYyAoc2hhcmVkX2hh c2hfcG9vbCk7DQorDQogICBnY2NfYXNzZXJ0ICh2YXJzLT5yZWZjb3VudCA+ IDEpOw0KICAgbmV3X3ZhcnMtPnJlZmNvdW50ID0gMTsNCi0gIG5ld192YXJz LT5odGFiDQotICAgID0gaHRhYl9jcmVhdGUgKGh0YWJfZWxlbWVudHMgKHZh cnMtPmh0YWIpICsgMywgdmFyaWFibGVfaHRhYl9oYXNoLA0KLQkJICAgdmFy aWFibGVfaHRhYl9lcSwgdmFyaWFibGVfaHRhYl9mcmVlKTsNCi0gIHZhcnNf Y29weSAobmV3X3ZhcnMtPmh0YWIsIHZhcnMtPmh0YWIpOw0KKyAgbmV3X3Zh cnMtPmh0YWIgPSBodGFiX2R1cCAodmFycy0+aHRhYik7DQorICBGT1JfRUFD SF9IVEFCX0VMRU1FTlQgKG5ld192YXJzLT5odGFiLCB2YXIsIHZhcmlhYmxl LCBoaSkNCisgICAgew0KKyAgICAgIHZhci0+cmVmY291bnQrKzsNCisgICAg fQ0KICAgdmFycy0+cmVmY291bnQtLTsNCisNCiAgIHJldHVybiBuZXdfdmFy czsNCiB9DQogDQpAQCAtMTQyNiwxMyArMTQ0OCwxNyBAQCBzaGFyZWRfaGFz aF9jb3B5IChzaGFyZWRfaGFzaCB2YXJzKQ0KICAgIGFueW1vcmUuICAqLw0K IA0KIHN0YXRpYyB2b2lkDQotc2hhcmVkX2hhc2hfZGVzdHJveSAoc2hhcmVk X2hhc2ggdmFycykNCitzaGFyZWRfaGFzaF9kZXN0cm95IChzaGFyZWRfaGFz aCB2YXJzLCBib29sIGRvX2ZyZWUpDQogew0KICAgZ2NjX2NoZWNraW5nX2Fz c2VydCAodmFycy0+cmVmY291bnQgPiAwKTsNCiAgIGlmICgtLXZhcnMtPnJl ZmNvdW50ID09IDApDQogICAgIHsNCisgICAgICBpZiAoIWRvX2ZyZWUpDQor CS8qIERpcnR5IGhhY2sgdG8gcHJldmVudCBodGFiX2RlbGV0ZSgpIGl0ZXJh dGluZyBvdmVyIGFsbCBlbGVtZW50cyAqLw0KKwl2YXJzLT5odGFiLT5kZWxf ZiA9IE5VTEw7DQogICAgICAgaHRhYl9kZWxldGUgKHZhcnMtPmh0YWIpOw0K LSAgICAgIHBvb2xfZnJlZSAoc2hhcmVkX2hhc2hfcG9vbCwgdmFycyk7DQor ICAgICAgaWYgKGRvX2ZyZWUpDQorCXBvb2xfZnJlZSAoc2hhcmVkX2hhc2hf cG9vbCwgdmFycyk7DQogICAgIH0NCiB9DQogDQpAQCAtMTU5MywyNSArMTYx OSw2IEBAIHVuc2hhcmVfdmFyaWFibGUgKGRhdGFmbG93X3NldCAqc2V0LCB2 b2kNCiAgIHJldHVybiBzbG90Ow0KIH0NCiANCi0vKiBDb3B5IGFsbCB2YXJp YWJsZXMgZnJvbSBoYXNoIHRhYmxlIFNSQyB0byBoYXNoIHRhYmxlIERTVC4g ICovDQotDQotc3RhdGljIHZvaWQNCi12YXJzX2NvcHkgKGh0YWJfdCBkc3Qs IGh0YWJfdCBzcmMpDQotew0KLSAgaHRhYl9pdGVyYXRvciBoaTsNCi0gIHZh cmlhYmxlIHZhcjsNCi0NCi0gIEZPUl9FQUNIX0hUQUJfRUxFTUVOVCAoc3Jj LCB2YXIsIHZhcmlhYmxlLCBoaSkNCi0gICAgew0KLSAgICAgIHZvaWQgKipk c3RwOw0KLSAgICAgIHZhci0+cmVmY291bnQrKzsNCi0gICAgICBkc3RwID0g aHRhYl9maW5kX3Nsb3Rfd2l0aF9oYXNoIChkc3QsIHZhci0+ZHYsDQotCQkJ CSAgICAgICBkdl9odGFiX2hhc2ggKHZhci0+ZHYpLA0KLQkJCQkgICAgICAg SU5TRVJUKTsNCi0gICAgICAqZHN0cCA9IHZhcjsNCi0gICAgfQ0KLX0NCi0N CiAvKiBNYXAgYSBkZWNsIHRvIGl0cyBtYWluIGRlYnVnIGRlY2wuICAqLw0K IA0KIHN0YXRpYyBpbmxpbmUgdHJlZQ0KQEAgLTIwMzQsNyArMjA0MSw4IEBA IHZhbF9yZXNvbHZlIChkYXRhZmxvd19zZXQgKnNldCwgcnR4IHZhbCwNCiBz dGF0aWMgdm9pZA0KIGRhdGFmbG93X3NldF9pbml0IChkYXRhZmxvd19zZXQg KnNldCkNCiB7DQotICBpbml0X2F0dHJzX2xpc3Rfc2V0IChzZXQtPnJlZ3Mp Ow0KKyAgLyogSW5pdGlhbGl6ZSB0aGUgc2V0IChhcnJheSkgU0VUIG9mIGF0 dHJzIHRvIGVtcHR5IGxpc3RzLiAgKi8NCisgIG1lbXNldCAoc2V0LT5yZWdz LCAwLCBzaXplb2YgKHNldC0+cmVncykpOw0KICAgc2V0LT52YXJzID0gc2hh cmVkX2hhc2hfY29weSAoZW1wdHlfc2hhcmVkX2hhc2gpOw0KICAgc2V0LT5z dGFja19hZGp1c3QgPSAwOw0KICAgc2V0LT50cmF2ZXJzZWRfdmFycyA9IE5V TEw7DQpAQCAtMjA1MCw3ICsyMDU4LDcgQEAgZGF0YWZsb3dfc2V0X2NsZWFy IChkYXRhZmxvd19zZXQgKnNldCkNCiAgIGZvciAoaSA9IDA7IGkgPCBGSVJT VF9QU0VVRE9fUkVHSVNURVI7IGkrKykNCiAgICAgYXR0cnNfbGlzdF9jbGVh ciAoJnNldC0+cmVnc1tpXSk7DQogDQotICBzaGFyZWRfaGFzaF9kZXN0cm95 IChzZXQtPnZhcnMpOw0KKyAgc2hhcmVkX2hhc2hfZGVzdHJveSAoc2V0LT52 YXJzLCB0cnVlKTsNCiAgIHNldC0+dmFycyA9IHNoYXJlZF9oYXNoX2NvcHkg KGVtcHR5X3NoYXJlZF9oYXNoKTsNCiB9DQogDQpAQCAtMjA2NCw3ICsyMDcy LDcgQEAgZGF0YWZsb3dfc2V0X2NvcHkgKGRhdGFmbG93X3NldCAqZHN0LCBk YQ0KICAgZm9yIChpID0gMDsgaSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsg aSsrKQ0KICAgICBhdHRyc19saXN0X2NvcHkgKCZkc3QtPnJlZ3NbaV0sIHNy Yy0+cmVnc1tpXSk7DQogDQotICBzaGFyZWRfaGFzaF9kZXN0cm95IChkc3Qt PnZhcnMpOw0KKyAgc2hhcmVkX2hhc2hfZGVzdHJveSAoZHN0LT52YXJzLCB0 cnVlKTsNCiAgIGRzdC0+dmFycyA9IHNoYXJlZF9oYXNoX2NvcHkgKHNyYy0+ dmFycyk7DQogICBkc3QtPnN0YWNrX2FkanVzdCA9IHNyYy0+c3RhY2tfYWRq dXN0Ow0KIH0NCkBAIC0yNDg5LDcgKzI0OTcsNyBAQCBkYXRhZmxvd19zZXRf dW5pb24gKGRhdGFmbG93X3NldCAqZHN0LCBkDQogDQogICBpZiAoZHN0LT52 YXJzID09IGVtcHR5X3NoYXJlZF9oYXNoKQ0KICAgICB7DQotICAgICAgc2hh cmVkX2hhc2hfZGVzdHJveSAoZHN0LT52YXJzKTsNCisgICAgICBzaGFyZWRf aGFzaF9kZXN0cm95IChkc3QtPnZhcnMsIHRydWUpOw0KICAgICAgIGRzdC0+ dmFycyA9IHNoYXJlZF9oYXNoX2NvcHkgKHNyYy0+dmFycyk7DQogICAgIH0N CiAgIGVsc2UNCkBAIC0zNzExLDExICszNzE5LDExIEBAIGRhdGFmbG93X3Nl dF9tZXJnZSAoZGF0YWZsb3dfc2V0ICpkc3QsIGQNCiAgIHNyYzJfZWxlbXMg PSBodGFiX2VsZW1lbnRzIChzaGFyZWRfaGFzaF9odGFiIChzcmMyLT52YXJz KSk7DQogICBkYXRhZmxvd19zZXRfaW5pdCAoZHN0KTsNCiAgIGRzdC0+c3Rh Y2tfYWRqdXN0ID0gY3VyLnN0YWNrX2FkanVzdDsNCi0gIHNoYXJlZF9oYXNo X2Rlc3Ryb3kgKGRzdC0+dmFycyk7DQorICBzaGFyZWRfaGFzaF9kZXN0cm95 IChkc3QtPnZhcnMsIHRydWUpOw0KICAgZHN0LT52YXJzID0gKHNoYXJlZF9o YXNoKSBwb29sX2FsbG9jIChzaGFyZWRfaGFzaF9wb29sKTsNCiAgIGRzdC0+ dmFycy0+cmVmY291bnQgPSAxOw0KICAgZHN0LT52YXJzLT5odGFiDQotICAg ID0gaHRhYl9jcmVhdGUgKE1BWCAoc3JjMV9lbGVtcywgc3JjMl9lbGVtcyks IHZhcmlhYmxlX2h0YWJfaGFzaCwNCisgICAgPSBodGFiX2NyZWF0ZSAoMiAq IE1BWCAoc3JjMV9lbGVtcywgc3JjMl9lbGVtcyksIHZhcmlhYmxlX2h0YWJf aGFzaCwNCiAJCSAgIHZhcmlhYmxlX2h0YWJfZXEsIHZhcmlhYmxlX2h0YWJf ZnJlZSk7DQogDQogICBmb3IgKGkgPSAwOyBpIDwgRklSU1RfUFNFVURPX1JF R0lTVEVSOyBpKyspDQpAQCAtMzczNCw3ICszNzQyLDcgQEAgZGF0YWZsb3df c2V0X21lcmdlIChkYXRhZmxvd19zZXQgKmRzdCwgZA0KICAgaWYgKGRzbS5z cmNfb25lcGFydF9jbnQpDQogICAgIGRzdF9jYW5fYmVfc2hhcmVkID0gZmFs c2U7DQogDQotICBkYXRhZmxvd19zZXRfZGVzdHJveSAoc3JjMSk7DQorICBk YXRhZmxvd19zZXRfZGVzdHJveSAoc3JjMSwgdHJ1ZSk7DQogfQ0KIA0KIC8q IE1hcmsgcmVnaXN0ZXIgZXF1aXZhbGVuY2VzLiAgKi8NCkBAIC00NTAzLDE0 ICs0NTExLDE1IEBAIGRhdGFmbG93X3NldF9kaWZmZXJlbnQgKGRhdGFmbG93 X3NldCAqb2wNCiAvKiBGcmVlIHRoZSBjb250ZW50cyBvZiBkYXRhZmxvdyBz ZXQgU0VULiAgKi8NCiANCiBzdGF0aWMgdm9pZA0KLWRhdGFmbG93X3NldF9k ZXN0cm95IChkYXRhZmxvd19zZXQgKnNldCkNCitkYXRhZmxvd19zZXRfZGVz dHJveSAoZGF0YWZsb3dfc2V0ICpzZXQsIGJvb2wgZG9fZnJlZSkNCiB7DQog ICBpbnQgaTsNCiANCi0gIGZvciAoaSA9IDA7IGkgPCBGSVJTVF9QU0VVRE9f UkVHSVNURVI7IGkrKykNCi0gICAgYXR0cnNfbGlzdF9jbGVhciAoJnNldC0+ cmVnc1tpXSk7DQorICBpZiAoZG9fZnJlZSkNCisgICAgZm9yIChpID0gMDsg aSA8IEZJUlNUX1BTRVVET19SRUdJU1RFUjsgaSsrKQ0KKyAgICAgIGF0dHJz X2xpc3RfY2xlYXIgKCZzZXQtPnJlZ3NbaV0pOw0KIA0KLSAgc2hhcmVkX2hh c2hfZGVzdHJveSAoc2V0LT52YXJzKTsNCisgIHNoYXJlZF9oYXNoX2Rlc3Ry b3kgKHNldC0+dmFycywgZG9fZnJlZSk7DQogICBzZXQtPnZhcnMgPSBOVUxM Ow0KIH0NCiANCkBAIC02MzM5LDcgKzYzNDgsNyBAQCBjb21wdXRlX2JiX2Rh dGFmbG93IChiYXNpY19ibG9jayBiYikNCiAjZW5kaWYNCiAgICAgfQ0KICAg Y2hhbmdlZCA9IGRhdGFmbG93X3NldF9kaWZmZXJlbnQgKCZvbGRfb3V0LCBv dXQpOw0KLSAgZGF0YWZsb3dfc2V0X2Rlc3Ryb3kgKCZvbGRfb3V0KTsNCisg IGRhdGFmbG93X3NldF9kZXN0cm95ICgmb2xkX291dCwgdHJ1ZSk7DQogICBy ZXR1cm4gY2hhbmdlZDsNCiB9DQogDQpAQCAtNjQ1Niw3ICs2NDY1LDcgQEAg dnRfZmluZF9sb2NhdGlvbnMgKHZvaWQpDQogI2VuZGlmDQogCQkgICAgICBp ZiAoZHN0X2Nhbl9iZV9zaGFyZWQpDQogCQkJew0KLQkJCSAgc2hhcmVkX2hh c2hfZGVzdHJveSAoaW4tPnZhcnMpOw0KKwkJCSAgc2hhcmVkX2hhc2hfZGVz dHJveSAoaW4tPnZhcnMsIHRydWUpOw0KIAkJCSAgaW4tPnZhcnMgPSBzaGFy ZWRfaGFzaF9jb3B5IChmaXJzdF9vdXQtPnZhcnMpOw0KIAkJCX0NCiAJCSAg ICB9DQpAQCAtODM0Myw3ICs4MzUyLDggQEAgdnRfZW1pdF9ub3RlcyAodm9p ZCkNCiAgICAgICBnY2NfYXNzZXJ0IChodGFiX2VsZW1lbnRzICh2YWx1ZV9j aGFpbnMpID09IDApOw0KICAgICB9DQogI2VuZGlmDQotICBkYXRhZmxvd19z ZXRfZGVzdHJveSAoJmN1cik7DQorICAvKiBkb24ndCBmcmVlIG1lbW9yeSBo ZXJlLCB3ZSdsbCBmcmVlIHBvb2xzIHJpZ2h0IGFmdGVyIGluIHZ0X2ZpbmFs aXplICovDQorICBkYXRhZmxvd19zZXRfZGVzdHJveSAoJmN1ciwgZmFsc2Up Ow0KIA0KICAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQ0KICAgICB7DQpA QCAtODk5NiwxMSArOTAwNiwxMyBAQCB2dF9maW5hbGl6ZSAodm9pZCkNCiAN CiAgIEZPUl9BTExfQkIgKGJiKQ0KICAgICB7DQotICAgICAgZGF0YWZsb3df c2V0X2Rlc3Ryb3kgKCZWVEkgKGJiKS0+aW4pOw0KLSAgICAgIGRhdGFmbG93 X3NldF9kZXN0cm95ICgmVlRJIChiYiktPm91dCk7DQorICAgICAgLyogVGhl ICJmYWxzZSIgZG9fZnJlZSBwYXJhbWV0ZXIgbWVhbnMgdG8gbm90IGJvdGhl ciB0byBpdGVyYXRlIGFuZCBmcmVlDQorCSBhbGwgaGFzaCB0YWJsZSBlbGVt ZW50cywgc2luY2Ugd2UnbGwgZGVzdHJveSB0aGUgcG9vbHMuICovDQorICAg ICAgZGF0YWZsb3dfc2V0X2Rlc3Ryb3kgKCZWVEkgKGJiKS0+aW4sIGZhbHNl KTsNCisgICAgICBkYXRhZmxvd19zZXRfZGVzdHJveSAoJlZUSSAoYmIpLT5v dXQsIGZhbHNlKTsNCiAgICAgICBpZiAoVlRJIChiYiktPnBlcm1wKQ0KIAl7 DQotCSAgZGF0YWZsb3dfc2V0X2Rlc3Ryb3kgKFZUSSAoYmIpLT5wZXJtcCk7 DQorCSAgZGF0YWZsb3dfc2V0X2Rlc3Ryb3kgKFZUSSAoYmIpLT5wZXJtcCwg ZmFsc2UpOw0KIAkgIFhERUxFVEUgKFZUSSAoYmIpLT5wZXJtcCk7DQogCX0N CiAgICAgfQ0KDQo= --8323328-34278658-1314009035=:1374--