From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9762 invoked by alias); 13 Sep 2009 21:47:50 -0000 Received: (qmail 9752 invoked by uid 22791); 13 Sep 2009 21:47:48 -0000 X-SWARE-Spam-Status: No, hits=-1.5 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_31,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 13 Sep 2009 21:47:43 +0000 Received: from spaceape23.eur.corp.google.com (spaceape23.eur.corp.google.com [172.28.16.75]) by smtp-out.google.com with ESMTP id n8DLldOx003636 for ; Sun, 13 Sep 2009 14:47:39 -0700 Received: from an-out-0708.google.com (andd14.prod.google.com [10.100.30.14]) by spaceape23.eur.corp.google.com with ESMTP id n8DLlas2006309 for ; Sun, 13 Sep 2009 14:47:36 -0700 Received: by an-out-0708.google.com with SMTP id d14so238928and.30 for ; Sun, 13 Sep 2009 14:47:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.101.62.6 with SMTP id p6mr4888653ank.153.1252878455899; Sun, 13 Sep 2009 14:47:35 -0700 (PDT) In-Reply-To: <20090911211453.GR20694@adacore.com> References: <20090909055824.GB11738@adacore.com> <20090910182952.GK20694@adacore.com> <8ac60eac0909101829g5384d665gdab27526fe95c27c@mail.gmail.com> <000c01ca32ac$0ca9f8b0$25fdea10$@u-strasbg.fr> <8ac60eac0909110029q1c88dcetdb644fa461fa545c@mail.gmail.com> <000f01ca32b3$0e6b5390$2b41fab0$@u-strasbg.fr> <8ac60eac0909110103l2b88dc95i2f3c238aa4be2ed0@mail.gmail.com> <001201ca32ba$f9060e70$eb122b50$@u-strasbg.fr> <8ac60eac0909111047r1e9f2115u863e250d1c402534@mail.gmail.com> <20090911211453.GR20694@adacore.com> Date: Sun, 13 Sep 2009 21:47:00 -0000 Message-ID: <8ac60eac0909131447i5a128877q585e3ab4c24f551b@mail.gmail.com> Subject: Re: [patch] Speed up find_pc_section From: Paul Pluzhnikov To: Joel Brobecker Cc: Pierre Muller , Ulrich Weigand , gdb-patches ml , Tom Tromey , Jan Kratochvil Content-Type: multipart/mixed; boundary=001636eee4914f88f304737c7fb3 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-09/txt/msg00388.txt.bz2 --001636eee4914f88f304737c7fb3 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2788 On Fri, Sep 11, 2009 at 2:14 PM, Joel Brobecker wro= te: >> 2009-09-11 =A0Paul Pluzhnikov =A0 >> >> =A0 =A0 =A0* objfiles.c (qsort_cmp): Remove asserts. >> =A0 =A0 =A0(insert_section_p, filter_debuginfo_sections): New function. >> =A0 =A0 =A0(filter_overlapping_sections): Likewise. >> =A0 =A0 =A0(update_section_map): Adjust. > > Looks great to me. Please go ahead and commit. Additional testing revealed an off-by-one bug :-( Now fixed. > Just one question: Do you think it might be advantageous to split > this complaint in multiple lines? Something like: Good idea. Done. This also implements ordering of sections (by objfile sequence, and by section sequence within a single objfile), just to make deterministic which sections are discarded. Tested: Linux/x86_64 (no regressions), Fedora 11/i386 (no regressions) Also tested Darwin/i386 (can't run a testsuite, but internal assert is gone from the java test case by Christian Thalinger). Also tested Solaris 10/i386, no assertions in objfiles.c [1], can't really tell regressions because running GDB tests causes kernel panic :( Also tested Solaris 11/i386 (aka OpenSolaris), no regressions [2]. I think this is ready to commit :-) Ulrich? Thanks, [1] There is an unrelated assert: UNRESOLVED: gdb.mi/mi-var-cmd.exp: update all vars: i changed -var-update * n -exec-step ~"Please answer y or n.\n" ~"../../src/gdb/thread.c:575: internal-error: is_thread_state: Assertion `tp' failed.\nA problem internal to GDB has been detected,\nfurther debugging may pro ve unreliable.\nCreate a core file of GDB? " [2] Also unrelated asserts: Starting program: /export/home/paul/gdb-cvs/build/gdb/testsuite/gdb.objc/objcdecode ^M ../../src/gdb/breakpoint.c:7939: internal-error: breakpoint_re_set_one: Assertion `sals.nelts =3D=3D 1' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? (y or n) FAIL: gdb.objc/objcdecode.exp: continue after break on multiply defined symbol (GDB internal error) (gdb) PASS: gdb.threads/hand-call-in-threads.exp: prepare to make hand call, thread 1 call hand_call()^M ../../src/gdb/inline-frame.c:322: internal-error: skip_inline_frames: Assertion `find_inline_frame_state (ptid) =3D=3D NULL' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M Quit this debugging session? FAIL: gdb.threads/hand-call-in-threads.exp: hand call, thread 1 (GDB internal error) --=20 Paul Pluzhnikov 2009-09-13 Paul Pluzhnikov * objfiles.c (qsort_cmp): Remove asserts. (insert_section_p, filter_debuginfo_sections): New function. (filter_overlapping_sections): Likewise. (update_section_map): Adjust. --001636eee4914f88f304737c7fb3 Content-Type: text/plain; charset=US-ASCII; name="gdb-find_pc_section-20090912.txt" Content-Disposition: attachment; filename="gdb-find_pc_section-20090912.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzkbfnkz0 Content-length: 12884 SW5kZXg6IG9iamZpbGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9vYmpmaWxlcy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjk1CmRpZmYgLXAgLXUgLXIxLjk1IG9iamZpbGVzLmMK LS0tIG9iamZpbGVzLmMJMTEgU2VwIDIwMDkgMTg6NTE6MzEgLTAwMDAJMS45 NQorKysgb2JqZmlsZXMuYwkxMiBTZXAgMjAwOSAxNjoxNzozMCAtMDAwMApA QCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKICNp bmNsdWRlICJleGVjLmgiCiAjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNs dWRlICJjb21wbGFpbnRzLmgiCiAKIC8qIFByb3RvdHlwZXMgZm9yIGxvY2Fs IGZ1bmN0aW9ucyAqLwogCkBAIC04MDIsMTYgKzgwMyw3MiBAQCBxc29ydF9j bXAgKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAgIGNvbnN0IENP UkVfQUREUiBzZWN0Ml9hZGRyID0gb2JqX3NlY3Rpb25fYWRkciAoc2VjdDIp OwogCiAgIGlmIChzZWN0MV9hZGRyIDwgc2VjdDJfYWRkcikKLSAgICB7Ci0g ICAgICBnZGJfYXNzZXJ0IChvYmpfc2VjdGlvbl9lbmRhZGRyIChzZWN0MSkg PD0gc2VjdDJfYWRkcik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAg IHJldHVybiAtMTsKICAgZWxzZSBpZiAoc2VjdDFfYWRkciA+IHNlY3QyX2Fk ZHIpCi0gICAgewotICAgICAgZ2RiX2Fzc2VydCAoc2VjdDFfYWRkciA+PSBv Ympfc2VjdGlvbl9lbmRhZGRyIChzZWN0MikpOwotICAgICAgcmV0dXJuIDE7 Ci0gICAgfQorICAgIHJldHVybiAxOworICBlbHNlCisgICB7CisgICAgIC8q IFNlY3Rpb25zIGFyZSBhdCB0aGUgc2FtZSBhZGRyZXNzLiAgVGhpcyBjb3Vs ZCBoYXBwZW4gaWYKKwlBKSB3ZSBoYXZlIGFuIG9iamZpbGUgYW5kIGEgc2Vw YXJhdGUgZGVidWdpbmZvLgorCUIpIHdlIGFyZSBjb25mdXNlZCwgYW5kIGhh dmUgYWRkZWQgc2VjdGlvbnMgd2l0aG91dCBwcm9wZXIgcmVsb2NhdGlvbiwK KwlvciBzb21ldGhpbmcgbGlrZSB0aGF0LiAqLworCisgICAgIGNvbnN0IHN0 cnVjdCBvYmpmaWxlICpjb25zdCBvYmpmaWxlMSA9IHNlY3QxLT5vYmpmaWxl OworICAgICBjb25zdCBzdHJ1Y3Qgb2JqZmlsZSAqY29uc3Qgb2JqZmlsZTIg PSBzZWN0Mi0+b2JqZmlsZTsKKworICAgICBpZiAob2JqZmlsZTEtPnNlcGFy YXRlX2RlYnVnX29iamZpbGUgPT0gb2JqZmlsZTIKKwkgfHwgb2JqZmlsZTIt PnNlcGFyYXRlX2RlYnVnX29iamZpbGUgPT0gb2JqZmlsZTEpCisgICAgICAg eworCSAvKiBDYXNlIEEuICBUaGUgb3JkZXJpbmcgZG9lc24ndCBtYXR0ZXI6 IHNlcGFyYXRlIGRlYnVnaW5mbyBmaWxlcworCSAgICB3aWxsIGJlIGZpbHRl cmVkIG91dCBsYXRlci4gICovCisKKwkgcmV0dXJuIDA7CisgICAgICAgfQor CisgICAgIC8qIENhc2UgQi4gIE1haW50YWluIHN0YWJsZSBzb3J0IG9yZGVy LCBzbyBidWdzIGluIEdEQiBhcmUgZWFzaWVyIHRvCisJdHJpYWdlLiAgVGhp cyBzZWN0aW9uIGNvdWxkIGJlIHNsb3cgKHNpbmNlIHdlIGl0ZXJhdGUgb3Zl ciBhbGwKKwlvYmpmaWxlcyBpbiBlYWNoIGNhbGwgdG8gcXNvcnRfY21wKSwg YnV0IHRoaXMgc2hvdWxkbid0IGhhcHBlbgorCXZlcnkgb2Z0ZW4gKEdEQiBp cyBhbHJlYWR5IGluIGEgY29uZnVzZWQgc3RhdGU7IG9uZSBob3BlcyB0aGlz CisJZG9lc24ndCBoYXBwZW4gYXQgYWxsKS4gIElmIHlvdSBkaXNjb3ZlciB0 aGF0IHNpZ25pZmljYW50IHRpbWUgaXMKKwlzcGVudCBpbiB0aGUgbG9vcHMg YmVsb3csIGRvICdzZXQgY29tcGxhaW50cyAxMDAnIGFuZCBleGFtaW5lIHRo ZQorCXJlc3VsdGluZyBjb21wbGFpbnRzLiAgKi8KKworICAgICBpZiAob2Jq ZmlsZTEgPT0gb2JqZmlsZTIpCisgICAgICAgeworCSAvKiBCb3RoIHNlY3Rp b25zIGNhbWUgZnJvbSB0aGUgc2FtZSBvYmpmaWxlLiAgV2UgYXJlIHJlYWxs eSBjb25mdXNlZC4KKwkgICAgU29ydCBvbiBzZXF1ZW5jZSBvcmRlciBvZiBz ZWN0aW9ucyB3aXRoaW4gdGhlIG9iamZpbGUuICAqLworCisJIGNvbnN0IHN0 cnVjdCBvYmpfc2VjdGlvbiAqb3NlY3Q7CisKKwkgQUxMX09CSkZJTEVfT1NF Q1RJT05TIChvYmpmaWxlMSwgb3NlY3QpCisJICAgaWYgKG9zZWN0ID09IHNl Y3QxKQorCSAgICAgcmV0dXJuIC0xOworCSAgIGVsc2UgaWYgKG9zZWN0ID09 IHNlY3QyKQorCSAgICAgcmV0dXJuIDE7CisKKwkgLyogV2Ugc2hvdWxkIGhh dmUgZm91bmQgb25lIG9mIHRoZSBzZWN0aW9ucyBiZWZvcmUgZ2V0dGluZyBo ZXJlLiAgKi8KKwkgZ2RiX2Fzc2VydCAoMCk7CisgICAgICAgfQorICAgICBl bHNlCisgICAgICAgeworCSAvKiBTb3J0IG9uIHNlcXVlbmNlIG51bWJlciBv ZiB0aGUgb2JqZmlsZSBpbiB0aGUgY2hhaW4uICAqLworCisJIGNvbnN0IHN0 cnVjdCBvYmpmaWxlICpvYmpmaWxlOworCisJIEFMTF9PQkpGSUxFUyAob2Jq ZmlsZSkKKwkgICBpZiAob2JqZmlsZSA9PSBvYmpmaWxlMSkKKwkgICAgIHJl dHVybiAtMTsKKwkgICBlbHNlIGlmIChvYmpmaWxlID09IG9iamZpbGUyKQor CSAgICAgcmV0dXJuIDE7CisKKwkgLyogV2Ugc2hvdWxkIGhhdmUgZm91bmQg b25lIG9mIHRoZSBvYmpmaWxlcyBiZWZvcmUgZ2V0dGluZyBoZXJlLiAgKi8K KwkgZ2RiX2Fzc2VydCAoMCk7CisgICAgICAgfQorCisgICB9CiAKKyAgLyog VW5yZWFjaGFibGUuICAqLworICBnZGJfYXNzZXJ0ICgwKTsKICAgcmV0dXJu IDA7CiB9CiAKQEAgLTgzNSw2OSArODkyLDE3NSBAQCBwcmVmZXJyZWRfb2Jq X3NlY3Rpb24gKHN0cnVjdCBvYmpfc2VjdGlvCiAgIHJldHVybiBiOwogfQog Ci0vKiBVcGRhdGUgUE1BUCwgUE1BUF9TSVpFIHdpdGggbm9uLVRMUyBzZWN0 aW9ucyBmcm9tIGFsbCBvYmpmaWxlcy4gICovCisvKiBSZXR1cm4gMSBpZiBT RUNUSU9OIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBzZWN0aW9uIG1h cC4KKyAgIFdlIHdhbnQgdG8gaW5zZXJ0IG9ubHkgbm9uLW92ZXJsYXkgYW5k IG5vbi1UTFMgc2VjdGlvbi4gICovCiAKLXN0YXRpYyB2b2lkCi11cGRhdGVf c2VjdGlvbl9tYXAgKHN0cnVjdCBvYmpfc2VjdGlvbiAqKipwbWFwLCBpbnQg KnBtYXBfc2l6ZSkKK3N0YXRpYyBpbnQKK2luc2VydF9zZWN0aW9uX3AgKGNv bnN0IHN0cnVjdCBiZmQgKmFiZmQsCisJCSAgY29uc3Qgc3RydWN0IGJmZF9z ZWN0aW9uICpzZWN0aW9uKQogewotICBpbnQgbWFwX3NpemUsIGksIGo7Ci0g IHN0cnVjdCBvYmpfc2VjdGlvbiAqcywgKiptYXA7Ci0gIHN0cnVjdCBvYmpm aWxlICpvYmpmaWxlOworICBjb25zdCBiZmRfdm1hIGxtYSA9IGJmZF9zZWN0 aW9uX2xtYSAoYWJmZCwgc2VjdGlvbik7CiAKLSAgZ2RiX2Fzc2VydCAob2Jq ZmlsZXNfY2hhbmdlZF9wICE9IDApOworICBpZiAobG1hICE9IDAgJiYgbG1h ICE9IGJmZF9zZWN0aW9uX3ZtYSAoYWJmZCwgc2VjdGlvbikKKyAgICAgICYm IChiZmRfZ2V0X2ZpbGVfZmxhZ3MgKGFiZmQpICYgQkZEX0lOX01FTU9SWSkg PT0gMCkKKyAgICAvKiBUaGlzIGlzIGFuIG92ZXJsYXkgc2VjdGlvbi4gIElO X01FTU9SWSBjaGVjayBpcyBuZWVkZWQgdG8gYXZvaWQKKyAgICAgICBkaXNj YXJkaW5nIHNlY3Rpb25zIGZyb20gdGhlICJzeXN0ZW0gc3VwcGxpZWQgRFNP IiAoYWthIHZkc28pCisgICAgICAgb24gc29tZSBMaW51eCBzeXN0ZW1zIChl LmcuIEZlZG9yYSAxMSkuICAqLworICAgIHJldHVybiAwOworICBpZiAoKGJm ZF9nZXRfc2VjdGlvbl9mbGFncyAoYWJmZCwgc2VjdGlvbikgJiBTRUNfVEhS RUFEX0xPQ0FMKSAhPSAwKQorICAgIC8qIFRoaXMgaXMgYSBUTFMgc2VjdGlv bi4gICovCisgICAgcmV0dXJuIDA7CiAKLSAgbWFwID0gKnBtYXA7Ci0gIHhm cmVlIChtYXApOworICByZXR1cm4gMTsKK30KIAotI2RlZmluZSBpbnNlcnRf cChvYmpmLCBzZWMpIFwKLSAgKChiZmRfZ2V0X3NlY3Rpb25fZmxhZ3MgKChv YmpmKS0+b2JmZCwgKHNlYyktPnRoZV9iZmRfc2VjdGlvbikgXAotICAgICYg U0VDX1RIUkVBRF9MT0NBTCkgPT0gMCkKKy8qIEZpbHRlciBvdXQgb3Zlcmxh cHBpbmcgc2VjdGlvbnMgd2hlcmUgb25lIHNlY3Rpb24gY2FtZSBmcm9tIHRo ZSByZWFsCisgICBvYmpmaWxlLCBhbmQgdGhlIG90aGVyIGZyb20gYSBzZXBh cmF0ZSBkZWJ1Z2luZm8gZmlsZS4KKyAgIFJldHVybiB0aGUgc2l6ZSBvZiB0 YWJsZSBhZnRlciByZWR1bmRhbnQgc2VjdGlvbnMgaGF2ZSBiZWVuIGVsaW1p bmF0ZWQuICAqLwogCi0gIG1hcF9zaXplID0gMDsKLSAgQUxMX09CSlNFQ1RJ T05TIChvYmpmaWxlLCBzKQotICAgIGlmIChpbnNlcnRfcCAob2JqZmlsZSwg cykpCi0gICAgICBtYXBfc2l6ZSArPSAxOworc3RhdGljIGludAorZmlsdGVy X2RlYnVnaW5mb19zZWN0aW9ucyAoc3RydWN0IG9ial9zZWN0aW9uICoqbWFw LCBpbnQgbWFwX3NpemUpCit7CisgIGludCBpLCBqOworCisgIGZvciAoaSA9 IDAsIGogPSAwOyBpIDwgbWFwX3NpemUgLSAxOyBpKyspCisgICAgeworICAg ICAgc3RydWN0IG9ial9zZWN0aW9uICpjb25zdCBzZWN0MSA9IG1hcFtpXTsK KyAgICAgIHN0cnVjdCBvYmpfc2VjdGlvbiAqY29uc3Qgc2VjdDIgPSBtYXBb aSArIDFdOworICAgICAgY29uc3Qgc3RydWN0IG9iamZpbGUgKmNvbnN0IG9i amZpbGUxID0gc2VjdDEtPm9iamZpbGU7CisgICAgICBjb25zdCBzdHJ1Y3Qg b2JqZmlsZSAqY29uc3Qgb2JqZmlsZTIgPSBzZWN0Mi0+b2JqZmlsZTsKKyAg ICAgIGNvbnN0IENPUkVfQUREUiBzZWN0MV9hZGRyID0gb2JqX3NlY3Rpb25f YWRkciAoc2VjdDEpOworICAgICAgY29uc3QgQ09SRV9BRERSIHNlY3QyX2Fk ZHIgPSBvYmpfc2VjdGlvbl9hZGRyIChzZWN0Mik7CisKKyAgICAgIGlmIChz ZWN0MV9hZGRyID09IHNlY3QyX2FkZHIKKwkgICYmIChvYmpmaWxlMS0+c2Vw YXJhdGVfZGVidWdfb2JqZmlsZSA9PSBvYmpmaWxlMgorCSAgICAgIHx8IG9i amZpbGUyLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlID09IG9iamZpbGUxKSkK Kwl7CisJICBtYXBbaisrXSA9IHByZWZlcnJlZF9vYmpfc2VjdGlvbiAoc2Vj dDEsIHNlY3QyKTsKKwkgICsraTsKKwl9CisgICAgICBlbHNlCisJbWFwW2or K10gPSBzZWN0MTsKKyAgICB9CiAKLSAgbWFwID0geG1hbGxvYyAobWFwX3Np emUgKiBzaXplb2YgKCptYXApKTsKKyAgaWYgKGkgPCBtYXBfc2l6ZSkKKyAg ICB7CisgICAgICBnZGJfYXNzZXJ0IChpID09IG1hcF9zaXplIC0gMSk7Cisg ICAgICBtYXBbaisrXSA9IG1hcFtpXTsKKyAgICB9CiAKLSAgaSA9IDA7Ci0g IEFMTF9PQkpTRUNUSU9OUyAob2JqZmlsZSwgcykKLSAgICBpZiAoaW5zZXJ0 X3AgKG9iamZpbGUsIHMpKQotICAgICAgbWFwW2krK10gPSBzOworICAvKiBU aGUgbWFwIHNob3VsZCBub3QgaGF2ZSBzaHJ1bmsgdG8gbGVzcyB0aGFuIGhh bGYgdGhlIG9yaWdpbmFsIHNpemUuICAqLworICBnZGJfYXNzZXJ0IChtYXBf c2l6ZSAvIDIgPD0gaik7CiAKLSN1bmRlZiBpbnNlcnRfcAorICByZXR1cm4g ajsKK30KIAotICBxc29ydCAobWFwLCBtYXBfc2l6ZSwgc2l6ZW9mICgqbWFw KSwgcXNvcnRfY21wKTsKKy8qIEZpbHRlciBvdXQgb3ZlcmxhcHBpbmcgc2Vj dGlvbnMsIGlzc3VpbmcgYSB3YXJuaW5nIGlmIGFueSBhcmUgZm91bmQuCisg ICBPdmVybGFwcGluZyBzZWN0aW9ucyBjb3VsZCByZWFsbHkgYmUgb3Zlcmxh eSBzZWN0aW9ucyB3aGljaCB3ZSBkaWRuJ3QKKyAgIGNsYXNzaWZ5IGFzIHN1 Y2ggaW4gaW5zZXJ0X3NlY3Rpb25fcCwgb3Igd2UgY291bGQgYmUgZGVhbGlu ZyB3aXRoIGEKKyAgIGNvcnJ1cHQgYmluYXJ5LiAgKi8KIAotICAvKiBXaXRo IHNlcGFyYXRlIGRlYnVnaW5mbyBmaWxlcywgd2UgbWF5IGhhdmUgdXAgdG8g dHdvIChhbG1vc3QpCi0gICAgIGlkZW50aWNhbCBjb3BpZXMgb2Ygc29tZSBv Ympfc2VjdGlvbnMgaW4gdGhlIG1hcC4KLSAgICAgRmlsdGVyIG91dCBkdXBs aWNhdGVzLiAgKi8KLSAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBtYXBfc2l6 ZTsgKytpKQorc3RhdGljIGludAorZmlsdGVyX292ZXJsYXBwaW5nX3NlY3Rp b25zIChzdHJ1Y3Qgb2JqX3NlY3Rpb24gKiptYXAsIGludCBtYXBfc2l6ZSkK K3sKKyAgaW50IGksIGo7CisKKyAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBt YXBfc2l6ZSAtIDE7ICkKICAgICB7Ci0gICAgICBzdHJ1Y3Qgb2JqX3NlY3Rp b24gKnNlY3QxID0gbWFwW2ldOwotICAgICAgc3RydWN0IG9ial9zZWN0aW9u ICpzZWN0MiA9IChpICsgMSA8IG1hcF9zaXplKSA/IG1hcFtpICsgMV0gOiBO VUxMOworICAgICAgaW50IGs7CiAKLSAgICAgIGlmIChzZWN0MiA9PSBOVUxM Ci0JICB8fCBvYmpfc2VjdGlvbl9hZGRyIChzZWN0MSkgIT0gb2JqX3NlY3Rp b25fYWRkciAoc2VjdDIpKQotCW1hcFtqKytdID0gc2VjdDE7Ci0gICAgICBl bHNlCisgICAgICBtYXBbaisrXSA9IG1hcFtpXTsKKyAgICAgIGZvciAoayA9 IGkgKyAxOyBrIDwgbWFwX3NpemU7IGsrKykKIAl7Ci0JICBtYXBbaisrXSA9 IHByZWZlcnJlZF9vYmpfc2VjdGlvbiAoc2VjdDEsIHNlY3QyKTsKLQkgICsr aTsKKwkgIHN0cnVjdCBvYmpfc2VjdGlvbiAqY29uc3Qgc2VjdDEgPSBtYXBb aV07CisJICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKmNvbnN0IHNlY3QyID0gbWFw W2tdOworCSAgY29uc3QgQ09SRV9BRERSIHNlY3QxX2FkZHIgPSBvYmpfc2Vj dGlvbl9hZGRyIChzZWN0MSk7CisJICBjb25zdCBDT1JFX0FERFIgc2VjdDJf YWRkciA9IG9ial9zZWN0aW9uX2FkZHIgKHNlY3QyKTsKKwkgIGNvbnN0IENP UkVfQUREUiBzZWN0MV9lbmRhZGRyID0gb2JqX3NlY3Rpb25fZW5kYWRkciAo c2VjdDEpOworCisJICBnZGJfYXNzZXJ0IChzZWN0MV9hZGRyIDw9IHNlY3Qy X2FkZHIpOworCisJICBpZiAoc2VjdDFfZW5kYWRkciA8PSBzZWN0Ml9hZGRy KQorCSAgICBicmVhazsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFdl IGhhdmUgYW4gb3ZlcmxhcC4gIFJlcG9ydCBpdC4gICovCisKKwkgICAgICBz dHJ1Y3Qgb2JqZmlsZSAqY29uc3Qgb2JqZjEgPSBzZWN0MS0+b2JqZmlsZTsK KwkgICAgICBzdHJ1Y3Qgb2JqZmlsZSAqY29uc3Qgb2JqZjIgPSBzZWN0Mi0+ b2JqZmlsZTsKKworCSAgICAgIGNvbnN0IHN0cnVjdCBiZmQgKmNvbnN0IGFi ZmQxID0gb2JqZjEtPm9iZmQ7CisJICAgICAgY29uc3Qgc3RydWN0IGJmZCAq Y29uc3QgYWJmZDIgPSBvYmpmMi0+b2JmZDsKKworCSAgICAgIGNvbnN0IHN0 cnVjdCBiZmRfc2VjdGlvbiAqY29uc3QgYmZkczEgPSBzZWN0MS0+dGhlX2Jm ZF9zZWN0aW9uOworCSAgICAgIGNvbnN0IHN0cnVjdCBiZmRfc2VjdGlvbiAq Y29uc3QgYmZkczIgPSBzZWN0Mi0+dGhlX2JmZF9zZWN0aW9uOworCisJICAg ICAgY29uc3QgQ09SRV9BRERSIHNlY3QyX2VuZGFkZHIgPSBvYmpfc2VjdGlv bl9lbmRhZGRyIChzZWN0Mik7CisKKwkgICAgICBzdHJ1Y3QgZ2RiYXJjaCAq Y29uc3QgZ2RiYXJjaCA9IGdldF9vYmpmaWxlX2FyY2ggKG9iamYxKTsKKwor CSAgICAgIGNvbXBsYWludCAoJnN5bWZpbGVfY29tcGxhaW50cywKKwkJCSBf KCJ1bmV4cGVjdGVkIG92ZXJsYXAgYmV0d2VlbjpcbiIKKwkJCSAgICIgKEEp IHNlY3Rpb24gYCVzJyBmcm9tIGAlcycgWyVzLCAlcylcbiIKKwkJCSAgICIg KEIpIHNlY3Rpb24gYCVzJyBmcm9tIGAlcycgWyVzLCAlcykuXG4iCisJCQkg ICAiV2lsbCBpZ25vcmUgc2VjdGlvbiBCIiksCisJCQkgYmZkX3NlY3Rpb25f bmFtZSAoYWJmZDEsIGJmZHMxKSwgb2JqZjEtPm5hbWUsCisJCQkgcGFkZHJl c3MgKGdkYmFyY2gsIHNlY3QxX2FkZHIpLAorCQkJIHBhZGRyZXNzIChnZGJh cmNoLCBzZWN0MV9lbmRhZGRyKSwKKwkJCSBiZmRfc2VjdGlvbl9uYW1lIChh YmZkMiwgYmZkczIpLCBvYmpmMi0+bmFtZSwKKwkJCSBwYWRkcmVzcyAoZ2Ri YXJjaCwgc2VjdDJfYWRkciksCisJCQkgcGFkZHJlc3MgKGdkYmFyY2gsIHNl Y3QyX2VuZGFkZHIpKTsKKwkgICAgfQogCX0KKyAgICAgIGkgPSBrOwogICAg IH0KIAotICBpZiAoaiA8IG1hcF9zaXplKQorICBpZiAoaSA8IG1hcF9zaXpl KQogICAgIHsKLSAgICAgIC8qIFNvbWUgZHVwbGljYXRlcyB3ZXJlIGVsaW1p bmF0ZWQuCi0JIFRoZSBuZXcgc2l6ZSBzaG91bGRuJ3QgYmUgbGVzcyB0aGFu IGhhbGYgb2YgdGhlIG9yaWdpbmFsLiAqLwotICAgICAgZ2RiX2Fzc2VydCAo bWFwX3NpemUgLyAyIDw9IGopOwotICAgICAgbWFwX3NpemUgPSBqOwotCi0g ICAgICBtYXAgPSB4cmVhbGxvYyAobWFwLCBtYXBfc2l6ZSAqIHNpemVvZiAo Km1hcCkpOyAgLyogVHJpbSBleGNlc3Mgc3BhY2UuICAqLworICAgICAgZ2Ri X2Fzc2VydCAoaSA9PSBtYXBfc2l6ZSAtIDEpOworICAgICAgbWFwW2orK10g PSBtYXBbaV07CiAgICAgfQorCisgIHJldHVybiBqOworfQorCisKKy8qIFVw ZGF0ZSBQTUFQLCBQTUFQX1NJWkUgd2l0aCBzZWN0aW9ucyBmcm9tIGFsbCBv YmpmaWxlcywgZXhjbHVkaW5nIGFueQorICAgVExTLCBvdmVybGF5IGFuZCBv dmVybGFwcGluZyBzZWN0aW9ucy4gICovCisKK3N0YXRpYyB2b2lkCit1cGRh dGVfc2VjdGlvbl9tYXAgKHN0cnVjdCBvYmpfc2VjdGlvbiAqKipwbWFwLCBp bnQgKnBtYXBfc2l6ZSkKK3sKKyAgaW50IGFsbG9jX3NpemUsIG1hcF9zaXpl LCBpOworICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKnMsICoqbWFwOworICBzdHJ1 Y3Qgb2JqZmlsZSAqb2JqZmlsZTsKKworICBnZGJfYXNzZXJ0IChvYmpmaWxl c19jaGFuZ2VkX3AgIT0gMCk7CisKKyAgbWFwID0gKnBtYXA7CisgIHhmcmVl IChtYXApOworCisgIGFsbG9jX3NpemUgPSAwOworICBBTExfT0JKU0VDVElP TlMgKG9iamZpbGUsIHMpCisgICAgaWYgKGluc2VydF9zZWN0aW9uX3AgKG9i amZpbGUtPm9iZmQsIHMtPnRoZV9iZmRfc2VjdGlvbikpCisgICAgICBhbGxv Y19zaXplICs9IDE7CisKKyAgbWFwID0geG1hbGxvYyAoYWxsb2Nfc2l6ZSAq IHNpemVvZiAoKm1hcCkpOworCisgIGkgPSAwOworICBBTExfT0JKU0VDVElP TlMgKG9iamZpbGUsIHMpCisgICAgaWYgKGluc2VydF9zZWN0aW9uX3AgKG9i amZpbGUtPm9iZmQsIHMtPnRoZV9iZmRfc2VjdGlvbikpCisgICAgICBtYXBb aSsrXSA9IHM7CisKKyAgcXNvcnQgKG1hcCwgYWxsb2Nfc2l6ZSwgc2l6ZW9m ICgqbWFwKSwgcXNvcnRfY21wKTsKKyAgbWFwX3NpemUgPSBmaWx0ZXJfZGVi dWdpbmZvX3NlY3Rpb25zKG1hcCwgYWxsb2Nfc2l6ZSk7CisgIG1hcF9zaXpl ID0gZmlsdGVyX292ZXJsYXBwaW5nX3NlY3Rpb25zKG1hcCwgbWFwX3NpemUp OworCisgIGlmIChtYXBfc2l6ZSA8IGFsbG9jX3NpemUpCisgICAgLyogU29t ZSBzZWN0aW9ucyB3ZXJlIGVsaW1pbmF0ZWQuICBUcmltIGV4Y2VzcyBzcGFj ZS4gICovCisgICAgbWFwID0geHJlYWxsb2MgKG1hcCwgbWFwX3NpemUgKiBz aXplb2YgKCptYXApKTsKICAgZWxzZQotICAgIGdkYl9hc3NlcnQgKGogPT0g bWFwX3NpemUpOworICAgIGdkYl9hc3NlcnQgKGFsbG9jX3NpemUgPT0gbWFw X3NpemUpOwogCiAgICpwbWFwID0gbWFwOwogICAqcG1hcF9zaXplID0gbWFw X3NpemU7Cg== --001636eee4914f88f304737c7fb3--