From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14834 invoked by alias); 12 May 2009 19:43:37 -0000 Received: (qmail 14825 invoked by uid 22791); 12 May 2009 19:43:35 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_33,KAM_STOCKGEN,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; Tue, 12 May 2009 19:43:26 +0000 Received: from zps18.corp.google.com (zps18.corp.google.com [172.25.146.18]) by smtp-out.google.com with ESMTP id n4CJhMpw018056 for ; Tue, 12 May 2009 20:43:22 +0100 Received: from qyk8 (qyk8.prod.google.com [10.241.83.136]) by zps18.corp.google.com with ESMTP id n4CJgt1V027289 for ; Tue, 12 May 2009 12:43:20 -0700 Received: by qyk8 with SMTP id 8so437693qyk.5 for ; Tue, 12 May 2009 12:43:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.229.99.212 with SMTP id v20mr97712qcn.28.1242157398658; Tue, 12 May 2009 12:43:18 -0700 (PDT) Date: Tue, 12 May 2009 19:43:00 -0000 Message-ID: <8ac60eac0905121243m41d52262ua1e4d97642bb8a60@mail.gmail.com> Subject: Re: [patch] Eliminate quadratic slow-down on number of solibs (part 2). From: Paul Pluzhnikov To: Joel Brobecker Cc: gdb-patches@sourceware.org, Tom Tromey Content-Type: multipart/mixed; boundary=0016363105cd8095450469bc4eee 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-05/txt/msg00253.txt.bz2 --0016363105cd8095450469bc4eee Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 5170 On Tue, May 12, 2009 at 2:10 AM, Joel Brobecker wro= te: > Looks good to me. If I may, would you mind adding a comment explaining > *why* you count the number of symbols? I think it can help understanding > the added code a little bit faster... > > =A0 =A0/* If we haven't done so for this objfile yet, count the number > =A0 =A0 =A0 of objc methods that this objfile defines and save it as a pr= ivate > =A0 =A0 =A0 objfile data. =A0That way, if have already determined that th= is > =A0 =A0 =A0 objfile provides no objc methods, we can skip it entirely. = =A0*/ I've slightly reworded and added this. Thanks. > I wonder how well support for ObjC works. It looks like this file hasn't > really be worked on for a long time... Did you have an objc compiler in > your path when you did the testing, by any chance? Yes, I tested with objc-enabled gcc. Here are results from current CVS Head: $ grep '\.objc' gdb.sum Running ../../../gdb/testsuite/gdb.objc/basicclass.exp ... PASS: gdb.objc/basicclass.exp: successfully compiled objc with posix threads test case PASS: gdb.objc/basicclass.exp: deduced language is Objective-C, before full symbols PASS: gdb.objc/basicclass.exp: deduced language is Objective-C, after full symbols PASS: gdb.objc/basicclass.exp: breakpoint method PASS: gdb.objc/basicclass.exp: breakpoint method with colon PASS: gdb.objc/basicclass.exp: breakpoint class method with colon PASS: gdb.objc/basicclass.exp: continue until method breakpoint PASS: gdb.objc/basicclass.exp: resetting breakpoints when rerunning PASS: gdb.objc/basicclass.exp: continue until method breakpoint PASS: gdb.objc/basicclass.exp: print an ivar of self PASS: gdb.objc/basicclass.exp: print self PASS: gdb.objc/basicclass.exp: print contents of self PASS: gdb.objc/basicclass.exp: breakpoint in category method PASS: gdb.objc/basicclass.exp: continue until category method PASS: gdb.objc/basicclass.exp: Call an Objective-C method with no arguments PASS: gdb.objc/basicclass.exp: Call an Objective-C method with one argument PASS: gdb.objc/basicclass.exp: Use of the print-object command PASS: gdb.objc/basicclass.exp: Use of the po (print-object) command Running ../../../gdb/testsuite/gdb.objc/nondebug.exp ... PASS: gdb.objc/nondebug.exp: successfully compiled objc with posix threads test case KFAIL: gdb.objc/nondebug.exp: break on non-debuggable method (PRMS: gdb/123= 6) Running ../../../gdb/testsuite/gdb.objc/objcdecode.exp ... PASS: gdb.objc/objcdecode.exp: successfully compiled objc with posix threads test case PASS: gdb.objc/objcdecode.exp: break on multiply defined method FAIL: gdb.objc/objcdecode.exp: continue after break on multiply defined symbol (GDB internal error) No changes after the patch. Here is 'diff -w' again: diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 9b8d801..aa55baf 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -76,6 +76,8 @@ struct objc_method { CORE_ADDR imp; }; +static const struct objfile_data *objc_objfile_data; + /* Lookup a structure type named "struct NAME", visible in lexical block BLOCK. If NOERR is nonzero, return zero if NAME is not suitably defined. */ @@ -1154,7 +1156,23 @@ find_methods (struct symtab *symtab, char type, if (symtab) block =3D BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK); - ALL_MSYMBOLS (objfile, msymbol) + ALL_OBJFILES (objfile) + { + unsigned int *objc_csym; + + /* The objfile_csym variable counts the number of ObjC methods + that this objfile defines. We save that count as a private + objfile data. If we have already determined that this objfile + provides no ObjC methods, we can skip it entirely. */ + + unsigned int objfile_csym =3D 0; + + objc_csym =3D objfile_data (objfile, objc_objfile_data); + if (objc_csym !=3D NULL && *objc_csym =3D=3D 0) + /* There are no ObjC symbols in this objfile. Skip it entirely. */ + continue; + + ALL_OBJFILE_MSYMBOLS (objfile, msymbol) { QUIT; @@ -1187,6 +1205,8 @@ find_methods (struct symtab *symtab, char type, if (parse_method (tmp, &ntype, &nclass, &ncategory, &nselector) =3D= =3D NULL) continue; + objfile_csym++; + if ((type !=3D '\0') && (ntype !=3D type)) continue; @@ -1237,6 +1257,16 @@ find_methods (struct symtab *symtab, char type, csym++; } } + if (objc_csym =3D=3D NULL) + { + objc_csym =3D xmalloc (sizeof (*objc_csym)); + *objc_csym =3D objfile_csym; + set_objfile_data (objfile, objc_objfile_data, objc_csym); + } + else + /* Count of ObjC methods in this objfile should be constant. */ + gdb_assert (*objc_csym =3D=3D objfile_csym); + } if (nsym !=3D NULL) *nsym =3D csym; @@ -1792,3 +1822,9 @@ resolve_msgsend_super_stret (CORE_ADDR pc, CORE_ADDR *new_pc) return 1; return 0; } + +void +_initialize_objc_lang (void) +{ + objc_objfile_data =3D register_objfile_data (); +} OK to commit? Thanks, --=20 Paul Pluzhnikov 2009-05-12 Paul Pluzhnikov * objc-lang.c (objc_objfile_data): New variable. (find_methods): Skip objfiles without Obj-C methods. (_initialize_objc_lang): New function. --0016363105cd8095450469bc4eee Content-Type: text/plain; charset=US-ASCII; name="gdb-objc-20090512.txt" Content-Disposition: attachment; filename="gdb-objc-20090512.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fun02ba11 Content-length: 8252 ZGlmZiAtLWdpdCBhL2dkYi9vYmpjLWxhbmcuYyBiL2dkYi9vYmpjLWxhbmcu YwppbmRleCA5YjhkODAxLi5hYTU1YmFmIDEwMDY0NAotLS0gYS9nZGIvb2Jq Yy1sYW5nLmMKKysrIGIvZ2RiL29iamMtbGFuZy5jCkBAIC03Niw2ICs3Niw4 IEBAIHN0cnVjdCBvYmpjX21ldGhvZCB7CiAgIENPUkVfQUREUiBpbXA7CiB9 OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9iamZpbGVfZGF0YSAqb2JqY19v YmpmaWxlX2RhdGE7CisKIC8qIExvb2t1cCBhIHN0cnVjdHVyZSB0eXBlIG5h bWVkICJzdHJ1Y3QgTkFNRSIsIHZpc2libGUgaW4gbGV4aWNhbAogICAgYmxv Y2sgQkxPQ0suICBJZiBOT0VSUiBpcyBub256ZXJvLCByZXR1cm4gemVybyBp ZiBOQU1FIGlzIG5vdAogICAgc3VpdGFibHkgZGVmaW5lZC4gICovCkBAIC0x MTU0LDg4ICsxMTU2LDExNiBAQCBmaW5kX21ldGhvZHMgKHN0cnVjdCBzeW10 YWIgKnN5bXRhYiwgY2hhciB0eXBlLAogICBpZiAoc3ltdGFiKQogICAgIGJs b2NrID0gQkxPQ0tWRUNUT1JfQkxPQ0sgKEJMT0NLVkVDVE9SIChzeW10YWIp LCBTVEFUSUNfQkxPQ0spOwogCi0gIEFMTF9NU1lNQk9MUyAob2JqZmlsZSwg bXN5bWJvbCkKKyAgQUxMX09CSkZJTEVTIChvYmpmaWxlKQogICAgIHsKLSAg ICAgIFFVSVQ7CisgICAgICB1bnNpZ25lZCBpbnQgKm9iamNfY3N5bTsKIAot ICAgICAgaWYgKChNU1lNQk9MX1RZUEUgKG1zeW1ib2wpICE9IG1zdF90ZXh0 KQotCSAgJiYgKE1TWU1CT0xfVFlQRSAobXN5bWJvbCkgIT0gbXN0X2ZpbGVf dGV4dCkpCi0JLyogTm90IGEgZnVuY3Rpb24gb3IgbWV0aG9kLiAgKi8KLQlj b250aW51ZTsKKyAgICAgIC8qIFRoZSBvYmpmaWxlX2NzeW0gdmFyaWFibGUg Y291bnRzIHRoZSBudW1iZXIgb2YgT2JqQyBtZXRob2RzCisJIHRoYXQgdGhp cyBvYmpmaWxlIGRlZmluZXMuICBXZSBzYXZlIHRoYXQgY291bnQgYXMgYSBw cml2YXRlCisJIG9iamZpbGUgZGF0YS4JSWYgd2UgaGF2ZSBhbHJlYWR5IGRl dGVybWluZWQgdGhhdCB0aGlzIG9iamZpbGUKKwkgcHJvdmlkZXMgbm8gT2Jq QyBtZXRob2RzLCB3ZSBjYW4gc2tpcCBpdCBlbnRpcmVseS4gICovCiAKLSAg ICAgIGlmIChzeW10YWIpCi0JaWYgKChTWU1CT0xfVkFMVUVfQUREUkVTUyAo bXN5bWJvbCkgPCAgQkxPQ0tfU1RBUlQgKGJsb2NrKSkgfHwKLQkgICAgKFNZ TUJPTF9WQUxVRV9BRERSRVNTIChtc3ltYm9sKSA+PSBCTE9DS19FTkQgKGJs b2NrKSkpCi0JICAvKiBOb3QgaW4gdGhlIHNwZWNpZmllZCBzeW10YWIuICAq LwotCSAgY29udGludWU7CisgICAgICB1bnNpZ25lZCBpbnQgb2JqZmlsZV9j c3ltID0gMDsKIAotICAgICAgc3ltbmFtZSA9IFNZTUJPTF9OQVRVUkFMX05B TUUgKG1zeW1ib2wpOwotICAgICAgaWYgKHN5bW5hbWUgPT0gTlVMTCkKKyAg ICAgIG9iamNfY3N5bSA9IG9iamZpbGVfZGF0YSAob2JqZmlsZSwgb2JqY19v YmpmaWxlX2RhdGEpOworICAgICAgaWYgKG9iamNfY3N5bSAhPSBOVUxMICYm ICpvYmpjX2NzeW0gPT0gMCkKKwkvKiBUaGVyZSBhcmUgbm8gT2JqQyBzeW1i b2xzIGluIHRoaXMgb2JqZmlsZS4gIFNraXAgaXQgZW50aXJlbHkuICAqLwog CWNvbnRpbnVlOwogCi0gICAgICBpZiAoKHN5bW5hbWVbMF0gIT0gJy0nICYm IHN5bW5hbWVbMF0gIT0gJysnKSB8fCAoc3ltbmFtZVsxXSAhPSAnWycpKQot CS8qIE5vdCBhIG1ldGhvZCBuYW1lLiAgKi8KLQljb250aW51ZTsKLSAgICAg IAotICAgICAgd2hpbGUgKChzdHJsZW4gKHN5bW5hbWUpICsgMSkgPj0gdG1w bGVuKQorICAgICAgQUxMX09CSkZJTEVfTVNZTUJPTFMgKG9iamZpbGUsIG1z eW1ib2wpCiAJewotCSAgdG1wbGVuID0gKHRtcGxlbiA9PSAwKSA/IDEwMjQg OiB0bXBsZW4gKiAyOwotCSAgdG1wID0geHJlYWxsb2MgKHRtcCwgdG1wbGVu KTsKLQl9Ci0gICAgICBzdHJjcHkgKHRtcCwgc3ltbmFtZSk7CisJICBRVUlU OwogCi0gICAgICBpZiAocGFyc2VfbWV0aG9kICh0bXAsICZudHlwZSwgJm5j bGFzcywgJm5jYXRlZ29yeSwgJm5zZWxlY3RvcikgPT0gTlVMTCkKLQljb250 aW51ZTsKKwkgIGlmICgoTVNZTUJPTF9UWVBFIChtc3ltYm9sKSAhPSBtc3Rf dGV4dCkKKwkgICAgICAmJiAoTVNZTUJPTF9UWVBFIChtc3ltYm9sKSAhPSBt c3RfZmlsZV90ZXh0KSkKKwkgICAgLyogTm90IGEgZnVuY3Rpb24gb3IgbWV0 aG9kLiAgKi8KKwkgICAgY29udGludWU7CisKKwkgIGlmIChzeW10YWIpCisJ ICAgIGlmICgoU1lNQk9MX1ZBTFVFX0FERFJFU1MgKG1zeW1ib2wpIDwgIEJM T0NLX1NUQVJUIChibG9jaykpIHx8CisJCShTWU1CT0xfVkFMVUVfQUREUkVT UyAobXN5bWJvbCkgPj0gQkxPQ0tfRU5EIChibG9jaykpKQorCSAgICAgIC8q IE5vdCBpbiB0aGUgc3BlY2lmaWVkIHN5bXRhYi4gICovCisJICAgICAgY29u dGludWU7CisKKwkgIHN5bW5hbWUgPSBTWU1CT0xfTkFUVVJBTF9OQU1FICht c3ltYm9sKTsKKwkgIGlmIChzeW1uYW1lID09IE5VTEwpCisJICAgIGNvbnRp bnVlOworCisJICBpZiAoKHN5bW5hbWVbMF0gIT0gJy0nICYmIHN5bW5hbWVb MF0gIT0gJysnKSB8fCAoc3ltbmFtZVsxXSAhPSAnWycpKQorCSAgICAvKiBO b3QgYSBtZXRob2QgbmFtZS4gICovCisJICAgIGNvbnRpbnVlOwogICAgICAg Ci0gICAgICBpZiAoKHR5cGUgIT0gJ1wwJykgJiYgKG50eXBlICE9IHR5cGUp KQotCWNvbnRpbnVlOworCSAgd2hpbGUgKChzdHJsZW4gKHN5bW5hbWUpICsg MSkgPj0gdG1wbGVuKQorCSAgICB7CisJICAgICAgdG1wbGVuID0gKHRtcGxl biA9PSAwKSA/IDEwMjQgOiB0bXBsZW4gKiAyOworCSAgICAgIHRtcCA9IHhy ZWFsbG9jICh0bXAsIHRtcGxlbik7CisJICAgIH0KKwkgIHN0cmNweSAodG1w LCBzeW1uYW1lKTsKIAotICAgICAgaWYgKChjbGFzcyAhPSBOVUxMKSAKLQkg ICYmICgobmNsYXNzID09IE5VTEwpIHx8IChzdHJjbXAgKGNsYXNzLCBuY2xh c3MpICE9IDApKSkKLQljb250aW51ZTsKKwkgIGlmIChwYXJzZV9tZXRob2Qg KHRtcCwgJm50eXBlLCAmbmNsYXNzLCAmbmNhdGVnb3J5LCAmbnNlbGVjdG9y KSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKyAgICAgIAorCSAgb2JqZmls ZV9jc3ltKys7CiAKLSAgICAgIGlmICgoY2F0ZWdvcnkgIT0gTlVMTCkgJiYg Ci0JICAoKG5jYXRlZ29yeSA9PSBOVUxMKSB8fCAoc3RyY21wIChjYXRlZ29y eSwgbmNhdGVnb3J5KSAhPSAwKSkpCi0JY29udGludWU7CisJICBpZiAoKHR5 cGUgIT0gJ1wwJykgJiYgKG50eXBlICE9IHR5cGUpKQorCSAgICBjb250aW51 ZTsKIAotICAgICAgaWYgKChzZWxlY3RvciAhPSBOVUxMKSAmJiAKLQkgICgo bnNlbGVjdG9yID09IE5VTEwpIHx8IChzdHJjbXAgKHNlbGVjdG9yLCBuc2Vs ZWN0b3IpICE9IDApKSkKLQljb250aW51ZTsKKwkgIGlmICgoY2xhc3MgIT0g TlVMTCkgCisJICAgICAgJiYgKChuY2xhc3MgPT0gTlVMTCkgfHwgKHN0cmNt cCAoY2xhc3MsIG5jbGFzcykgIT0gMCkpKQorCSAgICBjb250aW51ZTsKKwor CSAgaWYgKChjYXRlZ29yeSAhPSBOVUxMKSAmJiAKKwkgICAgICAoKG5jYXRl Z29yeSA9PSBOVUxMKSB8fCAoc3RyY21wIChjYXRlZ29yeSwgbmNhdGVnb3J5 KSAhPSAwKSkpCisJICAgIGNvbnRpbnVlOwogCi0gICAgICBzeW0gPSBmaW5k X3BjX2Z1bmN0aW9uIChTWU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCkp OwotICAgICAgaWYgKHN5bSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAg ICAgY29uc3QgY2hhciAqbmV3c3ltbmFtZSA9IFNZTUJPTF9OQVRVUkFMX05B TUUgKHN5bSk7CisJICBpZiAoKHNlbGVjdG9yICE9IE5VTEwpICYmIAorCSAg ICAgICgobnNlbGVjdG9yID09IE5VTEwpIHx8IChzdHJjbXAgKHNlbGVjdG9y LCBuc2VsZWN0b3IpICE9IDApKSkKKwkgICAgY29udGludWU7CisKKwkgIHN5 bSA9IGZpbmRfcGNfZnVuY3Rpb24gKFNZTUJPTF9WQUxVRV9BRERSRVNTICht c3ltYm9sKSk7CisJICBpZiAoc3ltICE9IE5VTEwpCisJICAgIHsKKwkgICAg ICBjb25zdCBjaGFyICpuZXdzeW1uYW1lID0gU1lNQk9MX05BVFVSQUxfTkFN RSAoc3ltKTsKIAkgIAotICAgICAgICAgIGlmIChzdHJjbXAgKHN5bW5hbWUs IG5ld3N5bW5hbWUpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgIC8qIEZvdW5kIGEgaGlnaC1sZXZlbCBtZXRob2Qgc3ltOiBzd2FwIGl0 IGludG8gdGhlCi0gICAgICAgICAgICAgICAgIGxvd2VyIHBhcnQgb2Ygc3lt X2FyciAoYmVsb3cgbnVtX2RlYnVnZ2FibGUpLiAgKi8KLSAgICAgICAgICAg ICAgaWYgKHN5bXMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICBzeW1zW2NzeW1dID0gc3ltc1tjZGVidWddOwotICAg ICAgICAgICAgICAgICAgc3ltc1tjZGVidWddID0gc3ltOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgY3N5bSsrOwotICAgICAgICAgICAg ICBjZGVidWcrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdhcm5pbmcgKAorCSAgICAg IGlmIChzdHJjbXAgKHN5bW5hbWUsIG5ld3N5bW5hbWUpID09IDApCisJCXsK KwkJICAvKiBGb3VuZCBhIGhpZ2gtbGV2ZWwgbWV0aG9kIHN5bTogc3dhcCBp dCBpbnRvIHRoZQorCQkgICAgIGxvd2VyIHBhcnQgb2Ygc3ltX2FyciAoYmVs b3cgbnVtX2RlYnVnZ2FibGUpLiAgKi8KKwkJICBpZiAoc3ltcyAhPSBOVUxM KQorCQkgICAgeworCQkgICAgICBzeW1zW2NzeW1dID0gc3ltc1tjZGVidWdd OworCQkgICAgICBzeW1zW2NkZWJ1Z10gPSBzeW07CisJCSAgICB9CisJCSAg Y3N5bSsrOworCQkgIGNkZWJ1ZysrOworCQl9CisJICAgICAgZWxzZQorCQl7 CisJCSAgd2FybmluZyAoCiAiZGVidWdnaW5nIHN5bWJvbCBcIiVzXCIgZG9l cyBub3QgbWF0Y2ggbWluaW1hbCBzeW1ib2wgKFwiJXNcIik7IGlnbm9yaW5n IiwKLSAgICAgICAgICAgICAgICAgICAgICAgbmV3c3ltbmFtZSwgc3ltbmFt ZSk7Ci0gICAgICAgICAgICAgIGlmIChzeW1zICE9IE5VTEwpCi0gICAgICAg ICAgICAgICAgc3ltc1tjc3ltXSA9IChzdHJ1Y3Qgc3ltYm9sICopIG1zeW1i b2w7Ci0gICAgICAgICAgICAgIGNzeW0rKzsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5ld3N5bW5hbWUsIHN5bW5hbWUpOworCQkgIGlmIChzeW1zICE9IE5V TEwpCisJCSAgICBzeW1zW2NzeW1dID0gKHN0cnVjdCBzeW1ib2wgKikgbXN5 bWJvbDsKKwkJICBjc3ltKys7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAg ICB7CisJICAgICAgLyogRm91bmQgYSBub24tZGVidWdnYWJsZSBtZXRob2Qg c3ltYm9sLiAgKi8KKwkgICAgICBpZiAoc3ltcyAhPSBOVUxMKQorCQlzeW1z W2NzeW1dID0gKHN0cnVjdCBzeW1ib2wgKikgbXN5bWJvbDsKKwkgICAgICBj c3ltKys7CisJICAgIH0KKwl9CisgICAgICBpZiAob2JqY19jc3ltID09IE5V TEwpCiAJewotCSAgLyogRm91bmQgYSBub24tZGVidWdnYWJsZSBtZXRob2Qg c3ltYm9sLiAgKi8KLQkgIGlmIChzeW1zICE9IE5VTEwpCi0JICAgIHN5bXNb Y3N5bV0gPSAoc3RydWN0IHN5bWJvbCAqKSBtc3ltYm9sOwotCSAgY3N5bSsr OworCSAgb2JqY19jc3ltID0geG1hbGxvYyAoc2l6ZW9mICgqb2JqY19jc3lt KSk7CisJICAqb2JqY19jc3ltID0gb2JqZmlsZV9jc3ltOworCSAgc2V0X29i amZpbGVfZGF0YSAob2JqZmlsZSwgb2JqY19vYmpmaWxlX2RhdGEsIG9iamNf Y3N5bSk7CiAJfQorICAgICAgZWxzZQorCS8qIENvdW50IG9mIE9iakMgbWV0 aG9kcyBpbiB0aGlzIG9iamZpbGUgc2hvdWxkIGJlIGNvbnN0YW50LiAgKi8K KwlnZGJfYXNzZXJ0ICgqb2JqY19jc3ltID09IG9iamZpbGVfY3N5bSk7CiAg ICAgfQogCiAgIGlmIChuc3ltICE9IE5VTEwpCkBAIC0xNzkyLDMgKzE4MjIs OSBAQCByZXNvbHZlX21zZ3NlbmRfc3VwZXJfc3RyZXQgKENPUkVfQUREUiBw YywgQ09SRV9BRERSICpuZXdfcGMpCiAgICAgcmV0dXJuIDE7CiAgIHJldHVy biAwOwogfQorCit2b2lkCitfaW5pdGlhbGl6ZV9vYmpjX2xhbmcgKHZvaWQp Cit7CisgIG9iamNfb2JqZmlsZV9kYXRhID0gcmVnaXN0ZXJfb2JqZmlsZV9k YXRhICgpOworfQo= --0016363105cd8095450469bc4eee--