From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7015 invoked by alias); 15 Nov 2011 04:46:43 -0000 Received: (qmail 7001 invoked by uid 22791); 15 Nov 2011 04:46:40 -0000 X-SWARE-Spam-Status: No, hits=-3.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,TW_BJ X-Spam-Check-By: sourceware.org Received: from mail-vx0-f169.google.com (HELO mail-vx0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 15 Nov 2011 04:46:25 +0000 Received: by vcbfo11 with SMTP id fo11so5614604vcb.0 for ; Mon, 14 Nov 2011 20:46:24 -0800 (PST) Received: by 10.224.217.131 with SMTP id hm3mr16060430qab.81.1321332383883; Mon, 14 Nov 2011 20:46:23 -0800 (PST) MIME-Version: 1.0 Received: by 10.224.217.131 with SMTP id hm3mr16060421qab.81.1321332383744; Mon, 14 Nov 2011 20:46:23 -0800 (PST) Received: by 10.224.6.76 with HTTP; Mon, 14 Nov 2011 20:46:23 -0800 (PST) In-Reply-To: References: <20111106063053.B56F6246194@ruffy.mtv.corp.google.com> <8362irgi5w.fsf@gnu.org> Date: Tue, 15 Nov 2011 04:46:00 -0000 Message-ID: Subject: Re: [RFA, doc RFA] Avoid calling gdb_realpath if basenames are different From: Doug Evans To: Eli Zaretskii , Tom Tromey , Joel Brobecker , gdb-patches Content-Type: multipart/mixed; boundary=20cf300faf9b5d011d04b1beab80 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: 2011-11/txt/msg00372.txt.bz2 --20cf300faf9b5d011d04b1beab80 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 6171 On Fri, Nov 11, 2011 at 12:53 AM, Doug Evans wrote: > On Fri, Nov 11, 2011 at 12:47 AM, Eli Zaretskii wrote: >>> Date: Thu, 10 Nov 2011 15:58:46 -0800 >>> From: Doug Evans >>> >>> 2011-11-10 =A0Doug Evans =A0 >>> >>> =A0 =A0 =A0 =A0 * NEWS: Mention new parameter basenames-may-differ. >>> =A0 =A0 =A0 =A0 * dwarf2read.c (dw2_lookup_symtab): Avoid calling gdb_r= ealpath if >>> =A0 =A0 =A0 =A0 ! basenames_may_differ. >>> =A0 =A0 =A0 =A0 * psymtab.c (lookup_partial_symtab): Ditto. >>> =A0 =A0 =A0 =A0 * symtab.c (lookup_symtab): Ditto. >>> =A0 =A0 =A0 =A0 (basenames_may_differ): New global. >>> =A0 =A0 =A0 =A0 (_initialize_symtab): New parameter basenames-may-diffe= r. >>> =A0 =A0 =A0 =A0 * symtab.h (basenames_may_differ): Declare. >>> >>> =A0 =A0 =A0 =A0 doc/ >>> =A0 =A0 =A0 =A0 * gdb.texinfo (Files): Document basenames-may-differ. >> >> Thanks. >> >>> +set basenames-may-differ >>> +show basenames-may-differ >>> + =A0Set whether a source file may have multiple base names. >>> + =A0A "base name" is the name of a file with the directory part remove= d. >>> + =A0Example: The base name of "/home/user/hello.c" is "hello.c". >>> + =A0When doing file name based lookups, gdb will canonicalize file nam= es >>> + =A0(e.g., expand symlinks) before comparing them, which is an expensi= ve >>> + =A0operation. >>> + =A0If set, gdb will not assume a file is known by one base name, and = thus >>> + =A0it cannot optimize file name comparisions by skipping the canonica= lization >>> + =A0step if the base names are different. >>> + =A0If not set, all source files must be known by one base name, >>> + =A0and gdb will do file name comparisons more efficiently. >> >> I suggest to rearrange the text, so as to put together the parts that >> describe what happens when the option is set. =A0Like this: >> >> =A0Set whether a source file may have multiple base names. >> =A0(A "base name" is the name of a file with the directory part removed. >> =A0Example: The base name of "/home/user/hello.c" is "hello.c".) >> =A0If set, GDB will canonicalize file names (e.g., expand symlinks) >> =A0before comparing them. =A0Canonicalization is an expensive operation, >> =A0but it allows the same file be known by more than one base name. >> =A0If not set (the default), all source files are assumed to have just >> =A0one base name, and gdb will do file name comparisons more efficiently. >> >> OK? >> >>> +When processing file names provided by the user, >>> +@value{GDBN} will canonicalize them and remove symbolic links. >>> +This ensures that @value{GDBN} will find the right file, >>> +even if the debug information specifies an alternate path. >>> +However, with large programs this canonicalization can noticeably slow >>> +down @value{GDBN}. =A0To compensate, @value{GDBN} will try to avoid >>> +this canonicalization wherever possible. =A0One way it can do so >>> +is by first comparing the @samp{base name} of a file. >>> +The @samp{base name} of a file is simply the file's name without >>> +any directory information. =A0For example, the base name of >>> +@file{/home/user/hello.c} is @file{hello.c}. >>> +By doing this @value{GDBN} can skip, for example, >>> +@file{/usr/include/stdio.h} without having to first canonicalize >>> +and then compare the directory names. >>> +This works great, except when the base name of a file >>> +can have multiple names due to symbolic links. >>> +For example, if @file{/home/user/bar.c} is a symbolic link to >>> +@file{/home/user/foo.c} then @value{GDBN} cannot just look at >>> +the base name of two files, it must canonicalize them, expand >>> +all symbolic links, and @emph{then} compare the file names >>> +to see if they match. >>> +Fortunately, having one file known by two different base names >>> +does not generally occur in practice. >>> +Should it occur, however, @value{GDBN} provides an escape hatch >>> +to allow this to work. >>> +By setting @code{basenames-may-differ} to @code{true} >>> +@value{GDBN} will always canonicalize file names before >>> +comparing them, thus ensuring that one file known by multiple >>> +base names are treated as the same file. >> >> This is written as mostly an apology for having this option. =A0That is >> a wrong angle for describing features in a user manual, because the >> user generally trusts the developers by default to DTRT. =A0So I would >> reword it >> >> =A0When processing file names provided by the user, @value{GDBN} >> =A0frequently needs to compare them to the file names recorded in the >> =A0program's debug info. =A0Normally, @value{GDBN} compares just the >> =A0@dfn{base names} of the files as strings, which is reasonably fast >> =A0even for very large programs. =A0(The base name of a file is the last >> =A0portion of its name, after stripping all the leading directories.) >> =A0This shortcut in comparison is based upon the assumption that files >> =A0cannot have more than one base name. =A0This is usually true, but >> =A0references to files that use symlinks or similar filesystem >> =A0facilities violate that assumption. =A0If your program records files >> =A0using such facilities, or if you provide file names to @value{GDBN} >> =A0using symlinks etc., you can set @code{basenames-may-differ} to >> =A0@code{true} to instruct @value{GDBN} to completely canonicalize each >> =A0pair of file names it needs to compare. =A0This will make file-name >> =A0comparisons accurate, but at a price of a significant slowdown. >> >> Do you agree with this wording? >> > > I'm happy if you're happy. > Thanks for the suggested wording. Ok to check in? 2011-11-14 Doug Evans * NEWS: Mention new parameter basenames-may-differ. * dwarf2read.c (dw2_lookup_symtab): Avoid calling gdb_realpath if ! basenames_may_differ. * psymtab.c (lookup_partial_symtab): Ditto. * symtab.c (lookup_symtab): Ditto. (basenames_may_differ): New global. (_initialize_symtab): New parameter basenames-may-differ. * symtab.h (basenames_may_differ): Declare. doc/ * gdb.texinfo (Files): Document basenames-may-differ. --20cf300faf9b5d011d04b1beab80 Content-Type: text/plain; charset=US-ASCII; name="gdb-111114-basenames-may-differ-3.patch.txt" Content-Disposition: attachment; filename="gdb-111114-basenames-may-differ-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gv0f51b60 Content-length: 11782 MjAxMS0xMS0xNCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog TkVXUzogTWVudGlvbiBuZXcgcGFyYW1ldGVyIGJhc2VuYW1lcy1tYXktZGlm ZmVyLgoJKiBkd2FyZjJyZWFkLmMgKGR3Ml9sb29rdXBfc3ltdGFiKTogQXZv aWQgY2FsbGluZyBnZGJfcmVhbHBhdGggaWYKCSEgYmFzZW5hbWVzX21heV9k aWZmZXIuCgkqIHBzeW10YWIuYyAobG9va3VwX3BhcnRpYWxfc3ltdGFiKTog RGl0dG8uCgkqIHN5bXRhYi5jIChsb29rdXBfc3ltdGFiKTogRGl0dG8uCgko YmFzZW5hbWVzX21heV9kaWZmZXIpOiBOZXcgZ2xvYmFsLgoJKF9pbml0aWFs aXplX3N5bXRhYik6IE5ldyBwYXJhbWV0ZXIgYmFzZW5hbWVzLW1heS1kaWZm ZXIuCgkqIHN5bXRhYi5oIChiYXNlbmFtZXNfbWF5X2RpZmZlcik6IERlY2xh cmUuCgoJZG9jLwoJKiBnZGIudGV4aW5mbyAoRmlsZXMpOiBEb2N1bWVudCBi YXNlbmFtZXMtbWF5LWRpZmZlci4KCkluZGV4OiBORVdTCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvTkVXUyx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NjYKZGlmZiAtdSAtcCAtcjEuNDY2 IE5FV1MKLS0tIE5FV1MJMTQgTm92IDIwMTEgMjA6MDc6MjAgLTAwMDAJMS40 NjYKKysrIE5FV1MJMTUgTm92IDIwMTEgMDQ6MTk6MzggLTAwMDAKQEAgLTE1 OSw2ICsxNTksMTcgQEAgc2hvdyBkZWJ1ZyBlbnRyeS12YWx1ZXMKICAgQ29u dHJvbCBkaXNwbGF5IG9mIGRlYnVnZ2luZyBpbmZvIGZvciBkZXRlcm1pbmlu ZyBmcmFtZSBhcmd1bWVudCB2YWx1ZXMgYXQKICAgZnVuY3Rpb24gZW50cnkg YW5kIHZpcnR1YWwgdGFpbCBjYWxsIGZyYW1lcy4KIAorc2V0IGJhc2VuYW1l cy1tYXktZGlmZmVyCitzaG93IGJhc2VuYW1lcy1tYXktZGlmZmVyCisgIFNl dCB3aGV0aGVyIGEgc291cmNlIGZpbGUgbWF5IGhhdmUgbXVsdGlwbGUgYmFz ZSBuYW1lcy4KKyAgKEEgImJhc2UgbmFtZSIgaXMgdGhlIG5hbWUgb2YgYSBm aWxlIHdpdGggdGhlIGRpcmVjdG9yeSBwYXJ0IHJlbW92ZWQuCisgIEV4YW1w bGU6IFRoZSBiYXNlIG5hbWUgb2YgIi9ob21lL3VzZXIvaGVsbG8uYyIgaXMg ImhlbGxvLmMiLikKKyAgSWYgc2V0LCBHREIgd2lsbCBjYW5vbmljYWxpemUg ZmlsZSBuYW1lcyAoZS5nLiwgZXhwYW5kIHN5bWxpbmtzKQorICBiZWZvcmUg Y29tcGFyaW5nIHRoZW0uICBDYW5vbmljYWxpemF0aW9uIGlzIGFuIGV4cGVu c2l2ZSBvcGVyYXRpb24sCisgIGJ1dCBpdCBhbGxvd3MgdGhlIHNhbWUgZmls ZSBiZSBrbm93biBieSBtb3JlIHRoYW4gb25lIGJhc2UgbmFtZS4KKyAgSWYg bm90IHNldCAodGhlIGRlZmF1bHQpLCBhbGwgc291cmNlIGZpbGVzIGFyZSBh c3N1bWVkIHRvIGhhdmUganVzdAorICBvbmUgYmFzZSBuYW1lLCBhbmQgZ2Ri IHdpbGwgZG8gZmlsZSBuYW1lIGNvbXBhcmlzb25zIG1vcmUgZWZmaWNpZW50 bHkuCisKICogTmV3IHJlbW90ZSBwYWNrZXRzCiAKIFFURW5hYmxlCkluZGV4 OiBkd2FyZjJyZWFkLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9kd2FyZjJyZWFkLmMsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuNTgwCmRpZmYgLXUgLXAgLXIxLjU4MCBkd2FyZjJyZWFk LmMKLS0tIGR3YXJmMnJlYWQuYwkxMSBOb3YgMjAxMSAwMDo0MzowMyAtMDAw MAkxLjU4MAorKysgZHdhcmYycmVhZC5jCTE1IE5vdiAyMDExIDA0OjE5OjM5 IC0wMDAwCkBAIC0yNDQ1LDcgKzI0NDUsOCBAQCBkdzJfbG9va3VwX3N5bXRh YiAoc3RydWN0IG9iamZpbGUgKm9iamZpCiAJCSAgIHN0cnVjdCBzeW10YWIg KipyZXN1bHQpCiB7CiAgIGludCBpOwotICBpbnQgY2hlY2tfYmFzZW5hbWUg PSBsYmFzZW5hbWUgKG5hbWUpID09IG5hbWU7CisgIGNvbnN0IGNoYXIgKm5h bWVfYmFzZW5hbWUgPSBsYmFzZW5hbWUgKG5hbWUpOworICBpbnQgY2hlY2tf YmFzZW5hbWUgPSBuYW1lX2Jhc2VuYW1lID09IG5hbWU7CiAgIHN0cnVjdCBk d2FyZjJfcGVyX2N1X2RhdGEgKmJhc2VfY3UgPSBOVUxMOwogCiAgIGR3Ml9z ZXR1cCAob2JqZmlsZSk7CkBAIC0yNDc4LDYgKzI0NzksMTIgQEAgZHcyX2xv b2t1cF9zeW10YWIgKHN0cnVjdCBvYmpmaWxlICpvYmpmaQogCSAgICAgICYm IEZJTEVOQU1FX0NNUCAobGJhc2VuYW1lICh0aGlzX25hbWUpLCBuYW1lKSA9 PSAwKQogCSAgICBiYXNlX2N1ID0gcGVyX2N1OwogCisJICAvKiBCZWZvcmUg d2UgaW52b2tlIHJlYWxwYXRoLCB3aGljaCBjYW4gZ2V0IGV4cGVuc2l2ZSB3 aGVuIG1hbnkKKwkgICAgIGZpbGVzIGFyZSBpbnZvbHZlZCwgZG8gYSBxdWlj ayBjb21wYXJpc29uIG9mIHRoZSBiYXNlbmFtZXMuICAqLworCSAgaWYgKCEg YmFzZW5hbWVzX21heV9kaWZmZXIKKwkgICAgICAmJiBGSUxFTkFNRV9DTVAg KGxiYXNlbmFtZSAodGhpc19uYW1lKSwgbmFtZV9iYXNlbmFtZSkgIT0gMCkK KwkgICAgY29udGludWU7CisKIAkgIGlmIChmdWxsX3BhdGggIT0gTlVMTCkK IAkgICAgewogCSAgICAgIGNvbnN0IGNoYXIgKnRoaXNfcmVhbF9uYW1lID0g ZHcyX2dldF9yZWFsX3BhdGggKG9iamZpbGUsCkluZGV4OiBwc3ltdGFiLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9wc3ltdGFiLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzMKZGlm ZiAtdSAtcCAtcjEuMzMgcHN5bXRhYi5jCi0tLSBwc3ltdGFiLmMJMTEgTm92 IDIwMTEgMDA6NDM6MDQgLTAwMDAJMS4zMworKysgcHN5bXRhYi5jCTE1IE5v diAyMDExIDA0OjE5OjM5IC0wMDAwCkBAIC0xMzQsNiArMTM0LDcgQEAgbG9v a3VwX3BhcnRpYWxfc3ltdGFiIChzdHJ1Y3Qgb2JqZmlsZSAqbwogCQkgICAg ICAgY29uc3QgY2hhciAqZnVsbF9wYXRoLCBjb25zdCBjaGFyICpyZWFsX3Bh dGgpCiB7CiAgIHN0cnVjdCBwYXJ0aWFsX3N5bXRhYiAqcHN0OworICBjb25z dCBjaGFyICpuYW1lX2Jhc2VuYW1lID0gbGJhc2VuYW1lIChuYW1lKTsKIAog ICBBTExfT0JKRklMRV9QU1lNVEFCU19SRVFVSVJFRCAob2JqZmlsZSwgcHN0 KQogICB7CkBAIC0xNDIsNiArMTQzLDEyIEBAIGxvb2t1cF9wYXJ0aWFsX3N5 bXRhYiAoc3RydWN0IG9iamZpbGUgKm8KIAlyZXR1cm4gKHBzdCk7CiAgICAg ICB9CiAKKyAgICAvKiBCZWZvcmUgd2UgaW52b2tlIHJlYWxwYXRoLCB3aGlj aCBjYW4gZ2V0IGV4cGVuc2l2ZSB3aGVuIG1hbnkKKyAgICAgICBmaWxlcyBh cmUgaW52b2x2ZWQsIGRvIGEgcXVpY2sgY29tcGFyaXNvbiBvZiB0aGUgYmFz ZW5hbWVzLiAgKi8KKyAgICBpZiAoISBiYXNlbmFtZXNfbWF5X2RpZmZlcgor CSYmIEZJTEVOQU1FX0NNUCAobmFtZV9iYXNlbmFtZSwgbGJhc2VuYW1lIChw c3QtPmZpbGVuYW1lKSkgIT0gMCkKKyAgICAgIGNvbnRpbnVlOworCiAgICAg LyogSWYgdGhlIHVzZXIgZ2F2ZSB1cyBhbiBhYnNvbHV0ZSBwYXRoLCB0cnkg dG8gZmluZCB0aGUgZmlsZSBpbgogICAgICAgIHRoaXMgc3ltdGFiIGFuZCB1 c2UgaXRzIGFic29sdXRlIHBhdGguICAqLwogICAgIGlmIChmdWxsX3BhdGgg IT0gTlVMTCkKQEAgLTE3Miw3ICsxNzksNyBAQCBsb29rdXBfcGFydGlhbF9z eW10YWIgKHN0cnVjdCBvYmpmaWxlICpvCiAKICAgLyogTm93LCBzZWFyY2gg Zm9yIGEgbWF0Y2hpbmcgdGFpbCAob25seSBpZiBuYW1lIGRvZXNuJ3QgaGF2 ZSBhbnkgZGlycykuICAqLwogCi0gIGlmIChsYmFzZW5hbWUgKG5hbWUpID09 IG5hbWUpCisgIGlmIChuYW1lX2Jhc2VuYW1lID09IG5hbWUpCiAgICAgQUxM X09CSkZJTEVfUFNZTVRBQlNfUkVRVUlSRUQgKG9iamZpbGUsIHBzdCkKICAg ICB7CiAgICAgICBpZiAoRklMRU5BTUVfQ01QIChsYmFzZW5hbWUgKHBzdC0+ ZmlsZW5hbWUpLCBuYW1lKSA9PSAwKQpJbmRleDogc3ltdGFiLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9z eW10YWIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yODYKZGlmZiAtdSAt cCAtcjEuMjg2IHN5bXRhYi5jCi0tLSBzeW10YWIuYwkxMSBOb3YgMjAxMSAw MDo0MzowNCAtMDAwMAkxLjI4NgorKysgc3ltdGFiLmMJMTUgTm92IDIwMTEg MDQ6MTk6MzkgLTAwMDAKQEAgLTExMiw2ICsxMTIsMTEgQEAgdm9pZCBfaW5p dGlhbGl6ZV9zeW10YWIgKHZvaWQpOwogCiAvKiAqLwogCisvKiBOb24temVy byBpZiBhIGZpbGUgbWF5IGJlIGtub3duIGJ5IHR3byBkaWZmZXJlbnQgYmFz ZW5hbWVzLgorICAgVGhpcyBpcyB0aGUgdW5jb21tb24gY2FzZSwgYW5kIHNp Z25pZmljYW50bHkgc2xvd3MgZG93biBnZGIuCisgICBEZWZhdWx0IHNldCB0 byAib2ZmIiB0byBub3Qgc2xvdyBkb3duIHRoZSBjb21tb24gY2FzZS4gICov CitpbnQgYmFzZW5hbWVzX21heV9kaWZmZXIgPSAwOworCiAvKiBBbGxvdyB0 aGUgdXNlciB0byBjb25maWd1cmUgdGhlIGRlYnVnZ2VyIGJlaGF2aW9yIHdp dGggcmVzcGVjdAogICAgdG8gbXVsdGlwbGUtY2hvaWNlIG1lbnVzIHdoZW4g bW9yZSB0aGFuIG9uZSBzeW1ib2wgbWF0Y2hlcyBkdXJpbmcKICAgIGEgc3lt Ym9sIGxvb2t1cC4gICovCkBAIC0xNTUsNiArMTYwLDcgQEAgbG9va3VwX3N5 bXRhYiAoY29uc3QgY2hhciAqbmFtZSkKICAgY2hhciAqcmVhbF9wYXRoID0g TlVMTDsKICAgY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKICAgc3RydWN0IGNs ZWFudXAgKmNsZWFudXA7CisgIGNvbnN0IGNoYXIqIGJhc2VfbmFtZSA9IGxi YXNlbmFtZSAobmFtZSk7CiAKICAgY2xlYW51cCA9IG1ha2VfY2xlYW51cCAo bnVsbF9jbGVhbnVwLCBOVUxMKTsKIApAQCAtMTgwLDYgKzE4NiwxMiBAQCBn b3Rfc3ltdGFiOgogCXJldHVybiBzOwogICAgICAgfQogCisgICAgLyogQmVm b3JlIHdlIGludm9rZSByZWFscGF0aCwgd2hpY2ggY2FuIGdldCBleHBlbnNp dmUgd2hlbiBtYW55CisgICAgICAgZmlsZXMgYXJlIGludm9sdmVkLCBkbyBh IHF1aWNrIGNvbXBhcmlzb24gb2YgdGhlIGJhc2VuYW1lcy4gICovCisgICAg aWYgKCEgYmFzZW5hbWVzX21heV9kaWZmZXIKKwkmJiBGSUxFTkFNRV9DTVAg KGJhc2VfbmFtZSwgbGJhc2VuYW1lIChzLT5maWxlbmFtZSkpICE9IDApCisg ICAgICBjb250aW51ZTsKKwogICAgIC8qIElmIHRoZSB1c2VyIGdhdmUgdXMg YW4gYWJzb2x1dGUgcGF0aCwgdHJ5IHRvIGZpbmQgdGhlIGZpbGUgaW4KICAg ICAgICB0aGlzIHN5bXRhYiBhbmQgdXNlIGl0cyBhYnNvbHV0ZSBwYXRoLiAg Ki8KIApAQCAtNDg4NSw1ICs0ODk3LDE5IEBAIFNob3cgaG93IHRoZSBkZWJ1 Z2dlciBoYW5kbGVzIGFtYmlndWl0aWUKIFZhbGlkIHZhbHVlcyBhcmUgXCJh c2tcIiwgXCJhbGxcIiwgXCJjYW5jZWxcIiwgYW5kIHRoZSBkZWZhdWx0IGlz IFwiYWxsXCIuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBO VUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKIAorICBhZGRfc2V0c2hvd19i b29sZWFuX2NtZCAoImJhc2VuYW1lcy1tYXktZGlmZmVyIiwgY2xhc3Nfb2Jz Y3VyZSwKKwkJCSAgICZiYXNlbmFtZXNfbWF5X2RpZmZlciwgXygiXAorU2V0 IHdoZXRoZXIgYSBzb3VyY2UgZmlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBiYXNl IG5hbWVzLiIpLCBfKCJcCitTaG93IHdoZXRoZXIgYSBzb3VyY2UgZmlsZSBt YXkgaGF2ZSBtdWx0aXBsZSBiYXNlIG5hbWVzLiIpLCBfKCJcCisoQSBcImJh c2UgbmFtZVwiIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSB3aXRoIHRoZSBkaXJl Y3RvcnkgcGFydCByZW1vdmVkLlxuXAorRXhhbXBsZTogVGhlIGJhc2UgbmFt ZSBvZiBcIi9ob21lL3VzZXIvaGVsbG8uY1wiIGlzIFwiaGVsbG8uY1wiLilc blwKK0lmIHNldCwgR0RCIHdpbGwgY2Fub25pY2FsaXplIGZpbGUgbmFtZXMg KGUuZy4sIGV4cGFuZCBzeW1saW5rcylcblwKK2JlZm9yZSBjb21wYXJpbmcg dGhlbS4gIENhbm9uaWNhbGl6YXRpb24gaXMgYW4gZXhwZW5zaXZlIG9wZXJh dGlvbixcblwKK2J1dCBpdCBhbGxvd3MgdGhlIHNhbWUgZmlsZSBiZSBrbm93 biBieSBtb3JlIHRoYW4gb25lIGJhc2UgbmFtZS5cblwKK0lmIG5vdCBzZXQg KHRoZSBkZWZhdWx0KSwgYWxsIHNvdXJjZSBmaWxlcyBhcmUgYXNzdW1lZCB0 byBoYXZlIGp1c3RcblwKK29uZSBiYXNlIG5hbWUsIGFuZCBnZGIgd2lsbCBk byBmaWxlIG5hbWUgY29tcGFyaXNvbnMgbW9yZSBlZmZpY2llbnRseS4iKSwK KwkJCSAgIE5VTEwsIE5VTEwsCisJCQkgICAmc2V0bGlzdCwgJnNob3dsaXN0 KTsKKwogICBvYnNlcnZlcl9hdHRhY2hfZXhlY3V0YWJsZV9jaGFuZ2VkIChz eW10YWJfb2JzZXJ2ZXJfZXhlY3V0YWJsZV9jaGFuZ2VkKTsKIH0KSW5kZXg6 IHN5bXRhYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvc3ltdGFiLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMTkxCmRpZmYgLXUgLXAgLXIxLjE5MSBzeW10YWIuaAotLS0gc3ltdGFi LmgJMTAgTm92IDIwMTEgMjA6MjE6MjggLTAwMDAJMS4xOTEKKysrIHN5bXRh Yi5oCTE1IE5vdiAyMDExIDA0OjE5OjM5IC0wMDAwCkBAIC0xMzA2LDQgKzEz MDYsNiBAQCB2b2lkIGZpeHVwX3NlY3Rpb24gKHN0cnVjdCBnZW5lcmFsX3N5 bWJvCiAKIHN0cnVjdCBvYmpmaWxlICpsb29rdXBfb2JqZmlsZV9mcm9tX2Js b2NrIChjb25zdCBzdHJ1Y3QgYmxvY2sgKmJsb2NrKTsKIAorZXh0ZXJuIGlu dCBiYXNlbmFtZXNfbWF5X2RpZmZlcjsKKwogI2VuZGlmIC8qICFkZWZpbmVk KFNZTVRBQl9IKSAqLwpJbmRleDogZG9jL2dkYi50ZXhpbmZvCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZG9j L2dkYi50ZXhpbmZvLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5NQpkaWZm IC11IC1wIC1yMS44OTUgZ2RiLnRleGluZm8KLS0tIGRvYy9nZGIudGV4aW5m bwkxNCBOb3YgMjAxMSAyMDowNzoyMyAtMDAwMAkxLjg5NQorKysgZG9jL2dk Yi50ZXhpbmZvCTE1IE5vdiAyMDExIDA0OjE5OjM5IC0wMDAwCkBAIC0xNTcw Miw2ICsxNTcwMiwzMyBAQCBUaGlzIGlzIHRoZSBkZWZhdWx0LgogQGVuZCB0 YWJsZQogQGVuZCB0YWJsZQogCitAY2luZGV4IGZpbGUgbmFtZSBjYW5vbmlj YWxpemF0aW9uCitAY2luZGV4IGJhc2UgbmFtZSBkaWZmZXJlbmNlcworV2hl biBwcm9jZXNzaW5nIGZpbGUgbmFtZXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIs IEB2YWx1ZXtHREJOfQorZnJlcXVlbnRseSBuZWVkcyB0byBjb21wYXJlIHRo ZW0gdG8gdGhlIGZpbGUgbmFtZXMgcmVjb3JkZWQgaW4gdGhlCitwcm9ncmFt J3MgZGVidWcgaW5mby4gIE5vcm1hbGx5LCBAdmFsdWV7R0RCTn0gY29tcGFy ZXMganVzdCB0aGUKK0BkZm57YmFzZSBuYW1lc30gb2YgdGhlIGZpbGVzIGFz IHN0cmluZ3MsIHdoaWNoIGlzIHJlYXNvbmFibHkgZmFzdAorZXZlbiBmb3Ig dmVyeSBsYXJnZSBwcm9ncmFtcy4gIChUaGUgYmFzZSBuYW1lIG9mIGEgZmls ZSBpcyB0aGUgbGFzdAorcG9ydGlvbiBvZiBpdHMgbmFtZSwgYWZ0ZXIgc3Ry aXBwaW5nIGFsbCB0aGUgbGVhZGluZyBkaXJlY3Rvcmllcy4pCitUaGlzIHNo b3J0Y3V0IGluIGNvbXBhcmlzb24gaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1w dGlvbiB0aGF0IGZpbGVzCitjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGJh c2UgbmFtZS4gIFRoaXMgaXMgdXN1YWxseSB0cnVlLCBidXQKK3JlZmVyZW5j ZXMgdG8gZmlsZXMgdGhhdCB1c2Ugc3ltbGlua3Mgb3Igc2ltaWxhciBmaWxl c3lzdGVtCitmYWNpbGl0aWVzIHZpb2xhdGUgdGhhdCBhc3N1bXB0aW9uLiAg SWYgeW91ciBwcm9ncmFtIHJlY29yZHMgZmlsZXMKK3VzaW5nIHN1Y2ggZmFj aWxpdGllcywgb3IgaWYgeW91IHByb3ZpZGUgZmlsZSBuYW1lcyB0byBAdmFs dWV7R0RCTn0KK3VzaW5nIHN5bWxpbmtzIGV0Yy4sIHlvdSBjYW4gc2V0IEBj b2Rle2Jhc2VuYW1lcy1tYXktZGlmZmVyfSB0bworQGNvZGV7dHJ1ZX0gdG8g aW5zdHJ1Y3QgQHZhbHVle0dEQk59IHRvIGNvbXBsZXRlbHkgY2Fub25pY2Fs aXplIGVhY2gKK3BhaXIgb2YgZmlsZSBuYW1lcyBpdCBuZWVkcyB0byBjb21w YXJlLiAgVGhpcyB3aWxsIG1ha2UgZmlsZS1uYW1lCitjb21wYXJpc29ucyBh Y2N1cmF0ZSwgYnV0IGF0IGEgcHJpY2Ugb2YgYSBzaWduaWZpY2FudCBzbG93 ZG93bi4KKworQHRhYmxlIEBjb2RlCitAaXRlbSBzZXQgYmFzZW5hbWVzLW1h eS1kaWZmZXIKK0BraW5kZXggc2V0IGJhc2VuYW1lcy1tYXktZGlmZmVyCitT ZXQgd2hldGhlciBhIHNvdXJjZSBmaWxlIG1heSBoYXZlIG11bHRpcGxlIGJh c2UgbmFtZXMuCisKK0BpdGVtIHNob3cgYmFzZW5hbWVzLW1heS1kaWZmZXIK K0BraW5kZXggc2hvdyBiYXNlbmFtZXMtbWF5LWRpZmZlcgorU2hvdyB3aGV0 aGVyIGEgc291cmNlIGZpbGUgbWF5IGhhdmUgbXVsdGlwbGUgYmFzZSBuYW1l cy4KK0BlbmQgdGFibGUKIAogQG5vZGUgU2VwYXJhdGUgRGVidWcgRmlsZXMK IEBzZWN0aW9uIERlYnVnZ2luZyBJbmZvcm1hdGlvbiBpbiBTZXBhcmF0ZSBG aWxlcwo= --20cf300faf9b5d011d04b1beab80--