From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8702 invoked by alias); 28 May 2012 04:49:56 -0000 Received: (qmail 8687 invoked by uid 22791); 28 May 2012 04:49:53 -0000 X-SWARE-Spam-Status: No, hits=-4.7 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KAM_STOCKGEN,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-vb0-f41.google.com (HELO mail-vb0-f41.google.com) (209.85.212.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 28 May 2012 04:49:37 +0000 Received: by vbbey12 with SMTP id ey12so2077753vbb.0 for ; Sun, 27 May 2012 21:49:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=4Td65NRVtv0JJtuAaw24Nk2g5xzIWUHFO1hSFCuWhaE=; b=Y4T3+pkHnshBL8Sg6MKwtGupPv3126vMIwYOoX4a+pcOtg/aqjoT9nH4fi2NhkeX5L 4r19R9LAvY1tgd49mt3lS7NVujtucDVGcj6G7mne/S/zdLwkpVJesOlPCNxAKIVzUm9m unKVbJM1OCdlArX7MqdgYFMdmAfGNdgmPrDAMkyU5fYvJrXVIhRGfdJ8kuuR/wjO+1Ew hlryc6yohmMldmZR9gTrrVU1SdPM4N9oDJz8x5igadwfJ3r7XdvdePZskMbScNDPHPCC 0vaOAQSCn/IrM0UUP9B4Snrs5ffk6HIbhjzIRxU29YXHLzm4htuVqygwGVCwNO9NK0ca nQTw== Received: by 10.52.91.72 with SMTP id cc8mr6252853vdb.17.1338180576391; Sun, 27 May 2012 21:49:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.91.72 with SMTP id cc8mr6252844vdb.17.1338180576274; Sun, 27 May 2012 21:49:36 -0700 (PDT) Received: by 10.52.161.199 with HTTP; Sun, 27 May 2012 21:49:35 -0700 (PDT) In-Reply-To: <4FBF47DD.4030100@redhat.com> References: <20120524175852.D38381E139C@ruffy2.mtv.corp.google.com> <4FBF47DD.4030100@redhat.com> Date: Mon, 28 May 2012 04:49:00 -0000 Message-ID: Subject: Re: [RFA] massively speed up "info var foo" on large programs From: Doug Evans To: Pedro Alves Cc: gdb-patches@sourceware.org, ratmice@gmail.com Content-Type: multipart/mixed; boundary=20cf307ca4bae4e87b04c1117134 X-System-Of-Record: true X-Gm-Message-State: ALoCoQmWvc7JDlAxw1mE/o047QF5il/2rjwgfsmBnldcwlsjyLtHifujWbqentb0WhT2RwyHFNFIOgfoxDM4lh0eTgOsIvnJWzF66wiGCJQRsTE9vcUhNLHB4blCr3UuNoeXd7aW6BqLGPmAtG5uuIm2OQ9OD6ZyYQ== 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: 2012-05/txt/msg00986.txt.bz2 --20cf307ca4bae4e87b04c1117134 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1752 On Fri, May 25, 2012 at 1:50 AM, Pedro Alves wrote: > On 05/25/2012 09:21 AM, Doug Evans wrote: > >> >> The output is different from the previous code, I didn't take into >> account the symbols that gdb creates for @plt entries. =A0I think if we >> want to continue to provide the current output, we should add an >> option to "info var|fun|type" to produce it: the normal case shouldn't >> be that slow. > > > Different how? =A0The patch has no testsuite updates, so the email reader= is > left wondering. =A0;-) In the "Non-debugging symbols" section of the output, when a symbol would have been found in another objfile, the code would have not printed the non-@plt form of the function name. With this patch we have a decision to make. Searching all the other objfiles is not reasonable (IMO) so what to do? I can think of two possibilities: always print it or never print it. Since the symbol in question is an artificial symbol created by gdb I have opted for never printing it. Thus instead of seeing this in the "Non-debugging symbols" section of the output: 0x1234 foo@plt 0x1234 foo the output will contain: 0x1234 foo@plt Here is v3 of the patch. I added a testcase. Regression tested on amd64-linux. Ok to check in? 2012-05-27 Doug Evans * symtab.c (minimal_symbol): New member created_by_gdb. * elfread.c (elf_symtab_read): Set created_by_gdb for @plt minsym created by gdb. * symtab.c (lookup_msymbol_in_objfile): New function. (search_symbols): Call it. Only scan minsyms if nfiles =3D=3D 0. testsuite: * gdb.base/info-fun.exp: New file. * gdb.base/info-fun.c: New file. * gdb.base/info-fun-solib.c: New file. --20cf307ca4bae4e87b04c1117134 Content-Type: text/plain; charset=US-ASCII; name="gdb-120527-search-symbols-speedup-3.patch.txt" Content-Disposition: attachment; filename="gdb-120527-search-symbols-speedup-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h2r1zab70 Content-length: 14571 MjAxMi0wNS0yNyAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog c3ltdGFiLmMgKG1pbmltYWxfc3ltYm9sKTogTmV3IG1lbWJlciBjcmVhdGVk X2J5X2dkYi4KCSogZWxmcmVhZC5jIChlbGZfc3ltdGFiX3JlYWQpOiBTZXQg Y3JlYXRlZF9ieV9nZGIgZm9yIEBwbHQgbWluc3ltCgljcmVhdGVkIGJ5IGdk Yi4KCSogc3ltdGFiLmMgKGxvb2t1cF9tc3ltYm9sX2luX29iamZpbGUpOiBO ZXcgZnVuY3Rpb24uCgkoc2VhcmNoX3N5bWJvbHMpOiBDYWxsIGl0LiAgT25s eSBzY2FuIG1pbnN5bXMgaWYgbmZpbGVzID09IDAuCgoJdGVzdHN1aXRlOgoJ KiBnZGIuYmFzZS9pbmZvLWZ1bi5leHA6IE5ldyBmaWxlLgoJKiBnZGIuYmFz ZS9pbmZvLWZ1bi5jOiBOZXcgZmlsZS4KCSogZ2RiLmJhc2UvaW5mby1mdW4t c29saWIuYzogTmV3IGZpbGUuCgpJbmRleDogZWxmcmVhZC5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZWxm cmVhZC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzMQpkaWZmIC11IC1w IC1yMS4xMzEgZWxmcmVhZC5jCi0tLSBlbGZyZWFkLmMJMTggTWF5IDIwMTIg MjE6MDI6NDcgLTAwMDAJMS4xMzEKKysrIGVsZnJlYWQuYwkyOCBNYXkgMjAx MiAwNDoxMzoxOSAtMDAwMApAQCAtNTk0LDYgKzU5NCw3IEBAIGVsZl9zeW10 YWJfcmVhZCAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUKIAkJICBpZiAobXRy YW1wKQogCQkgICAgewogCQkgICAgICBNU1lNQk9MX1NJWkUgKG10cmFtcCkg PSBNU1lNQk9MX1NJWkUgKG1zeW0pOworCQkgICAgICBtdHJhbXAtPmNyZWF0 ZWRfYnlfZ2RiID0gMTsKIAkJICAgICAgbXRyYW1wLT5maWxlbmFtZSA9IGZp bGVzeW1uYW1lOwogCQkgICAgICBnZGJhcmNoX2VsZl9tYWtlX21zeW1ib2xf c3BlY2lhbCAoZ2RiYXJjaCwgc3ltLCBtdHJhbXApOwogCQkgICAgfQpJbmRl eDogc3ltdGFiLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9zeW10YWIuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4zMDYKZGlmZiAtdSAtcCAtcjEuMzA2IHN5bXRhYi5jCi0tLSBzeW10 YWIuYwkyNCBNYXkgMjAxMiAwMjo1MTo0OCAtMDAwMAkxLjMwNgorKysgc3lt dGFiLmMJMjggTWF5IDIwMTIgMDQ6MTM6MTkgLTAwMDAKQEAgLTE1NTksNiAr MTU1OSw0OCBAQCBsb29rdXBfc3ltYm9sX2F1eF9zeW10YWJzIChpbnQgYmxv Y2tfaW5kCiAgIHJldHVybiBOVUxMOwogfQogCisvKiBXcmFwcGVyIGFyb3Vu ZCBsb29rdXBfc3ltYm9sX2F1eF9vYmpmaWxlIGZvciBzZWFyY2hfc3ltYm9s cy4KKyAgIExvb2sgdXAgTVNZTUJPTCBpbiBET01BSU4gaW4gdGhlIGdsb2Jh bCBhbmQgc3RhdGljIGJsb2NrcyBvZiBPQkpGSUxFCisgICBhbmQgYWxsIHJl bGF0ZWQgb2JqZmlsZXMuICAqLworCitzdGF0aWMgc3RydWN0IHN5bWJvbCAq Citsb29rdXBfbXN5bWJvbF9pbl9vYmpmaWxlIChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSwKKwkJCSAgIHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAqbXN5bWJv bCwKKwkJCSAgIGRvbWFpbl9lbnVtIGRvbWFpbikKK3sKKyAgY29uc3QgY2hh ciAqbmFtZSA9IFNZTUJPTF9MSU5LQUdFX05BTUUgKG1zeW1ib2wpOworICBl bnVtIGxhbmd1YWdlIGxhbmcgPSBjdXJyZW50X2xhbmd1YWdlLT5sYV9sYW5n dWFnZTsKKyAgY29uc3QgY2hhciAqbW9kaWZpZWRfbmFtZTsKKyAgc3RydWN0 IGNsZWFudXAgKmNsZWFudXAgPSBkZW1hbmdsZV9mb3JfbG9va3VwIChuYW1l LCBsYW5nLCAmbW9kaWZpZWRfbmFtZSk7CisgIHN0cnVjdCBvYmpmaWxlICpt YWluX29iamZpbGUsICpjdXJfb2JqZmlsZTsKKworICBpZiAob2JqZmlsZS0+ c2VwYXJhdGVfZGVidWdfb2JqZmlsZV9iYWNrbGluaykKKyAgICBtYWluX29i amZpbGUgPSBvYmpmaWxlLT5zZXBhcmF0ZV9kZWJ1Z19vYmpmaWxlX2JhY2ts aW5rOworICBlbHNlCisgICAgbWFpbl9vYmpmaWxlID0gb2JqZmlsZTsKKwor ICBmb3IgKGN1cl9vYmpmaWxlID0gbWFpbl9vYmpmaWxlOworICAgICAgIGN1 cl9vYmpmaWxlOworICAgICAgIGN1cl9vYmpmaWxlID0gb2JqZmlsZV9zZXBh cmF0ZV9kZWJ1Z19pdGVyYXRlIChtYWluX29iamZpbGUsIGN1cl9vYmpmaWxl KSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc3ltYm9sICpzeW07CisKKyAgICAg IHN5bSA9IGxvb2t1cF9zeW1ib2xfYXV4X29iamZpbGUgKGN1cl9vYmpmaWxl LCBHTE9CQUxfQkxPQ0ssCisJCQkJICAgICAgIG1vZGlmaWVkX25hbWUsIGRv bWFpbik7CisgICAgICBpZiAoc3ltID09IE5VTEwpCisJc3ltID0gbG9va3Vw X3N5bWJvbF9hdXhfb2JqZmlsZSAoY3VyX29iamZpbGUsIFNUQVRJQ19CTE9D SywKKwkJCQkJIG1vZGlmaWVkX25hbWUsIGRvbWFpbik7CisgICAgICBpZiAo c3ltICE9IE5VTEwpCisJeworCSAgZG9fY2xlYW51cHMgKGNsZWFudXApOwor CSAgcmV0dXJuIHN5bTsKKwl9CisgICAgfQorCisgIGRvX2NsZWFudXBzIChj bGVhbnVwKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKIC8qIEEgaGVscGVyIGZ1 bmN0aW9uIGZvciBsb29rdXBfc3ltYm9sX2F1eCB0aGF0IGludGVyZmFjZXMg d2l0aCB0aGUKICAgICJxdWljayIgc3ltYm9sIHRhYmxlIGZ1bmN0aW9ucy4g ICovCiAKQEAgLTM0NjMsMjEgKzM1MDUsMTMgQEAgc2VhcmNoX3N5bWJvbHMg KGNoYXIgKnJlZ2V4cCwgZW51bSBzZWFyYwogCQl8fCByZWdleGVjICgmZGF0 dW0ucHJlZywgU1lNQk9MX05BVFVSQUxfTkFNRSAobXN5bWJvbCksIDAsCiAJ CQkgICAgTlVMTCwgMCkgPT0gMCkKIAkgICAgICB7Ci0JCWlmICgwID09IGZp bmRfcGNfc3ltdGFiIChTWU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCkp KQotCQkgIHsKLQkJICAgIC8qIEZJWE1FOiBjYXJsdG9uLzIwMDMtMDItMDQ6 IEdpdmVuIHRoYXQgdGhlCi0JCSAgICAgICBzZW1hbnRpY3Mgb2YgbG9va3Vw X3N5bWJvbCBrZWVwcyBvbiBjaGFuZ2luZwotCQkgICAgICAgc2xpZ2h0bHks IGl0IHdvdWxkIGJlIGEgbmljZSBpZGVhIGlmIHdlIGhhZCBhCi0JCSAgICAg ICBmdW5jdGlvbiBsb29rdXBfc3ltYm9sX21pbnN5bSB0aGF0IGZvdW5kIHRo ZQotCQkgICAgICAgc3ltYm9sIGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBtaW5p bWFsIHN5bWJvbCAoaWYKLQkJICAgICAgIGFueSkuICAqLwotCQkgICAgaWYg KGtpbmQgPT0gRlVOQ1RJT05TX0RPTUFJTgotCQkJfHwgbG9va3VwX3N5bWJv bCAoU1lNQk9MX0xJTktBR0VfTkFNRSAobXN5bWJvbCksCi0JCQkJCSAgKHN0 cnVjdCBibG9jayAqKSBOVUxMLAotCQkJCQkgIFZBUl9ET01BSU4sIDApCi0J CQk9PSBOVUxMKQotCQkgICAgICBmb3VuZF9taXNjID0gMTsKLQkJICB9CisJ CS8qIE5vdGU6IEFuIGltcG9ydGFudCBzaWRlLWVmZmVjdCBvZiB0aGVzZSBs b29rdXAgZnVuY3Rpb25zCisJCSAgIGlzIHRvIGV4cGFuZCB0aGUgc3ltYm9s IHRhYmxlIGlmIG1zeW1ib2wgaXMgZm91bmQuICAqLworCQlpZiAoa2luZCA9 PSBGVU5DVElPTlNfRE9NQUlOCisJCSAgICA/IGZpbmRfcGNfc3ltdGFiIChT WU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCkpID09IE5VTEwKKwkJICAg IDogbG9va3VwX21zeW1ib2xfaW5fb2JqZmlsZSAob2JqZmlsZSwgbXN5bWJv bCwKKwkJCQkJCSBWQVJfRE9NQUlOKSA9PSBOVUxMKQorCQkgIGZvdW5kX21p c2MgPSAxOwogCSAgICAgIH0KIAkgIH0KICAgICAgIH0KQEAgLTM1NTQsMTIg KzM1ODgsMTUgQEAgc2VhcmNoX3N5bWJvbHMgKGNoYXIgKnJlZ2V4cCwgZW51 bSBzZWFyYwogICAvKiBJZiB0aGVyZSBhcmUgbm8gZXllcywgYXZvaWQgYWxs IGNvbnRhY3QuICBJIG1lYW4sIGlmIHRoZXJlIGFyZQogICAgICBubyBkZWJ1 ZyBzeW1ib2xzLCB0aGVuIHByaW50IGRpcmVjdGx5IGZyb20gdGhlIG1zeW1i b2xfdmVjdG9yLiAgKi8KIAotICBpZiAoZm91bmRfbWlzYyB8fCBraW5kICE9 IEZVTkNUSU9OU19ET01BSU4pCisgIGlmIChmb3VuZF9taXNjIHx8IChuZmls ZXMgPT0gMCAmJiBraW5kICE9IEZVTkNUSU9OU19ET01BSU4pKQogICAgIHsK ICAgICAgIEFMTF9NU1lNQk9MUyAob2JqZmlsZSwgbXN5bWJvbCkKICAgICAg IHsKICAgICAgICAgUVVJVDsKIAorCWlmIChtc3ltYm9sLT5jcmVhdGVkX2J5 X2dkYikKKwkgIGNvbnRpbnVlOworCiAJaWYgKE1TWU1CT0xfVFlQRSAobXN5 bWJvbCkgPT0gb3VydHlwZQogCSAgICB8fCBNU1lNQk9MX1RZUEUgKG1zeW1i b2wpID09IG91cnR5cGUyCiAJICAgIHx8IE1TWU1CT0xfVFlQRSAobXN5bWJv bCkgPT0gb3VydHlwZTMKQEAgLTM1NjksMTQgKzM2MDYsMTMgQEAgc2VhcmNo X3N5bWJvbHMgKGNoYXIgKnJlZ2V4cCwgZW51bSBzZWFyYwogCQl8fCByZWdl eGVjICgmZGF0dW0ucHJlZywgU1lNQk9MX05BVFVSQUxfTkFNRSAobXN5bWJv bCksIDAsCiAJCQkgICAgTlVMTCwgMCkgPT0gMCkKIAkgICAgICB7Ci0JCS8q IEZ1bmN0aW9uczogIExvb2sgdXAgYnkgYWRkcmVzcy4gICovCi0JCWlmIChr aW5kICE9IEZVTkNUSU9OU19ET01BSU4gfHwKLQkJICAgICgwID09IGZpbmRf cGNfc3ltdGFiIChTWU1CT0xfVkFMVUVfQUREUkVTUyAobXN5bWJvbCkpKSkK KwkJLyogRm9yIGZ1bmN0aW9ucyB3ZSBjYW4gZG8gYSBxdWljayBjaGVjayBv ZiB3aGV0aGVyIHRoZQorCQkgICBzeW1ib2wgbWlnaHQgYmUgZm91bmQgdmlh IGZpbmRfcGNfc3ltdGFiLiAgKi8KKwkJaWYgKGtpbmQgIT0gRlVOQ1RJT05T X0RPTUFJTgorCQkgICAgfHwgZmluZF9wY19zeW10YWIgKFNZTUJPTF9WQUxV RV9BRERSRVNTIChtc3ltYm9sKSkgPT0gTlVMTCkKIAkJICB7Ci0JCSAgICAv KiBWYXJpYWJsZXMvQWJzb2x1dGVzOiAgTG9vayB1cCBieSBuYW1lLiAgKi8K LQkJICAgIGlmIChsb29rdXBfc3ltYm9sIChTWU1CT0xfTElOS0FHRV9OQU1F IChtc3ltYm9sKSwKLQkJCQkgICAgICAgKHN0cnVjdCBibG9jayAqKSBOVUxM LCBWQVJfRE9NQUlOLCAwKQotCQkJID09IE5VTEwpCisJCSAgICBpZiAobG9v a3VwX21zeW1ib2xfaW5fb2JqZmlsZSAob2JqZmlsZSwgbXN5bWJvbCwKKwkJ CQkJCSAgIFZBUl9ET01BSU4pID09IE5VTEwpCiAJCSAgICAgIHsKIAkJCS8q IG1hdGNoICovCiAJCQlwc3IgPSAoc3RydWN0IHN5bWJvbF9zZWFyY2ggKikK SW5kZXg6IHN5bXRhYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nZGIvc3ltdGFiLmgsdgpyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMjA2CmRpZmYgLXUgLXAgLXIxLjIwNiBzeW10YWIuaAotLS0g c3ltdGFiLmgJMTAgTWF5IDIwMTIgMjA6MDQ6MDAgLTAwMDAJMS4yMDYKKysr IHN5bXRhYi5oCTI4IE1heSAyMDEyIDA0OjEzOjE5IC0wMDAwCkBAIC0zMzks NiArMzM5LDEwIEBAIHN0cnVjdCBtaW5pbWFsX3N5bWJvbAogCiAgIEVOVU1f QklURklFTEQobWluaW1hbF9zeW1ib2xfdHlwZSkgdHlwZSA6IDg7CiAKKyAg LyogTm9uLXplcm8gaWYgdGhpcyBzeW1ib2wgd2FzIGNyZWF0ZWQgYnkgZ2Ri LgorICAgICBTdWNoIHN5bWJvbHMgZG8gbm90IGFwcGVhciBpbiB0aGUgb3V0 cHV0IG9mICJpbmZvIHZhcnxmdW4iLiAgKi8KKyAgdW5zaWduZWQgaW50IGNy ZWF0ZWRfYnlfZ2RiIDogMTsKKwogICAvKiBUd28gZmxhZyBiaXRzIHByb3Zp ZGVkIGZvciB0aGUgdXNlIG9mIHRoZSB0YXJnZXQuICAqLwogICB1bnNpZ25l ZCBpbnQgdGFyZ2V0X2ZsYWdfMSA6IDE7CiAgIHVuc2lnbmVkIGludCB0YXJn ZXRfZmxhZ18yIDogMTsKSW5kZXg6IHRlc3RzdWl0ZS9nZGIuYmFzZS9pbmZv LWZ1bi1zb2xpYi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IHRlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLWZ1bi1zb2xpYi5jCmRpZmYgLU4g dGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tZnVuLXNvbGliLmMKLS0tIC9kZXYv bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUv Z2RiLmJhc2UvaW5mby1mdW4tc29saWIuYwkyOCBNYXkgMjAxMiAwNDoxMzoy MCAtMDAwMApAQCAtMCwwICsxLDIwIEBACisvKiBDb3B5cmlnaHQgMjAxMiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworaW50Citmb28gKHZvaWQpCit7CisgIHJldHVy biAwOworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tZnVuLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dk Yi5iYXNlL2luZm8tZnVuLmMKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmJhc2Uv aW5mby1mdW4uYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg LTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLWZ1bi5jCTI4IE1h eSAyMDEyIDA0OjEzOjIwIC0wMDAwCkBAIC0wLDAgKzEsMjIgQEAKKy8qIENv cHlyaWdodCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCitleHRlcm4gaW50IGZv byAodm9pZCk7CisKK2ludAorbWFpbiAoKQoreworICByZXR1cm4gZm9vICgp OworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL2luZm8tZnVuLmV4cAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2Ri LmJhc2UvaW5mby1mdW4uZXhwCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5iYXNl L2luZm8tZnVuLmV4cAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6 MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFzZS9pbmZvLWZ1bi5leHAJ MjggTWF5IDIwMTIgMDQ6MTM6MjAgLTAwMDAKQEAgLTAsMCArMSw3NiBAQAor IyBDb3B5cmlnaHQgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmIHsgW3NraXBfc2hsaWJfdGVzdHNd IHx8IFtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKyAgICByZXR1cm4gMAorfQor CisjIExpYnJhcnkgZmlsZS4KK3NldCBsaWJuYW1lICJpbmZvLWZ1bi1zb2xp YiIKK3NldCBzcmNmaWxlX2xpYiAke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7bGli bmFtZX0uYworc2V0IGJpbmZpbGVfbGliICR7b2JqZGlyfS8ke3N1YmRpcn0v JHtsaWJuYW1lfS5zbworc2V0IGxpYl9mbGFncyB7fQorIyBCaW5hcnkgZmls ZS4KK3NldCB0ZXN0ZmlsZSAiaW5mby1mdW4iCitzZXQgc3JjZmlsZSAke3Ny Y2Rpcn0vJHtzdWJkaXJ9LyR7dGVzdGZpbGV9LmMKK3NldCBleGVjdXRhYmxl ICR7dGVzdGZpbGV9CitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJkaXJ9 LyR7ZXhlY3V0YWJsZX0KK3NldCBiaW5fZmxhZ3MgW2xpc3QgZGVidWcgc2hs aWI9JHtiaW5maWxlX2xpYn1dCisKK2lmIFtnZXRfY29tcGlsZXJfaW5mbyAk e2JpbmZpbGV9XSB7CisgICAgcmV0dXJuIC0xCit9CisKKyMgU0VQIG11c3Qg YmUgbGFzdCBmb3IgdGhlIHBvc3NpYmxlIGB1bnN1cHBvcnRlZCcgZXJyb3Ig cGF0aC4KK2ZvcmVhY2ggbGlic2VwZGVidWcge05PIElOIFNFUH0geyB3aXRo X3Rlc3RfcHJlZml4ICIkbGlic2VwZGVidWciIHsKKworICAgIHNldCBzZXBf bGliX2ZsYWdzICRsaWJfZmxhZ3MKKyAgICBpZiB7JGxpYnNlcGRlYnVnICE9 ICJOTyJ9IHsKKwlsYXBwZW5kIHNlcF9saWJfZmxhZ3Mge2RlYnVnfQorICAg IH0KKyAgICBpZiB7IFtnZGJfY29tcGlsZV9zaGxpYiAke3NyY2ZpbGVfbGli fSAke2JpbmZpbGVfbGlifSAkc2VwX2xpYl9mbGFnc10gIT0gIiIKKwkgfHwg W2dkYl9jb21waWxlICR7c3JjZmlsZX0gJHtiaW5maWxlfSBleGVjdXRhYmxl ICRiaW5fZmxhZ3NdICE9ICIiIH0geworICAgICAgdW50ZXN0ZWQgIkNvdWxk IG5vdCBjb21waWxlICRiaW5maWxlX2xpYiBvciAkYmluZmlsZS4iCisgICAg ICByZXR1cm4gLTEKKyAgICB9CisKKyAgICBpZiB7JGxpYnNlcGRlYnVnID09 ICJTRVAifSB7CisJaWYge1tnZGJfZ251X3N0cmlwX2RlYnVnICRiaW5maWxl X2xpYl0gIT0gMH0geworCSAgICB1bnN1cHBvcnRlZCAiQ291bGQgbm90IHNw bGl0IGRlYnVnIG9mICRiaW5maWxlX2xpYi4iCisJICAgIHJldHVybgorCX0g ZWxzZSB7CisJICAgIHBhc3MgInNwbGl0IHNvbGliIgorCX0KKyAgICB9CisK KyAgICBjbGVhbl9yZXN0YXJ0ICRleGVjdXRhYmxlCisKKyAgICBpZiAhW3J1 bnRvX21haW5dIHRoZW4geworICAgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1h aW4iCisgICAgICByZXR1cm4gMAorICAgIH0KKworICAgIHNldCBtYXRjaF9z dHIge0FsbCBmdW5jdGlvbnMgbWF0Y2hpbmcgcmVndWxhciBleHByZXNzaW9u ICJmb28iOltcclxuXSp9CisgICAgaWYgeyAiJGxpYnNlcGRlYnVnIiAhPSAi Tk8iICB9IHsKKwlhcHBlbmQgbWF0Y2hfc3RyIHtGaWxlIC4qL2luZm8tZnVu LXNvbGliWy5dYzpbXHJcbl0qfQorCWFwcGVuZCBtYXRjaF9zdHIge2ludCBm b29cKHZvaWRcKTtbXHJcbl0qfQorICAgIH0KKyAgICBhcHBlbmQgbWF0Y2hf c3RyIHtOb24tZGVidWdnaW5nIHN5bWJvbHM6W1xyXG5dKn0KKyAgICBhcHBl bmQgbWF0Y2hfc3RyICIkaGV4ICpmb28oQHBsdCk/XFtcclxuXF0qIgorICAg IGlmIHsgIiRsaWJzZXBkZWJ1ZyIgPT0gIk5PIiAgfSB7CisJYXBwZW5kIG1h dGNoX3N0ciAiJGhleCAqZm9vXFtcclxuXF0qIgorICAgIH0KKworICAgIGdk Yl90ZXN0ICJpbmZvIGZ1biBmb28iICIkbWF0Y2hfc3RyIgorfX0K --20cf307ca4bae4e87b04c1117134--