From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29155 invoked by alias); 10 Sep 2009 17:36:54 -0000 Received: (qmail 29139 invoked by uid 22791); 10 Sep 2009 17:36:51 -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.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Sep 2009 17:36:45 +0000 Received: from wpaz37.hot.corp.google.com (wpaz37.hot.corp.google.com [172.24.198.101]) by smtp-out.google.com with ESMTP id n8AHafCn031466 for ; Thu, 10 Sep 2009 18:36:42 +0100 Received: from yxe16 (yxe16.prod.google.com [10.190.2.16]) by wpaz37.hot.corp.google.com with ESMTP id n8AHadFj011578 for ; Thu, 10 Sep 2009 10:36:39 -0700 Received: by yxe16 with SMTP id 16so397118yxe.27 for ; Thu, 10 Sep 2009 10:36:39 -0700 (PDT) MIME-Version: 1.0 Received: by 10.101.92.11 with SMTP id u11mr1910977anl.126.1252604199000; Thu, 10 Sep 2009 10:36:39 -0700 (PDT) In-Reply-To: <20090909055824.GB11738@adacore.com> References: <8ac60eac0908201340k6b759eb5o9bb73c8f473d8785@mail.gmail.com> <200908211130.n7LBUCJc011108@d12av02.megacenter.de.ibm.com> <8ac60eac0908231548x135edf2doa04fa59a49455bcd@mail.gmail.com> <8ac60eac0908260020l4200cf84v2686a76b5858d13@mail.gmail.com> <20090909055824.GB11738@adacore.com> Date: Thu, 10 Sep 2009 17:36:00 -0000 Message-ID: <8ac60eac0909101036r101263e7qd11c1a69f13008f1@mail.gmail.com> Subject: Re: [patch] Speed up find_pc_section From: Paul Pluzhnikov To: Joel Brobecker Cc: Ulrich Weigand , Ulrich Weigand , gdb-patches ml , Tom Tromey , Jan Kratochvil Content-Type: multipart/mixed; boundary=001636ed6bf9535b3b04733ca469 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/msg00275.txt.bz2 --001636ed6bf9535b3b04733ca469 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 5427 On Tue, Sep 8, 2009 at 10:58 PM, Joel Brobecker wrote: >> +/* Return 1 if SECTION should be inserted into the section map. >> + We want to insert only non-overlay and non-TLS section. */ > > Can you explain what we do not want to add TLS sections? Is that > just an optimization (code addresses should never point to TLS)? TLS sections for different objfiles do in fact overlap (and would trigger a complaint). The loader relocates them (separately for each thread and each objfile), so their "on disk" VMA has nothing to do with their final location in memory. >> +/* Filter out overlapping sections where one section came from the real >> + objfile, and the other from a separate debuginfo file. >> + Return the size of table after redundant sections have been eliminated. */ >> + if (sect1_addr == sect2_addr >> + && (objfile1->separate_debug_objfile == objfile2 >> + || objfile2->separate_debug_objfile == objfile1)) > > Looks like "overlapping" above also means start at the same address? > Is that normal? Or good enough for our purpose? The separate debuginfo objfile is essentially just a copy of the "primary" objfile, but with '.text' and '.data' removed (to conserve space). You build a file with debug info, then split it into two: from the "primary" file you strip debug info (not needed for execution). From the "secondary" file you strip the code/data (not needed for debugging). [The separate debuginfo file is thus fundamentally different from the "bunch of .o files with debug info on MacOS", and extending the separate debuginfo to cover MacOS situation (mentioned elsewhere as a possible solution) is (IMHO) the wrong approach.] Given above, one would expect the section table for the "primary" and "secondary" files to be identical, and for every section in the "primary" to be exactly matched by a corresponding section in the "secondary". This was in fact my expectation, implemented in gdb-find_pc_section-20090722-4.txt (and earlier versions) in this thread. This expectation proved wrong: on Fedora 11 with prelinking, .rel.dyn may change type (and therefore size), triggering an assert for Tom Tromey: http://sourceware.org/ml/gdb-patches/2009-08/msg00044.html analyzed here: http://sourceware.org/ml/gdb-patches/2009-08/msg00120.html and fixed here: http://sourceware.org/ml/gdb-patches/2009-08/msg00130.html Therefore, we now check just the start of the section (should be identical) but not the size (could be different under rare conditions). >> +/* Filter out overlapping sections, issuing a warning if any are found. >> + Overlapping sections could really be overlay sections which we didn't >> + classify as such in insert_section_p, or we could be dealing with a >> + corrupt binary. */ > > I think we should also mention the MacOS port where we load all sections > of all .o files instead of just the debugging info. > It looks like a design flaw in the MacOS port, but it was really a shortcut in getting > things to work (aka a hack). I believe Tristan is planning on fixing > this in the relatively near future, but in the meantime, it might be > a useful comment. I thought this patch would also fix MacOS, by filtering out sections from .o because they would satisfy 'vma != lma' condition. I was wrong (I don't even understand now why I thought that) -- they don't and this patch doesn't fix MacOS. A separate patch, something like http://sourceware.org/ml/gdb-patches/2009-08/msg00195.html is needed. Given this, I don't think I should mention MacOS here. >> + warning (_("Unexpected overlap between " >> + "section `%s' from `%s' [%s, %s) and " >> + "section `%s' from `%s' [%s, %s)"), >> + bfd_section_name (abfd1, bfds1), objf1->name, >> + paddress (gdbarch, sect1_addr), >> + paddress (gdbarch, sect1_endaddr), >> + bfd_section_name (abfd2, bfds2), objf2->name, >> + paddress (gdbarch, sect2_addr), >> + paddress (gdbarch, sect2_endaddr)); > > Let's please use a complaint rather than a warning. As explained in > one of my other messages, the warning causes too much output on MacOS. Yes: until MacOS is really fixed, you'll see a ton of warnings. They are indication of a real problem. > But I also see, now, after reading Ulrich's messages, that he suggested > the same thing. When I was reading his message, I didn't realize that "complaint" was a GDB function (I've never seen it before). I am not sure calling complaint rather than warning is really the right thing here: complaints are silent unless the user explicitly turns them on, and overlapping sections indicate a real problem of some sort. >> /* Update PMAP, PMAP_SIZE with non-TLS sections from all objfiles. */ > > We should update the comment to explain that overlay sections are > also eliminated, as well as overlapping sections. Done in the attached patch. Thanks, -- Paul Pluzhnikov 2009-09-10 Paul Pluzhnikov * objfiles.c (qsort_cmp): Remove asserts. (insert_section_p, filter_debuginfo_sections): New function. (filter_overlapping_sections): Likewise. (update_section_map): Adjust. --001636ed6bf9535b3b04733ca469 Content-Type: text/plain; charset=US-ASCII; name="gdb-find_pc_section-20090910.txt" Content-Disposition: attachment; filename="gdb-find_pc_section-20090910.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzfryr010 Content-length: 9464 SW5kZXg6IG9iamZpbGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9vYmpmaWxlcy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjk0CmRpZmYgLXUgLXAgLXUgLXIxLjk0IG9iamZpbGVz LmMKLS0tIG9iamZpbGVzLmMJMjcgQXVnIDIwMDkgMjE6NTY6MzggLTAwMDAJ MS45NAorKysgb2JqZmlsZXMuYwkxMCBTZXAgMjAwOSAxNzoxOTo0MiAtMDAw MApAQCAtODAyLDE1ICs4MDIsOSBAQCBxc29ydF9jbXAgKGNvbnN0IHZvaWQg KmEsIGNvbnN0IHZvaWQgKmIpCiAgIGNvbnN0IENPUkVfQUREUiBzZWN0Ml9h ZGRyID0gb2JqX3NlY3Rpb25fYWRkciAoc2VjdDIpOwogCiAgIGlmIChzZWN0 MV9hZGRyIDwgc2VjdDJfYWRkcikKLSAgICB7Ci0gICAgICBnZGJfYXNzZXJ0 IChvYmpfc2VjdGlvbl9lbmRhZGRyIChzZWN0MSkgPD0gc2VjdDJfYWRkcik7 Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHJldHVybiAtMTsKICAg ZWxzZSBpZiAoc2VjdDFfYWRkciA+IHNlY3QyX2FkZHIpCi0gICAgewotICAg ICAgZ2RiX2Fzc2VydCAoc2VjdDFfYWRkciA+PSBvYmpfc2VjdGlvbl9lbmRh ZGRyIChzZWN0MikpOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQorICAgIHJl dHVybiAxOwogCiAgIHJldHVybiAwOwogfQpAQCAtODM1LDEyICs4MjksMTM0 IEBAIHByZWZlcnJlZF9vYmpfc2VjdGlvbiAoc3RydWN0IG9ial9zZWN0aW8K ICAgcmV0dXJuIGI7CiB9CiAKLS8qIFVwZGF0ZSBQTUFQLCBQTUFQX1NJWkUg d2l0aCBub24tVExTIHNlY3Rpb25zIGZyb20gYWxsIG9iamZpbGVzLiAgKi8K Ky8qIFJldHVybiAxIGlmIFNFQ1RJT04gc2hvdWxkIGJlIGluc2VydGVkIGlu dG8gdGhlIHNlY3Rpb24gbWFwLgorICAgV2Ugd2FudCB0byBpbnNlcnQgb25s eSBub24tb3ZlcmxheSBhbmQgbm9uLVRMUyBzZWN0aW9uLiAgKi8KKworc3Rh dGljIGludAoraW5zZXJ0X3NlY3Rpb25fcCAoY29uc3Qgc3RydWN0IGJmZCAq YWJmZCwKKwkJICBjb25zdCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlY3Rpb24p Cit7CisgIGNvbnN0IGJmZF92bWEgbG1hID0gYmZkX3NlY3Rpb25fbG1hIChh YmZkLCBzZWN0aW9uKTsKKworICBpZiAobG1hICE9IDAgJiYgbG1hICE9IGJm ZF9zZWN0aW9uX3ZtYSAoYWJmZCwgc2VjdGlvbikKKyAgICAgICYmIChiZmRf Z2V0X2ZpbGVfZmxhZ3MgKGFiZmQpICYgQkZEX0lOX01FTU9SWSkgPT0gMCkK KyAgICAvKiBUaGlzIGlzIGFuIG92ZXJsYXkgc2VjdGlvbi4gIElOX01FTU9S WSBjaGVjayBpcyBuZWVkZWQgdG8gYXZvaWQKKyAgICAgICBkaXNjYXJkaW5n IHNlY3Rpb25zIGZyb20gdGhlICJzeXN0ZW0gc3VwcGxpZWQgRFNPIiAoYWth IHZkc28pCisgICAgICAgb24gTGludXguICAqLworICAgIHJldHVybiAwOwor ICBpZiAoKGJmZF9nZXRfc2VjdGlvbl9mbGFncyAoYWJmZCwgc2VjdGlvbikg JiBTRUNfVEhSRUFEX0xPQ0FMKSAhPSAwKQorICAgIC8qIFRoaXMgaXMgYSBU TFMgc2VjdGlvbi4gICovCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7 Cit9CisKKy8qIEZpbHRlciBvdXQgb3ZlcmxhcHBpbmcgc2VjdGlvbnMgd2hl cmUgb25lIHNlY3Rpb24gY2FtZSBmcm9tIHRoZSByZWFsCisgICBvYmpmaWxl LCBhbmQgdGhlIG90aGVyIGZyb20gYSBzZXBhcmF0ZSBkZWJ1Z2luZm8gZmls ZS4KKyAgIFJldHVybiB0aGUgc2l6ZSBvZiB0YWJsZSBhZnRlciByZWR1bmRh bnQgc2VjdGlvbnMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuICAqLworCitzdGF0 aWMgaW50CitmaWx0ZXJfZGVidWdpbmZvX3NlY3Rpb25zIChzdHJ1Y3Qgb2Jq X3NlY3Rpb24gKiptYXAsIGludCBtYXBfc2l6ZSkKK3sKKyAgaW50IGksIGo7 CisKKyAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBtYXBfc2l6ZSAtIDE7IGkr KykKKyAgICB7CisgICAgICBzdHJ1Y3Qgb2JqX3NlY3Rpb24gKmNvbnN0IHNl Y3QxID0gbWFwW2ldOworICAgICAgc3RydWN0IG9ial9zZWN0aW9uICpjb25z dCBzZWN0MiA9IG1hcFtpICsgMV07CisgICAgICBjb25zdCBzdHJ1Y3Qgb2Jq ZmlsZSAqY29uc3Qgb2JqZmlsZTEgPSBzZWN0MS0+b2JqZmlsZTsKKyAgICAg IGNvbnN0IHN0cnVjdCBvYmpmaWxlICpjb25zdCBvYmpmaWxlMiA9IHNlY3Qy LT5vYmpmaWxlOworICAgICAgY29uc3QgQ09SRV9BRERSIHNlY3QxX2FkZHIg PSBvYmpfc2VjdGlvbl9hZGRyIChzZWN0MSk7CisgICAgICBjb25zdCBDT1JF X0FERFIgc2VjdDJfYWRkciA9IG9ial9zZWN0aW9uX2FkZHIgKHNlY3QyKTsK KworICAgICAgaWYgKHNlY3QxX2FkZHIgPT0gc2VjdDJfYWRkcgorCSAgJiYg KG9iamZpbGUxLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlID09IG9iamZpbGUy CisJICAgICAgfHwgb2JqZmlsZTItPnNlcGFyYXRlX2RlYnVnX29iamZpbGUg PT0gb2JqZmlsZTEpKQorCXsKKwkgIG1hcFtqKytdID0gcHJlZmVycmVkX29i al9zZWN0aW9uIChzZWN0MSwgc2VjdDIpOworCSAgKytpOworCX0KKyAgICAg IGVsc2UKKwltYXBbaisrXSA9IHNlY3QxOworICAgIH0KKworICBpZiAoaSA8 IG1hcF9zaXplKQorICAgIG1hcFtqKytdID0gbWFwW2ldOworCisgIC8qIFRo ZSBtYXAgc2hvdWxkIG5vdCBoYXZlIHNocnVuayB0byBsZXNzIHRoYW4gaGFs ZiB0aGUgb3JpZ2luYWwgc2l6ZS4gICovCisgIGdkYl9hc3NlcnQgKG1hcF9z aXplIC8gMiA8PSBqKTsKKworICByZXR1cm4gajsKK30KKworLyogRmlsdGVy IG91dCBvdmVybGFwcGluZyBzZWN0aW9ucywgaXNzdWluZyBhIHdhcm5pbmcg aWYgYW55IGFyZSBmb3VuZC4KKyAgIE92ZXJsYXBwaW5nIHNlY3Rpb25zIGNv dWxkIHJlYWxseSBiZSBvdmVybGF5IHNlY3Rpb25zIHdoaWNoIHdlIGRpZG4n dAorICAgY2xhc3NpZnkgYXMgc3VjaCBpbiBpbnNlcnRfc2VjdGlvbl9wLCBv ciB3ZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggYQorICAgY29ycnVwdCBiaW5h cnkuICAqLworCitzdGF0aWMgaW50CitmaWx0ZXJfb3ZlcmxhcHBpbmdfc2Vj dGlvbnMgKHN0cnVjdCBvYmpfc2VjdGlvbiAqKm1hcCwgaW50IG1hcF9zaXpl KQoreworICBpbnQgaSwgajsKKworICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8 IG1hcF9zaXplIC0gMTsgKQorICAgIHsKKyAgICAgIGludCBrOworCisgICAg ICBtYXBbaisrXSA9IG1hcFtpXTsKKyAgICAgIGZvciAoayA9IGkgKyAxOyBr IDwgbWFwX3NpemU7IGsrKykKKwl7CisJICBzdHJ1Y3Qgb2JqX3NlY3Rpb24g KmNvbnN0IHNlY3QxID0gbWFwW2ldOworCSAgc3RydWN0IG9ial9zZWN0aW9u ICpjb25zdCBzZWN0MiA9IG1hcFtrXTsKKwkgIGNvbnN0IENPUkVfQUREUiBz ZWN0MV9hZGRyID0gb2JqX3NlY3Rpb25fYWRkciAoc2VjdDEpOworCSAgY29u c3QgQ09SRV9BRERSIHNlY3QyX2FkZHIgPSBvYmpfc2VjdGlvbl9hZGRyIChz ZWN0Mik7CisJICBjb25zdCBDT1JFX0FERFIgc2VjdDFfZW5kYWRkciA9IG9i al9zZWN0aW9uX2VuZGFkZHIgKHNlY3QxKTsKKworCSAgZ2RiX2Fzc2VydCAo c2VjdDFfYWRkciA8PSBzZWN0Ml9hZGRyKTsKKworCSAgaWYgKHNlY3QxX2Vu ZGFkZHIgPD0gc2VjdDJfYWRkcikKKwkgICAgYnJlYWs7CisJICBlbHNlCisJ ICAgIHsKKwkgICAgICAvKiBXZSBoYXZlIGFuIG92ZXJsYXAuICBSZXBvcnQg aXQuICAqLworCisJICAgICAgc3RydWN0IG9iamZpbGUgKmNvbnN0IG9iamYx ID0gc2VjdDEtPm9iamZpbGU7CisJICAgICAgc3RydWN0IG9iamZpbGUgKmNv bnN0IG9iamYyID0gc2VjdDItPm9iamZpbGU7CisKKwkgICAgICBjb25zdCBz dHJ1Y3QgYmZkICpjb25zdCBhYmZkMSA9IG9iamYxLT5vYmZkOworCSAgICAg IGNvbnN0IHN0cnVjdCBiZmQgKmNvbnN0IGFiZmQyID0gb2JqZjItPm9iZmQ7 CisKKwkgICAgICBjb25zdCBzdHJ1Y3QgYmZkX3NlY3Rpb24gKmNvbnN0IGJm ZHMxID0gc2VjdDEtPnRoZV9iZmRfc2VjdGlvbjsKKwkgICAgICBjb25zdCBz dHJ1Y3QgYmZkX3NlY3Rpb24gKmNvbnN0IGJmZHMyID0gc2VjdDItPnRoZV9i ZmRfc2VjdGlvbjsKKworCSAgICAgIGNvbnN0IENPUkVfQUREUiBzZWN0Ml9l bmRhZGRyID0gb2JqX3NlY3Rpb25fZW5kYWRkciAoc2VjdDIpOworCisJICAg ICAgc3RydWN0IGdkYmFyY2ggKmNvbnN0IGdkYmFyY2ggPSBnZXRfb2JqZmls ZV9hcmNoIChvYmpmMSk7CisKKwkgICAgICB3YXJuaW5nIChfKCJVbmV4cGVj dGVkIG92ZXJsYXAgYmV0d2VlbiAiCisJCQkgInNlY3Rpb24gYCVzJyBmcm9t IGAlcycgWyVzLCAlcykgYW5kICIKKwkJCSAic2VjdGlvbiBgJXMnIGZyb20g YCVzJyBbJXMsICVzKSIpLAorCQkgICAgICAgYmZkX3NlY3Rpb25fbmFtZSAo YWJmZDEsIGJmZHMxKSwgb2JqZjEtPm5hbWUsCisJCSAgICAgICBwYWRkcmVz cyAoZ2RiYXJjaCwgc2VjdDFfYWRkciksCisJCSAgICAgICBwYWRkcmVzcyAo Z2RiYXJjaCwgc2VjdDFfZW5kYWRkciksCisJCSAgICAgICBiZmRfc2VjdGlv bl9uYW1lIChhYmZkMiwgYmZkczIpLCBvYmpmMi0+bmFtZSwKKwkJICAgICAg IHBhZGRyZXNzIChnZGJhcmNoLCBzZWN0Ml9hZGRyKSwKKwkJICAgICAgIHBh ZGRyZXNzIChnZGJhcmNoLCBzZWN0Ml9lbmRhZGRyKSk7CisJICAgIH0KKwl9 CisgICAgICBpID0gazsKKyAgICB9CisgIHJldHVybiBtYXBfc2l6ZTsKK30K KworCisvKiBVcGRhdGUgUE1BUCwgUE1BUF9TSVpFIHdpdGggc2VjdGlvbnMg ZnJvbSBhbGwgb2JqZmlsZXMsIGV4Y2x1ZGluZyBhbnkKKyAgIFRMUywgb3Zl cmxheSBhbmQgb3ZlcmxhcHBpbmcgc2VjdGlvbnMuICAqLwogCiBzdGF0aWMg dm9pZAogdXBkYXRlX3NlY3Rpb25fbWFwIChzdHJ1Y3Qgb2JqX3NlY3Rpb24g KioqcG1hcCwgaW50ICpwbWFwX3NpemUpCiB7Ci0gIGludCBtYXBfc2l6ZSwg aSwgajsKKyAgaW50IGFsbG9jX3NpemUsIG1hcF9zaXplLCBpOwogICBzdHJ1 Y3Qgb2JqX3NlY3Rpb24gKnMsICoqbWFwOwogICBzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZTsKIApAQCAtODQ5LDU1ICs5NjUsMjcgQEAgdXBkYXRlX3NlY3Rp b25fbWFwIChzdHJ1Y3Qgb2JqX3NlY3Rpb24gKgogICBtYXAgPSAqcG1hcDsK ICAgeGZyZWUgKG1hcCk7CiAKLSNkZWZpbmUgaW5zZXJ0X3Aob2JqZiwgc2Vj KSBcCi0gICgoYmZkX2dldF9zZWN0aW9uX2ZsYWdzICgob2JqZiktPm9iZmQs IChzZWMpLT50aGVfYmZkX3NlY3Rpb24pIFwKLSAgICAmIFNFQ19USFJFQURf TE9DQUwpID09IDApCi0KLSAgbWFwX3NpemUgPSAwOworICBhbGxvY19zaXpl ID0gMDsKICAgQUxMX09CSlNFQ1RJT05TIChvYmpmaWxlLCBzKQotICAgIGlm IChpbnNlcnRfcCAob2JqZmlsZSwgcykpCi0gICAgICBtYXBfc2l6ZSArPSAx OworICAgIGlmIChpbnNlcnRfc2VjdGlvbl9wIChvYmpmaWxlLT5vYmZkLCBz LT50aGVfYmZkX3NlY3Rpb24pKQorICAgICAgYWxsb2Nfc2l6ZSArPSAxOwog Ci0gIG1hcCA9IHhtYWxsb2MgKG1hcF9zaXplICogc2l6ZW9mICgqbWFwKSk7 CisgIG1hcCA9IHhtYWxsb2MgKGFsbG9jX3NpemUgKiBzaXplb2YgKCptYXAp KTsKIAogICBpID0gMDsKICAgQUxMX09CSlNFQ1RJT05TIChvYmpmaWxlLCBz KQotICAgIGlmIChpbnNlcnRfcCAob2JqZmlsZSwgcykpCisgICAgaWYgKGlu c2VydF9zZWN0aW9uX3AgKG9iamZpbGUtPm9iZmQsIHMtPnRoZV9iZmRfc2Vj dGlvbikpCiAgICAgICBtYXBbaSsrXSA9IHM7CiAKLSN1bmRlZiBpbnNlcnRf cAotCi0gIHFzb3J0IChtYXAsIG1hcF9zaXplLCBzaXplb2YgKCptYXApLCBx c29ydF9jbXApOwotCi0gIC8qIFdpdGggc2VwYXJhdGUgZGVidWdpbmZvIGZp bGVzLCB3ZSBtYXkgaGF2ZSB1cCB0byB0d28gKGFsbW9zdCkKLSAgICAgaWRl bnRpY2FsIGNvcGllcyBvZiBzb21lIG9ial9zZWN0aW9ucyBpbiB0aGUgbWFw LgotICAgICBGaWx0ZXIgb3V0IGR1cGxpY2F0ZXMuICAqLwotICBmb3IgKGkg PSAwLCBqID0gMDsgaSA8IG1hcF9zaXplOyArK2kpCi0gICAgewotICAgICAg c3RydWN0IG9ial9zZWN0aW9uICpzZWN0MSA9IG1hcFtpXTsKLSAgICAgIHN0 cnVjdCBvYmpfc2VjdGlvbiAqc2VjdDIgPSAoaSArIDEgPCBtYXBfc2l6ZSkg PyBtYXBbaSArIDFdIDogTlVMTDsKLQotICAgICAgaWYgKHNlY3QyID09IE5V TEwKLQkgIHx8IG9ial9zZWN0aW9uX2FkZHIgKHNlY3QxKSAhPSBvYmpfc2Vj dGlvbl9hZGRyIChzZWN0MikpCi0JbWFwW2orK10gPSBzZWN0MTsKLSAgICAg IGVsc2UKLQl7Ci0JICBtYXBbaisrXSA9IHByZWZlcnJlZF9vYmpfc2VjdGlv biAoc2VjdDEsIHNlY3QyKTsKLQkgICsraTsKLQl9Ci0gICAgfQotCi0gIGlm IChqIDwgbWFwX3NpemUpCi0gICAgewotICAgICAgLyogU29tZSBkdXBsaWNh dGVzIHdlcmUgZWxpbWluYXRlZC4KLQkgVGhlIG5ldyBzaXplIHNob3VsZG4n dCBiZSBsZXNzIHRoYW4gaGFsZiBvZiB0aGUgb3JpZ2luYWwuICovCi0gICAg ICBnZGJfYXNzZXJ0IChtYXBfc2l6ZSAvIDIgPD0gaik7Ci0gICAgICBtYXBf c2l6ZSA9IGo7Ci0KLSAgICAgIG1hcCA9IHhyZWFsbG9jIChtYXAsIG1hcF9z aXplICogc2l6ZW9mICgqbWFwKSk7ICAvKiBUcmltIGV4Y2VzcyBzcGFjZS4g ICovCi0gICAgfQorICBxc29ydCAobWFwLCBhbGxvY19zaXplLCBzaXplb2Yg KCptYXApLCBxc29ydF9jbXApOworICBtYXBfc2l6ZSA9IGZpbHRlcl9kZWJ1 Z2luZm9fc2VjdGlvbnMobWFwLCBhbGxvY19zaXplKTsKKyAgbWFwX3NpemUg PSBmaWx0ZXJfb3ZlcmxhcHBpbmdfc2VjdGlvbnMobWFwLCBtYXBfc2l6ZSk7 CisKKyAgaWYgKG1hcF9zaXplIDwgYWxsb2Nfc2l6ZSkKKyAgICAvKiBTb21l IHNlY3Rpb25zIHdlcmUgZWxpbWluYXRlZC4gIFRyaW0gZXhjZXNzIHNwYWNl LiAgKi8KKyAgICBtYXAgPSB4cmVhbGxvYyAobWFwLCBtYXBfc2l6ZSAqIHNp emVvZiAoKm1hcCkpOwogICBlbHNlCi0gICAgZ2RiX2Fzc2VydCAoaiA9PSBt YXBfc2l6ZSk7CisgICAgZ2RiX2Fzc2VydCAoYWxsb2Nfc2l6ZSA9PSBtYXBf c2l6ZSk7CiAKICAgKnBtYXAgPSBtYXA7CiAgICpwbWFwX3NpemUgPSBtYXBf c2l6ZTsK --001636ed6bf9535b3b04733ca469--