From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1690 invoked by alias); 24 Aug 2010 08:30:16 -0000 Received: (qmail 1659 invoked by uid 22791); 24 Aug 2010 08:30:10 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_HELO_PASS,TW_BJ,TW_GD,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 24 Aug 2010 08:29:59 +0000 Received: from wpaz24.hot.corp.google.com (wpaz24.hot.corp.google.com [172.24.198.88]) by smtp-out.google.com with ESMTP id o7O8TvTc009154 for ; Tue, 24 Aug 2010 01:29:57 -0700 Received: from vws10 (vws10.prod.google.com [10.241.21.138]) by wpaz24.hot.corp.google.com with ESMTP id o7O8TtGO006426 for ; Tue, 24 Aug 2010 01:29:56 -0700 Received: by vws10 with SMTP id 10so259751vws.31 for ; Tue, 24 Aug 2010 01:29:55 -0700 (PDT) MIME-Version: 1.0 Received: by 10.220.157.139 with SMTP id b11mr3855862vcx.151.1282638594540; Tue, 24 Aug 2010 01:29:54 -0700 (PDT) Received: by 10.220.189.205 with HTTP; Tue, 24 Aug 2010 01:29:54 -0700 (PDT) In-Reply-To: <20100824000327.7787684B8E@ruffy.mtv.corp.google.com> References: <20100824000327.7787684B8E@ruffy.mtv.corp.google.com> Date: Tue, 24 Aug 2010 08:30:00 -0000 Message-ID: Subject: Re: [RFA] symtab/11942: rewrite dwarf2read.c type_hash usage From: Doug Evans To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=e0cb4e6ff629cd84fa048e8d91fa 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: 2010-08/txt/msg00406.txt.bz2 --e0cb4e6ff629cd84fa048e8d91fa Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 2874 On Mon, Aug 23, 2010 at 5:03 PM, Doug Evans wrote: > Hi. > > This patch does two things. > First, it fixes PR 11942. =A0Second it does so in a way that improves > the type_hash usage in dwarf2read.c. > > Since this is a significant change to the use of the type hashing > in dwarf2read.c, I'd like another set of eyes to review it. =A0Thanks. > > The basic idea here is that instead of having one type_hash per CU, > we have one type_hash for dies from .debug_info and have another type_hash > for dies from .debug_types. =A0Types are hashed based on the associated > die's offset and are not freed when a CUs dwarf2_cu structure is freed, > thus I can't see a need for one type_hash per CU. > Plus, when looking up a type for a given die, gdb first reads in the > die at the given offset and then looks up the type for the die at that > offset. =A0Since we hash types based on die offsets, I can't see a reason > why we don't just lookup the type for the die at the given offset first, > and only if that fails read in the die (this is useful, e.g., when > dies have been flushed because the CU has reached max-cache-age). > > Regression tested on amd64-linux (with a gcc that understands -gdwarf-4). > > Ok to check in? Apologies for the follow-up. Further testing revealed I messed up signatured type lookups in lookup_die_type (old code that didn't get revisited in my final review before submission). Here's a new patch. [for reference sake, I'd rather use a different name for the function read_die_type, e.g. lookup_or_read_die_type, or some such. I can make that change if desired.] 2010-08-23 Doug Evans PR symtab/11942 * dwarf2read.c (dwarf2_per_objfile): New members debug_info_type_ha= sh, debug_types_type_hash. (dwarf2_cu, dwarf2_per_cu_data): Delete member type_hash. All uses updated. (lookup_die_type): Renamed from tag_type_to_tag. First look in appropriate type_hash table. All callers updated. (allocate_signatured_type_table): Renamed from allocate_signatured_type_hash_table. All callers updated. (create_signatured_type_table_from_index): Renamed from create_signatured_type_hash_from_index. All callers updated. (read_die_type): Add comment. Move actual reading to ... (read_die_type_1): ... here. New function. (follow_die_ref_or_sig): Tweak comment. (set_die_type): Rewrite to use appropriate choice of debug_info_type_hash or debug_types_type_hash. (get_die_type_at_offset): New function. (get_die_type): Call it. testsuite/ PR symtab/11942 * gdb.dwarf2/dw4-sig-types.cc: New file. * gdb.dwarf2/dw4-sig-types.h: New file. * gdb.dwarf2/dw4-sig-types-b.cc: New file. * gdb.dwarf2/dw4-sig-types.exp: New file. --e0cb4e6ff629cd84fa048e8d91fa Content-Type: text/plain; charset=US-ASCII; name="gdb-100823-11942-2.patch.txt" Content-Disposition: attachment; filename="gdb-100823-11942-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gd8hsuf20 Content-length: 25665 MjAxMC0wOC0yMyAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCVBS IHN5bXRhYi8xMTk0MgoJKiBkd2FyZjJyZWFkLmMgKGR3YXJmMl9wZXJfb2Jq ZmlsZSk6IE5ldyBtZW1iZXJzIGRlYnVnX2luZm9fdHlwZV9oYXNoLAoJZGVi dWdfdHlwZXNfdHlwZV9oYXNoLgoJKGR3YXJmMl9jdSwgZHdhcmYyX3Blcl9j dV9kYXRhKTogRGVsZXRlIG1lbWJlciB0eXBlX2hhc2guCglBbGwgdXNlcyB1 cGRhdGVkLgoJKGxvb2t1cF9kaWVfdHlwZSk6IFJlbmFtZWQgZnJvbSB0YWdf dHlwZV90b190YWcuICBGaXJzdCBsb29rIGluCglhcHByb3ByaWF0ZSB0eXBl X2hhc2ggdGFibGUuICBBbGwgY2FsbGVycyB1cGRhdGVkLgoJKGFsbG9jYXRl X3NpZ25hdHVyZWRfdHlwZV90YWJsZSk6IFJlbmFtZWQgZnJvbQoJYWxsb2Nh dGVfc2lnbmF0dXJlZF90eXBlX2hhc2hfdGFibGUuICBBbGwgY2FsbGVycyB1 cGRhdGVkLgoJKGNyZWF0ZV9zaWduYXR1cmVkX3R5cGVfdGFibGVfZnJvbV9p bmRleCk6IFJlbmFtZWQgZnJvbQoJY3JlYXRlX3NpZ25hdHVyZWRfdHlwZV9o YXNoX2Zyb21faW5kZXguICBBbGwgY2FsbGVycyB1cGRhdGVkLgoJKHJlYWRf ZGllX3R5cGUpOiBBZGQgY29tbWVudC4gIE1vdmUgYWN0dWFsIHJlYWRpbmcg dG8gLi4uCgkocmVhZF9kaWVfdHlwZV8xKTogLi4uIGhlcmUuICBOZXcgZnVu Y3Rpb24uCgkoZm9sbG93X2RpZV9yZWZfb3Jfc2lnKTogVHdlYWsgY29tbWVu dC4KCShzZXRfZGllX3R5cGUpOiBSZXdyaXRlIHRvIHVzZSBhcHByb3ByaWF0 ZSBjaG9pY2Ugb2YKCWRlYnVnX2luZm9fdHlwZV9oYXNoIG9yIGRlYnVnX3R5 cGVzX3R5cGVfaGFzaC4KCShnZXRfZGllX3R5cGVfYXRfb2Zmc2V0KTogTmV3 IGZ1bmN0aW9uLgoJKGdldF9kaWVfdHlwZSk6IENhbGwgaXQuCgoJdGVzdHN1 aXRlLwoJUFIgc3ltdGFiLzExOTQyCgkqIGdkYi5kd2FyZjIvZHc0LXNpZy10 eXBlcy5jYzogTmV3IGZpbGUuCgkqIGdkYi5kd2FyZjIvZHc0LXNpZy10eXBl cy5oOiBOZXcgZmlsZS4KCSogZ2RiLmR3YXJmMi9kdzQtc2lnLXR5cGVzLWIu Y2M6IE5ldyBmaWxlLgoJKiBnZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuZXhw OiBOZXcgZmlsZS4KCkluZGV4OiBkd2FyZjJyZWFkLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9kd2FyZjJy ZWFkLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQxCmRpZmYgLXUgLXAg LXIxLjQ0MSBkd2FyZjJyZWFkLmMKLS0tIGR3YXJmMnJlYWQuYwkyMyBBdWcg MjAxMCAyMTo0OToyNiAtMDAwMAkxLjQ0MQorKysgZHdhcmYycmVhZC5jCTI0 IEF1ZyAyMDEwIDA4OjE1OjAyIC0wMDAwCkBAIC0yMTMsNiArMjEzLDE2IEBA IHN0cnVjdCBkd2FyZjJfcGVyX29iamZpbGUKICAgLyogU2V0IGR1cmluZyBw YXJ0aWFsIHN5bWJvbCByZWFkaW5nLCB0byBwcmV2ZW50IHF1ZXVlaW5nIG9m IGZ1bGwKICAgICAgc3ltYm9scy4gICovCiAgIGludCByZWFkaW5nX3BhcnRp YWxfc3ltYm9sczsKKworICAvKiBUYWJsZSBtYXBwaW5nIHR5cGUgLmRlYnVn X2luZm8gRElFIG9mZnNldHMgdG8gdHlwZXMuCisgICAgIFRoaXMgaXMgTlVM TCBpZiBub3QgYWxsb2NhdGVkIHlldC4KKyAgICAgSXQgKGN1cnJlbnRseSkg bWFrZXMgc2Vuc2UgdG8gYWxsb2NhdGUgZGVidWdfdHlwZXNfdHlwZV9oYXNo IGxhemlseS4KKyAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIHdlIGFsbG9j YXRlIGJvdGggbGF6aWx5LiAgKi8KKyAgaHRhYl90IGRlYnVnX2luZm9fdHlw ZV9oYXNoOworCisgIC8qIFRhYmxlIG1hcHBpbmcgdHlwZSAuZGVidWdfdHlw ZXMgRElFIG9mZnNldHMgdG8gdHlwZXMuCisgICAgIFRoaXMgaXMgTlVMTCBp ZiBub3QgYWxsb2NhdGVkIHlldC4gICovCisgIGh0YWJfdCBkZWJ1Z190eXBl c190eXBlX2hhc2g7CiB9OwogCiBzdGF0aWMgc3RydWN0IGR3YXJmMl9wZXJf b2JqZmlsZSAqZHdhcmYyX3Blcl9vYmpmaWxlOwpAQCAtMzQ1LDExICszNTUs NiBAQCBzdHJ1Y3QgZHdhcmYyX2N1CiAgIC8qIEJhY2tjaGFpbiB0byBvdXIg cGVyX2N1IGVudHJ5IGlmIHRoZSB0cmVlIGhhcyBiZWVuIGJ1aWx0LiAgKi8K ICAgc3RydWN0IGR3YXJmMl9wZXJfY3VfZGF0YSAqcGVyX2N1OwogCi0gIC8q IFBvaW50ZXIgdG8gdGhlIGRpZSAtPiB0eXBlIG1hcC4gIEFsdGhvdWdoIGl0 IGlzIHN0b3JlZAotICAgICBwZXJtYW5lbnRseSBpbiBwZXJfY3UsIHdlIGNv cHkgaXQgaGVyZSB0byBhdm9pZCBkb3VibGUKLSAgICAgaW5kaXJlY3Rpb24u ICAqLwotICBodGFiX3QgdHlwZV9oYXNoOwotCiAgIC8qIEhvdyBtYW55IGNv bXBpbGF0aW9uIHVuaXRzIGFnbyB3YXMgdGhpcyBDVSBsYXN0IHJlZmVyZW5j ZWQ/ICAqLwogICBpbnQgbGFzdF91c2VkOwogCkBAIC00NDUsMTIgKzQ1MCw2 IEBAIHN0cnVjdCBkd2FyZjJfcGVyX2N1X2RhdGEKICAgICAgb2YgdGhlIENV IGNhY2hlIGl0IGdldHMgcmVzZXQgdG8gTlVMTCBhZ2Fpbi4gICovCiAgIHN0 cnVjdCBkd2FyZjJfY3UgKmN1OwogCi0gIC8qIElmIGZ1bGwgc3ltYm9scyBm b3IgdGhpcyBDVSBoYXZlIGJlZW4gcmVhZCBpbiwgdGhlbiB0aGlzIGZpZWxk Ci0gICAgIGhvbGRzIGEgbWFwIG9mIERJRSBvZmZzZXRzIHRvIHR5cGVzLiAg SXQgaXNuJ3QgYWx3YXlzIHBvc3NpYmxlCi0gICAgIHRvIHJlY29uc3RydWN0 IHRoaXMgaW5mb3JtYXRpb24gbGF0ZXIsIHNvIHdlIGhhdmUgdG8gcHJlc2Vy dmUKLSAgICAgaXQuICAqLwotICBodGFiX3QgdHlwZV9oYXNoOwotCiAgIC8q IFRoZSBjb3JyZXNwb25kaW5nIG9iamZpbGUuICAqLwogICBzdHJ1Y3Qgb2Jq ZmlsZSAqb2JqZmlsZTsKIApAQCAtMTAzOSwxMCArMTAzOCwxMyBAQCBzdGF0 aWMgdm9pZCBzZXRfZGVzY3JpcHRpdmVfdHlwZSAoc3RydWN0CiBzdGF0aWMg c3RydWN0IHR5cGUgKmRpZV9jb250YWluaW5nX3R5cGUgKHN0cnVjdCBkaWVf aW5mbyAqLAogCQkJCQkgc3RydWN0IGR3YXJmMl9jdSAqKTsKIAotc3RhdGlj IHN0cnVjdCB0eXBlICp0YWdfdHlwZV90b190eXBlIChzdHJ1Y3QgZGllX2lu Zm8gKiwgc3RydWN0IGR3YXJmMl9jdSAqKTsKK3N0YXRpYyBzdHJ1Y3QgdHlw ZSAqbG9va3VwX2RpZV90eXBlIChzdHJ1Y3QgZGllX2luZm8gKiwgc3RydWN0 IGF0dHJpYnV0ZSAqLAorCQkJCSAgICAgc3RydWN0IGR3YXJmMl9jdSAqKTsK IAogc3RhdGljIHN0cnVjdCB0eXBlICpyZWFkX3R5cGVfZGllIChzdHJ1Y3Qg ZGllX2luZm8gKiwgc3RydWN0IGR3YXJmMl9jdSAqKTsKIAorc3RhdGljIHN0 cnVjdCB0eXBlICpyZWFkX3R5cGVfZGllXzEgKHN0cnVjdCBkaWVfaW5mbyAq LCBzdHJ1Y3QgZHdhcmYyX2N1ICopOworCiBzdGF0aWMgY2hhciAqZGV0ZXJt aW5lX3ByZWZpeCAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2Fy ZjJfY3UgKik7CiAKIHN0YXRpYyBjaGFyICp0eXBlbmFtZV9jb25jYXQgKHN0 cnVjdCBvYnN0YWNrICpvYnMsIGNvbnN0IGNoYXIgKnByZWZpeCwKQEAgLTEy NjUsNiArMTI2Nyw5IEBAIHN0YXRpYyB2b2lkIGR3YXJmMl9tYXJrIChzdHJ1 Y3QgZHdhcmYyX2MKIAogc3RhdGljIHZvaWQgZHdhcmYyX2NsZWFyX21hcmtz IChzdHJ1Y3QgZHdhcmYyX3Blcl9jdV9kYXRhICopOwogCitzdGF0aWMgc3Ry dWN0IHR5cGUgKmdldF9kaWVfdHlwZV9hdF9vZmZzZXQgKHVuc2lnbmVkIGlu dCwKKwkJCQkJICAgIHN0cnVjdCBkd2FyZjJfcGVyX2N1X2RhdGEgKnBlcl9j dSk7CisKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAqZ2V0X2RpZV90eXBlIChzdHJ1 Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpOwogCiBz dGF0aWMgdm9pZCBkd2FyZjJfcmVsZWFzZV9xdWV1ZSAodm9pZCAqZHVtbXkp OwpAQCAtMTI5MCw3ICsxMjk1LDcgQEAgc3RhdGljIGdkYl9ieXRlICpwYXJ0 aWFsX3JlYWRfY29tcF91bml0Xwogc3RhdGljIHZvaWQgaW5pdF9jdV9kaWVf cmVhZGVyIChzdHJ1Y3QgZGllX3JlYWRlcl9zcGVjcyAqcmVhZGVyLAogCQkJ CXN0cnVjdCBkd2FyZjJfY3UgKmN1KTsKIAotc3RhdGljIGh0YWJfdCBhbGxv Y2F0ZV9zaWduYXR1cmVkX3R5cGVfaGFzaF90YWJsZSAoc3RydWN0IG9iamZp bGUgKm9iamZpbGUpOworc3RhdGljIGh0YWJfdCBhbGxvY2F0ZV9zaWduYXR1 cmVkX3R5cGVfdGFibGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKIAog I2lmIFdPUkRTX0JJR0VORElBTgogCkBAIC0xNzQ0LDEzICsxNzQ5LDE0IEBA IGNyZWF0ZV9jdXNfZnJvbV9pbmRleCAoc3RydWN0IG9iamZpbGUgKm8KIH0K IAogLyogQ3JlYXRlIHRoZSBzaWduYXR1cmVkIHR5cGUgaGFzaCB0YWJsZSBm cm9tIHRoZSBpbmRleC4gICovCisKIHN0YXRpYyBpbnQKLWNyZWF0ZV9zaWdu YXR1cmVkX3R5cGVfaGFzaF9mcm9tX2luZGV4IChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSwKLQkJCQkJY29uc3QgZ2RiX2J5dGUgKmJ5dGVzLAotCQkJCQlv ZmZzZXRfdHlwZSBlbGVtZW50cykKK2NyZWF0ZV9zaWduYXR1cmVkX3R5cGVf dGFibGVfZnJvbV9pbmRleCAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsCisJ CQkJCSBjb25zdCBnZGJfYnl0ZSAqYnl0ZXMsCisJCQkJCSBvZmZzZXRfdHlw ZSBlbGVtZW50cykKIHsKICAgb2Zmc2V0X3R5cGUgaTsKLSAgaHRhYl90IHR5 cGVfaGFzaDsKKyAgaHRhYl90IHNpZ190eXBlc19oYXNoOwogCiAgIGR3YXJm Ml9wZXJfb2JqZmlsZS0+bl90eXBlX2NvbXBfdW5pdHMgPSBlbGVtZW50cyAv IDM7CiAgIGR3YXJmMl9wZXJfb2JqZmlsZS0+dHlwZV9jb21wX3VuaXRzCkBA IC0xNzU4LDcgKzE3NjQsNyBAQCBjcmVhdGVfc2lnbmF0dXJlZF90eXBlX2hh c2hfZnJvbV9pbmRleCAoCiAJCSAgICAgZHdhcmYyX3Blcl9vYmpmaWxlLT5u X3R5cGVfY29tcF91bml0cwogCQkgICAgICogc2l6ZW9mIChzdHJ1Y3QgZHdh cmYyX3Blcl9jdV9kYXRhICopKTsKIAotICB0eXBlX2hhc2ggPSBhbGxvY2F0 ZV9zaWduYXR1cmVkX3R5cGVfaGFzaF90YWJsZSAob2JqZmlsZSk7CisgIHNp Z190eXBlc19oYXNoID0gYWxsb2NhdGVfc2lnbmF0dXJlZF90eXBlX3RhYmxl IChvYmpmaWxlKTsKIAogICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHM7IGkg Kz0gMykKICAgICB7CkBAIC0xNzg0LDEzICsxNzkwLDEzIEBAIGNyZWF0ZV9z aWduYXR1cmVkX3R5cGVfaGFzaF9mcm9tX2luZGV4ICgKIAk9IE9CU1RBQ0tf WkFMTE9DICgmb2JqZmlsZS0+b2JqZmlsZV9vYnN0YWNrLAogCQkJICBzdHJ1 Y3QgZHdhcmYyX3Blcl9jdV9xdWlja19kYXRhKTsKIAotICAgICAgc2xvdCA9 IGh0YWJfZmluZF9zbG90ICh0eXBlX2hhc2gsIHR5cGVfc2lnLCBJTlNFUlQp OworICAgICAgc2xvdCA9IGh0YWJfZmluZF9zbG90IChzaWdfdHlwZXNfaGFz aCwgdHlwZV9zaWcsIElOU0VSVCk7CiAgICAgICAqc2xvdCA9IHR5cGVfc2ln OwogCiAgICAgICBkd2FyZjJfcGVyX29iamZpbGUtPnR5cGVfY29tcF91bml0 c1tpIC8gM10gPSAmdHlwZV9zaWctPnBlcl9jdTsKICAgICB9CiAKLSAgZHdh cmYyX3Blcl9vYmpmaWxlLT5zaWduYXR1cmVkX3R5cGVzID0gdHlwZV9oYXNo OworICBkd2FyZjJfcGVyX29iamZpbGUtPnNpZ25hdHVyZWRfdHlwZXMgPSBz aWdfdHlwZXNfaGFzaDsKIAogICByZXR1cm4gMTsKIH0KQEAgLTE5NTYsOCAr MTk2Miw4IEBAIGR3YXJmMl9yZWFkX2luZGV4IChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmkKIAogICBpZiAodmVyc2lvbiA9PSAyCiAgICAgICAmJiB0eXBlc19s aXN0X2VsZW1lbnRzCi0gICAgICAmJiAhY3JlYXRlX3NpZ25hdHVyZWRfdHlw ZV9oYXNoX2Zyb21faW5kZXggKG9iamZpbGUsIHR5cGVzX2xpc3QsCi0JCQkJ CQkgIHR5cGVzX2xpc3RfZWxlbWVudHMpKQorICAgICAgJiYgIWNyZWF0ZV9z aWduYXR1cmVkX3R5cGVfdGFibGVfZnJvbV9pbmRleCAob2JqZmlsZSwgdHlw ZXNfbGlzdCwKKwkJCQkJCSAgIHR5cGVzX2xpc3RfZWxlbWVudHMpKQogICAg IHJldHVybiAwOwogCiAgIGNyZWF0ZV9hZGRybWFwX2Zyb21faW5kZXggKG9i amZpbGUsIG1hcCk7CkBAIC0yNzgzLDcgKzI3ODksNyBAQCBlcV90eXBlX3Np Z25hdHVyZSAoY29uc3Qgdm9pZCAqaXRlbV9saHMsCiAvKiBBbGxvY2F0ZSBh IGhhc2ggdGFibGUgZm9yIHNpZ25hdHVyZWQgdHlwZXMuICAqLwogCiBzdGF0 aWMgaHRhYl90Ci1hbGxvY2F0ZV9zaWduYXR1cmVkX3R5cGVfaGFzaF90YWJs ZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCithbGxvY2F0ZV9zaWduYXR1 cmVkX3R5cGVfdGFibGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQogewog ICByZXR1cm4gaHRhYl9jcmVhdGVfYWxsb2NfZXggKDQxLAogCQkJICAgICAg IGhhc2hfdHlwZV9zaWduYXR1cmUsCkBAIC0yODI4LDcgKzI4MzQsNyBAQCBj cmVhdGVfZGVidWdfdHlwZXNfaGFzaF90YWJsZSAoc3RydWN0IG9iCiAgICAg ICByZXR1cm4gMDsKICAgICB9CiAKLSAgdHlwZXNfaHRhYiA9IGFsbG9jYXRl X3NpZ25hdHVyZWRfdHlwZV9oYXNoX3RhYmxlIChvYmpmaWxlKTsKKyAgdHlw ZXNfaHRhYiA9IGFsbG9jYXRlX3NpZ25hdHVyZWRfdHlwZV90YWJsZSAob2Jq ZmlsZSk7CiAKICAgaWYgKGR3YXJmMl9kaWVfZGVidWcpCiAgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiU2lnbmF0dXJlZCB0eXBlczpc biIpOwpAQCAtMzMxMCw3ICszMzE2LDYgQEAgbG9hZF9wYXJ0aWFsX2NvbXBf dW5pdCAoc3RydWN0IGR3YXJmMl9wZQogICAgICAgLyogTGluayB0aGlzIGNv bXBpbGF0aW9uIHVuaXQgaW50byB0aGUgY29tcGlsYXRpb24gdW5pdCB0cmVl LiAgKi8KICAgICAgIHRoaXNfY3UtPmN1ID0gY3U7CiAgICAgICBjdS0+cGVy X2N1ID0gdGhpc19jdTsKLSAgICAgIGN1LT50eXBlX2hhc2ggPSB0aGlzX2N1 LT50eXBlX2hhc2g7CiAKICAgICAgIC8qIExpbmsgdGhpcyBDVSBpbnRvIHJl YWRfaW5fY2hhaW4uICAqLwogICAgICAgdGhpc19jdS0+Y3UtPnJlYWRfaW5f Y2hhaW4gPSBkd2FyZjJfcGVyX29iamZpbGUtPnJlYWRfaW5fY2hhaW47CkBA IC00MzMyLDcgKzQzMzcsNiBAQCBsb2FkX2Z1bGxfY29tcF91bml0IChzdHJ1 Y3QgZHdhcmYyX3Blcl9jCiAgICAgICAvKiBMaW5rIHRoaXMgY29tcGlsYXRp b24gdW5pdCBpbnRvIHRoZSBjb21waWxhdGlvbiB1bml0IHRyZWUuICAqLwog ICAgICAgcGVyX2N1LT5jdSA9IGN1OwogICAgICAgY3UtPnBlcl9jdSA9IHBl cl9jdTsKLSAgICAgIGN1LT50eXBlX2hhc2ggPSBwZXJfY3UtPnR5cGVfaGFz aDsKIAogICAgICAgLyogTGluayB0aGlzIENVIGludG8gcmVhZF9pbl9jaGFp bi4gICovCiAgICAgICBwZXJfY3UtPmN1LT5yZWFkX2luX2NoYWluID0gZHdh cmYyX3Blcl9vYmpmaWxlLT5yZWFkX2luX2NoYWluOwpAQCAtMTA5MDUsMTQg KzEwOTEyLDEyIEBAIGR3YXJmMl9jb25zdF92YWx1ZSAoc3RydWN0IGF0dHJp YnV0ZSAqYXQKICAgICB9CiB9CiAKLQogLyogUmV0dXJuIHRoZSB0eXBlIG9m IHRoZSBkaWUgaW4gcXVlc3Rpb24gdXNpbmcgaXRzIERXX0FUX3R5cGUgYXR0 cmlidXRlLiAgKi8KIAogc3RhdGljIHN0cnVjdCB0eXBlICoKIGRpZV90eXBl IChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3Up CiB7CiAgIHN0cnVjdCBhdHRyaWJ1dGUgKnR5cGVfYXR0cjsKLSAgc3RydWN0 IGRpZV9pbmZvICp0eXBlX2RpZTsKIAogICB0eXBlX2F0dHIgPSBkd2FyZjJf YXR0ciAoZGllLCBEV19BVF90eXBlLCBjdSk7CiAgIGlmICghdHlwZV9hdHRy KQpAQCAtMTA5MjEsOSArMTA5MjYsNyBAQCBkaWVfdHlwZSAoc3RydWN0IGRp ZV9pbmZvICpkaWUsIHN0cnVjdCBkCiAgICAgICByZXR1cm4gb2JqZmlsZV90 eXBlIChjdS0+b2JqZmlsZSktPmJ1aWx0aW5fdm9pZDsKICAgICB9CiAKLSAg dHlwZV9kaWUgPSBmb2xsb3dfZGllX3JlZl9vcl9zaWcgKGRpZSwgdHlwZV9h dHRyLCAmY3UpOwotCi0gIHJldHVybiB0YWdfdHlwZV90b190eXBlICh0eXBl X2RpZSwgY3UpOworICByZXR1cm4gbG9va3VwX2RpZV90eXBlIChkaWUsIHR5 cGVfYXR0ciwgY3UpOwogfQogCiAvKiBUcnVlIGlmZiBDVSdzIHByb2R1Y2Vy IGdlbmVyYXRlcyBHTkFUIEFkYSBhdXhpbGlhcnkgaW5mb3JtYXRpb24KQEAg LTEwOTQ0LDcgKzEwOTQ3LDYgQEAgbmVlZF9nbmF0X2luZm8gKHN0cnVjdCBk d2FyZjJfY3UgKmN1KQogICByZXR1cm4gMDsKIH0KIAotCiAvKiBSZXR1cm4g dGhlIGF1eGlsaWFyeSB0eXBlIG9mIHRoZSBkaWUgaW4gcXVlc3Rpb24gdXNp bmcgaXRzCiAgICBEV19BVF9HTkFUX2Rlc2NyaXB0aXZlX3R5cGUgYXR0cmli dXRlLiAgUmV0dXJucyBOVUxMIGlmIHRoZQogICAgYXR0cmlidXRlIGlzIG5v dCBwcmVzZW50LiAgKi8KQEAgLTEwOTUzLDE0ICsxMDk1NSwxMiBAQCBzdGF0 aWMgc3RydWN0IHR5cGUgKgogZGllX2Rlc2NyaXB0aXZlX3R5cGUgKHN0cnVj dCBkaWVfaW5mbyAqZGllLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkKIHsKICAg c3RydWN0IGF0dHJpYnV0ZSAqdHlwZV9hdHRyOwotICBzdHJ1Y3QgZGllX2lu Zm8gKnR5cGVfZGllOwogCiAgIHR5cGVfYXR0ciA9IGR3YXJmMl9hdHRyIChk aWUsIERXX0FUX0dOQVRfZGVzY3JpcHRpdmVfdHlwZSwgY3UpOwogICBpZiAo IXR5cGVfYXR0cikKICAgICByZXR1cm4gTlVMTDsKIAotICB0eXBlX2RpZSA9 IGZvbGxvd19kaWVfcmVmIChkaWUsIHR5cGVfYXR0ciwgJmN1KTsKLSAgcmV0 dXJuIHRhZ190eXBlX3RvX3R5cGUgKHR5cGVfZGllLCBjdSk7CisgIHJldHVy biBsb29rdXBfZGllX3R5cGUgKGRpZSwgdHlwZV9hdHRyLCBjdSk7CiB9CiAK IC8qIElmIERJRSBoYXMgYSBkZXNjcmlwdGl2ZV90eXBlIGF0dHJpYnV0ZSwg dGhlbiBzZXQgdGhlIFRZUEUncwpAQCAtMTA5ODYsMjQgKzEwOTg2LDcyIEBA IHN0YXRpYyBzdHJ1Y3QgdHlwZSAqCiBkaWVfY29udGFpbmluZ190eXBlIChz dHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiB7 CiAgIHN0cnVjdCBhdHRyaWJ1dGUgKnR5cGVfYXR0cjsKLSAgc3RydWN0IGRp ZV9pbmZvICp0eXBlX2RpZTsKIAogICB0eXBlX2F0dHIgPSBkd2FyZjJfYXR0 ciAoZGllLCBEV19BVF9jb250YWluaW5nX3R5cGUsIGN1KTsKICAgaWYgKCF0 eXBlX2F0dHIpCiAgICAgZXJyb3IgKF8oIkR3YXJmIEVycm9yOiBQcm9ibGVt IHR1cm5pbmcgY29udGFpbmluZyB0eXBlIGludG8gZ2RiIHR5cGUgIgogCSAg ICAgIltpbiBtb2R1bGUgJXNdIiksIGN1LT5vYmpmaWxlLT5uYW1lKTsKIAot ICB0eXBlX2RpZSA9IGZvbGxvd19kaWVfcmVmX29yX3NpZyAoZGllLCB0eXBl X2F0dHIsICZjdSk7Ci0gIHJldHVybiB0YWdfdHlwZV90b190eXBlICh0eXBl X2RpZSwgY3UpOworICByZXR1cm4gbG9va3VwX2RpZV90eXBlIChkaWUsIHR5 cGVfYXR0ciwgY3UpOwogfQogCisvKiBMb29rIHVwIHRoZSB0eXBlIG9mIERJ RSBpbiBDVSB1c2luZyBpdHMgdHlwZSBhdHRyaWJ1dGUgQVRUUi4KKyAgIElm IHRoZXJlIGlzIG5vIHR5cGUgc3Vic3RpdHV0ZSBhbiBlcnJvciBtYXJrZXIu ICAqLworCiBzdGF0aWMgc3RydWN0IHR5cGUgKgotdGFnX3R5cGVfdG9fdHlw ZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1 KQorbG9va3VwX2RpZV90eXBlIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3Ry dWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJIHN0cnVjdCBkd2FyZjJfY3UgKmN1 KQogewogICBzdHJ1Y3QgdHlwZSAqdGhpc190eXBlOwogCi0gIHRoaXNfdHlw ZSA9IHJlYWRfdHlwZV9kaWUgKGRpZSwgY3UpOwotICBpZiAoIXRoaXNfdHlw ZSkKKyAgLyogRmlyc3Qgc2VlIGlmIHdlIGhhdmUgaXQgY2FjaGVkLiAgKi8K KworICBpZiAoaXNfcmVmX2F0dHIgKGF0dHIpKQorICAgIHsKKyAgICAgIHVu c2lnbmVkIGludCBvZmZzZXQgPSBkd2FyZjJfZ2V0X3JlZl9kaWVfb2Zmc2V0 IChhdHRyKTsKKworICAgICAgdGhpc190eXBlID0gZ2V0X2RpZV90eXBlX2F0 X29mZnNldCAob2Zmc2V0LCBjdS0+cGVyX2N1KTsKKyAgICB9CisgIGVsc2Ug aWYgKGF0dHItPmZvcm0gPT0gRFdfRk9STV9zaWc4KQorICAgIHsKKyAgICAg IHN0cnVjdCBzaWduYXR1cmVkX3R5cGUgKnNpZ190eXBlID0gRFdfU0lHTkFU VVJFRF9UWVBFIChhdHRyKTsKKyAgICAgIHN0cnVjdCBkd2FyZjJfY3UgKnNp Z19jdTsKKyAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisKKyAgICAgIC8q IHNpZ190eXBlIHdpbGwgYmUgTlVMTCBpZiB0aGUgc2lnbmF0dXJlZCB0eXBl IGlzIG1pc3NpbmcgZnJvbQorCSB0aGUgZGVidWcgaW5mby4gICovCisgICAg ICBpZiAoc2lnX3R5cGUgPT0gTlVMTCkKKwllcnJvciAoXygiRHdhcmYgRXJy b3I6IENhbm5vdCBmaW5kIHNpZ25hdHVyZWQgRElFIHJlZmVyZW5jZWQgZnJv bSBESUUgIgorCQkgImF0IDB4JXggW2luIG1vZHVsZSAlc10iKSwKKwkgICAg ICAgZGllLT5vZmZzZXQsIGN1LT5vYmpmaWxlLT5uYW1lKTsKKworICAgICAg Z2RiX2Fzc2VydCAoc2lnX3R5cGUtPnBlcl9jdS5mcm9tX2RlYnVnX3R5cGVz KTsKKyAgICAgIG9mZnNldCA9IHNpZ190eXBlLT5vZmZzZXQgKyBzaWdfdHlw ZS0+dHlwZV9vZmZzZXQ7CisgICAgICB0aGlzX3R5cGUgPSBnZXRfZGllX3R5 cGVfYXRfb2Zmc2V0IChvZmZzZXQsICZzaWdfdHlwZS0+cGVyX2N1KTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICBkdW1wX2RpZV9mb3JfZXJyb3Ig KGRpZSk7CisgICAgICBlcnJvciAoXygiRHdhcmYgRXJyb3I6IEJhZCB0eXBl IGF0dHJpYnV0ZSAlcyBbaW4gbW9kdWxlICVzXSIpLAorCSAgICAgZHdhcmZf YXR0cl9uYW1lIChhdHRyLT5uYW1lKSwgY3UtPm9iamZpbGUtPm5hbWUpOwor ICAgIH0KKworICAvKiBJZiBub3QgY2FjaGVkIHdlIG5lZWQgdG8gcmVhZCBp dCBpbi4gICovCisKKyAgaWYgKHRoaXNfdHlwZSA9PSBOVUxMKQorICAgIHsK KyAgICAgIHN0cnVjdCBkaWVfaW5mbyAqdHlwZV9kaWU7CisgICAgICBzdHJ1 Y3QgZHdhcmYyX2N1ICp0eXBlX2N1ID0gY3U7CisKKyAgICAgIHR5cGVfZGll ID0gZm9sbG93X2RpZV9yZWZfb3Jfc2lnIChkaWUsIGF0dHIsICZ0eXBlX2N1 KTsKKyAgICAgIC8qIElmIHRoZSB0eXBlIGlzIGNhY2hlZCwgd2Ugc2hvdWxk IGhhdmUgZm91bmQgaXQgYWJvdmUuICAqLworICAgICAgZ2RiX2Fzc2VydCAo Z2V0X2RpZV90eXBlICh0eXBlX2RpZSwgdHlwZV9jdSkgPT0gTlVMTCk7Cisg ICAgICB0aGlzX3R5cGUgPSByZWFkX3R5cGVfZGllXzEgKHR5cGVfZGllLCB0 eXBlX2N1KTsKKyAgICB9CisKKyAgLyogSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2 ZSBhIHR5cGUgdXNlIGFuIGVycm9yIG1hcmtlci4gICovCisKKyAgaWYgKHRo aXNfdHlwZSA9PSBOVUxMKQogICAgIHsKICAgICAgIGNoYXIgKm1lc3NhZ2Us ICpzYXZlZDsKIApAQCAtMTEwMTgsOSArMTEwNjYsMTggQEAgdGFnX3R5cGVf dG9fdHlwZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIAogCiAgICAgICB0aGlz X3R5cGUgPSBpbml0X3R5cGUgKFRZUEVfQ09ERV9FUlJPUiwgMCwgMCwgc2F2 ZWQsIGN1LT5vYmpmaWxlKTsKICAgICB9CisKICAgcmV0dXJuIHRoaXNfdHlw ZTsKIH0KIAorLyogUmV0dXJuIHRoZSB0eXBlIGluIERJRSwgQ1UuCisgICBS ZXR1cm5zIE5VTEwgZm9yIGludmFsaWQgdHlwZXMuCisKKyAgIFRoaXMgZmly c3QgZG9lcyBhIGxvb2t1cCBpbiB0aGUgYXBwcm9wcmlhdGUgdHlwZV9oYXNo IHRhYmxlLAorICAgYW5kIG9ubHkgcmVhZHMgdGhlIGRpZSBpbiBpZiBuZWNl c3NhcnkuCisKKyAgIE5PVEU6IFRoaXMgY2FuIGJlIGNhbGxlZCB3aGVuIHJl YWRpbmcgaW4gcGFydGlhbCBvciBmdWxsIHN5bWJvbHMuICAqLworCiBzdGF0 aWMgc3RydWN0IHR5cGUgKgogcmVhZF90eXBlX2RpZSAoc3RydWN0IGRpZV9p bmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1KQogewpAQCAtMTEwMzAs NiArMTEwODcsMTcgQEAgcmVhZF90eXBlX2RpZSAoc3RydWN0IGRpZV9pbmZv ICpkaWUsIHN0cgogICBpZiAodGhpc190eXBlKQogICAgIHJldHVybiB0aGlz X3R5cGU7CiAKKyAgcmV0dXJuIHJlYWRfdHlwZV9kaWVfMSAoZGllLCBjdSk7 Cit9CisKKy8qIFJlYWQgdGhlIHR5cGUgaW4gRElFLCBDVS4KKyAgIFJldHVy bnMgTlVMTCBmb3IgaW52YWxpZCB0eXBlcy4gICovCisKK3N0YXRpYyBzdHJ1 Y3QgdHlwZSAqCityZWFkX3R5cGVfZGllXzEgKHN0cnVjdCBkaWVfaW5mbyAq ZGllLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSkKK3sKKyAgc3RydWN0IHR5cGUg KnRoaXNfdHlwZSA9IE5VTEw7CisKICAgc3dpdGNoIChkaWUtPnRhZykKICAg ICB7CiAgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKQEAgLTEyNjU2LDgg KzEyNzI0LDkgQEAgZm9sbG93X2RpZV9yZWZfb3Jfc2lnIChzdHJ1Y3QgZGll X2luZm8gKgogfQogCiAvKiBGb2xsb3cgcmVmZXJlbmNlIE9GRlNFVC4KLSAg IE9uIGVudHJ5ICpSRUZfQ1UgaXMgdGhlIENVIG9mIHNvdXJjZSBESUUgcmVm ZXJlbmNpbmcgT0ZGU0VULgotICAgT24gZXhpdCAqUkVGX0NVIGlzIHRoZSBD VSBvZiB0aGUgcmVzdWx0LiAgKi8KKyAgIE9uIGVudHJ5ICpSRUZfQ1UgaXMg dGhlIENVIG9mIHRoZSBzb3VyY2UgZGllIHJlZmVyZW5jaW5nIE9GRlNFVC4K KyAgIE9uIGV4aXQgKlJFRl9DVSBpcyB0aGUgQ1Ugb2YgdGhlIHJlc3VsdC4K KyAgIFJldHVybnMgTlVMTCBpZiBPRkZTRVQgaXMgaW52YWxpZC4gICovCiAK IHN0YXRpYyBzdHJ1Y3QgZGllX2luZm8gKgogZm9sbG93X2RpZV9vZmZzZXQg KHVuc2lnbmVkIGludCBvZmZzZXQsIHN0cnVjdCBkd2FyZjJfY3UgKipyZWZf Y3UpCkBAIC0xNDE5NSw2ICsxNDI2NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgdHlw ZSAqCiBzZXRfZGllX3R5cGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1 Y3QgdHlwZSAqdHlwZSwgc3RydWN0IGR3YXJmMl9jdSAqY3UpCiB7CiAgIHN0 cnVjdCBkd2FyZjJfb2Zmc2V0X2FuZF90eXBlICoqc2xvdCwgb2ZzOworICBz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IGN1LT5vYmpmaWxlOworICBodGFi X3QgKnR5cGVfaGFzaF9wdHI7CiAKICAgLyogRm9yIEFkYSB0eXBlcywgbWFr ZSBzdXJlIHRoYXQgdGhlIGduYXQtc3BlY2lmaWMgZGF0YSBpcyBhbHdheXMK ICAgICAgaW5pdGlhbGl6ZWQgKGlmIG5vdCBhbHJlYWR5IHNldCkuICBUaGVy ZSBhcmUgYSBmZXcgdHlwZXMgd2hlcmUKQEAgLTE0MjA5LDQ2ICsxNDI4MCw1 NCBAQCBzZXRfZGllX3R5cGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1 CiAgICAgICAmJiAhSEFWRV9HTkFUX0FVWF9JTkZPICh0eXBlKSkKICAgICBJ TklUX0dOQVRfU1BFQ0lGSUMgKHR5cGUpOwogCi0gIGlmIChjdS0+dHlwZV9o YXNoID09IE5VTEwpCisgIGlmIChjdS0+cGVyX2N1LT5mcm9tX2RlYnVnX3R5 cGVzKQorICAgIHR5cGVfaGFzaF9wdHIgPSAmZHdhcmYyX3Blcl9vYmpmaWxl LT5kZWJ1Z190eXBlc190eXBlX2hhc2g7CisgIGVsc2UKKyAgICB0eXBlX2hh c2hfcHRyID0gJmR3YXJmMl9wZXJfb2JqZmlsZS0+ZGVidWdfaW5mb190eXBl X2hhc2g7CisKKyAgaWYgKCp0eXBlX2hhc2hfcHRyID09IE5VTEwpCiAgICAg ewotICAgICAgZ2RiX2Fzc2VydCAoY3UtPnBlcl9jdSAhPSBOVUxMKTsKLSAg ICAgIGN1LT5wZXJfY3UtPnR5cGVfaGFzaAotCT0gaHRhYl9jcmVhdGVfYWxs b2NfZXggKGN1LT5oZWFkZXIubGVuZ3RoIC8gMjQsCisgICAgICAqdHlwZV9o YXNoX3B0cgorCT0gaHRhYl9jcmVhdGVfYWxsb2NfZXggKDEyNywKIAkJCQlv ZmZzZXRfYW5kX3R5cGVfaGFzaCwKIAkJCQlvZmZzZXRfYW5kX3R5cGVfZXEs CiAJCQkJTlVMTCwKLQkJCQkmY3UtPm9iamZpbGUtPm9iamZpbGVfb2JzdGFj aywKKwkJCQkmb2JqZmlsZS0+b2JqZmlsZV9vYnN0YWNrLAogCQkJCWhhc2h0 YWJfb2JzdGFja19hbGxvY2F0ZSwKIAkJCQlkdW1teV9vYnN0YWNrX2RlYWxs b2NhdGUpOwotICAgICAgY3UtPnR5cGVfaGFzaCA9IGN1LT5wZXJfY3UtPnR5 cGVfaGFzaDsKICAgICB9CiAKICAgb2ZzLm9mZnNldCA9IGRpZS0+b2Zmc2V0 OwogICBvZnMudHlwZSA9IHR5cGU7CiAgIHNsb3QgPSAoc3RydWN0IGR3YXJm Ml9vZmZzZXRfYW5kX3R5cGUgKiopCi0gICAgaHRhYl9maW5kX3Nsb3Rfd2l0 aF9oYXNoIChjdS0+dHlwZV9oYXNoLCAmb2ZzLCBvZnMub2Zmc2V0LCBJTlNF UlQpOworICAgIGh0YWJfZmluZF9zbG90X3dpdGhfaGFzaCAoKnR5cGVfaGFz aF9wdHIsICZvZnMsIG9mcy5vZmZzZXQsIElOU0VSVCk7CiAgIGlmICgqc2xv dCkKICAgICBjb21wbGFpbnQgKCZzeW1maWxlX2NvbXBsYWludHMsCiAJICAg ICAgIF8oIkEgcHJvYmxlbSBpbnRlcm5hbCB0byBHREI6IERJRSAweCV4IGhh cyB0eXBlIGFscmVhZHkgc2V0IiksCiAJICAgICAgIGRpZS0+b2Zmc2V0KTsK LSAgKnNsb3QgPSBvYnN0YWNrX2FsbG9jICgmY3UtPm9iamZpbGUtPm9iamZp bGVfb2JzdGFjaywgc2l6ZW9mICgqKnNsb3QpKTsKKyAgKnNsb3QgPSBvYnN0 YWNrX2FsbG9jICgmb2JqZmlsZS0+b2JqZmlsZV9vYnN0YWNrLCBzaXplb2Yg KCoqc2xvdCkpOwogICAqKnNsb3QgPSBvZnM7CiAgIHJldHVybiB0eXBlOwog fQogCi0vKiBGaW5kIHRoZSB0eXBlIGZvciBESUUgaW4gQ1UncyB0eXBlX2hh c2gsIG9yIHJldHVybiBOVUxMIGlmIERJRSBkb2VzCi0gICBub3QgaGF2ZSBh IHNhdmVkIHR5cGUuICAqLworLyogTG9vayB1cCB0aGUgdHlwZSBmb3IgdGhl IGRpZSBhdCBESUVfT0ZGU0VUIGluIHRoZSBhcHByb3ByaWF0ZSB0eXBlX2hh c2gKKyAgIHRhYmxlLCBvciByZXR1cm4gTlVMTCBpZiB0aGUgZGllIGRvZXMg bm90IGhhdmUgYSBzYXZlZCB0eXBlLiAgKi8KIAogc3RhdGljIHN0cnVjdCB0 eXBlICoKLWdldF9kaWVfdHlwZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0 cnVjdCBkd2FyZjJfY3UgKmN1KQorZ2V0X2RpZV90eXBlX2F0X29mZnNldCAo dW5zaWduZWQgaW50IG9mZnNldCwKKwkJCXN0cnVjdCBkd2FyZjJfcGVyX2N1 X2RhdGEgKnBlcl9jdSkKIHsKICAgc3RydWN0IGR3YXJmMl9vZmZzZXRfYW5k X3R5cGUgKnNsb3QsIG9mczsKLSAgaHRhYl90IHR5cGVfaGFzaCA9IGN1LT50 eXBlX2hhc2g7CisgIGh0YWJfdCB0eXBlX2hhc2g7CiAKKyAgaWYgKHBlcl9j dS0+ZnJvbV9kZWJ1Z190eXBlcykKKyAgICB0eXBlX2hhc2ggPSBkd2FyZjJf cGVyX29iamZpbGUtPmRlYnVnX3R5cGVzX3R5cGVfaGFzaDsKKyAgZWxzZQor ICAgIHR5cGVfaGFzaCA9IGR3YXJmMl9wZXJfb2JqZmlsZS0+ZGVidWdfaW5m b190eXBlX2hhc2g7CiAgIGlmICh0eXBlX2hhc2ggPT0gTlVMTCkKICAgICBy ZXR1cm4gTlVMTDsKIAotICBvZnMub2Zmc2V0ID0gZGllLT5vZmZzZXQ7Cisg IG9mcy5vZmZzZXQgPSBvZmZzZXQ7CiAgIHNsb3QgPSBodGFiX2ZpbmRfd2l0 aF9oYXNoICh0eXBlX2hhc2gsICZvZnMsIG9mcy5vZmZzZXQpOwogICBpZiAo c2xvdCkKICAgICByZXR1cm4gc2xvdC0+dHlwZTsKQEAgLTE0MjU2LDYgKzE0 MzM1LDE1IEBAIGdldF9kaWVfdHlwZSAoc3RydWN0IGRpZV9pbmZvICpkaWUs IHN0cnUKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogTG9vayB1cCB0aGUg dHlwZSBmb3IgRElFIGluIHRoZSBhcHByb3ByaWF0ZSB0eXBlX2hhc2ggdGFi bGUsCisgICBvciByZXR1cm4gTlVMTCBpZiBESUUgZG9lcyBub3QgaGF2ZSBh IHNhdmVkIHR5cGUuICAqLworCitzdGF0aWMgc3RydWN0IHR5cGUgKgorZ2V0 X2RpZV90eXBlIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGR3YXJm Ml9jdSAqY3UpCit7CisgIHJldHVybiBnZXRfZGllX3R5cGVfYXRfb2Zmc2V0 IChkaWUtPm9mZnNldCwgY3UtPnBlcl9jdSk7Cit9CisKIC8qIEFkZCBhIGRl cGVuZGVuY2UgcmVsYXRpb25zaGlwIGZyb20gQ1UgdG8gUkVGX1BFUl9DVS4g ICovCiAKIHN0YXRpYyB2b2lkCkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmR3YXJm Mi9kdzQtc2lnLXR5cGVzLWIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBlcy1i LmNjCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBl cy1iLmNjCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAw MAorKysgdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBlcy1iLmNj CTI0IEF1ZyAyMDEwIDA4OjE1OjAyIC0wMDAwCkBAIC0wLDAgKzEsMTYgQEAK KworI2luY2x1ZGUgImR3NC1zaWctdHlwZXMuaCIKKworZXh0ZXJuIG15bnM6 OmJhcl90eXBlIG15c2V0OworCitzdGF0aWMgbXluczo6YmFyX3R5cGUgKgor YmFyICgpCit7CisgIHJldHVybiAmbXlzZXQ7Cit9CisKK3ZvaWQKK2ZvbyAo KQoreworICBiYXIgKCk7Cit9CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmR3YXJm Mi9kdzQtc2lnLXR5cGVzLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IHRlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuY2MK ZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzQtc2lnLXR5cGVzLmNj Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg dGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBlcy5jYwkyNCBBdWcg MjAxMCAwODoxNTowMiAtMDAwMApAQCAtMCwwICsxLDEyIEBACisKKyNpbmNs dWRlICJkdzQtc2lnLXR5cGVzLmgiCisKK215bnM6OmJhcl90eXBlIG15c2V0 OworCitpbnQKK21haW4gKCkKK3sKKyAgZm9vICgpOworCisgIHJldHVybiAw OworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBl cy5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1 aXRlL2dkYi5kd2FyZjIvZHc0LXNpZy10eXBlcy5leHAKZGlmZiAtTiB0ZXN0 c3VpdGUvZ2RiLmR3YXJmMi9kdzQtc2lnLXR5cGVzLmV4cAotLS0gL2Rldi9u dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9n ZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuZXhwCTI0IEF1ZyAyMDEwIDA4OjE1 OjAyIC0wMDAwCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJpZ2h0IDIwMTAg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dy YW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKyMgVGVzdCBkd2FyZjQgc2lnbmF0dXJlZCB0eXBlcy4KKworc2V0 IHRlc3QgImR3NC1zaWctdHlwZXMiCisKKyMgVGhpcyB0ZXN0IGlzIGludGVu ZGVkIGZvciB0YXJnZXRzIHdoaWNoIHN1cHBvcnQgRFdBUkYtNC4KKyMgU2lu Y2Ugd2UgcGFzcyBhbiBleHBsaWNpdCAtZ2R3YXJmLTQgdG8gdGhlIGNvbXBp bGVyLCB3ZSBsZXQKKyMgdGhhdCBiZSB0aGUgdGVzdCBvZiB3aGV0aGVyIHRo ZSB0YXJnZXQgc3VwcG9ydHMgaXQuCisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rl c3RpbmcgIiR7dGVzdH0uZXhwIiAiJHt0ZXN0fSIgXAorCXtkdzQtc2lnLXR5 cGVzLmNjIGR3NC1zaWctdHlwZXMtYi5jY30gXAorCXtkZWJ1ZyBjKysgYWRk aXRpb25hbF9mbGFncz0tZ2R3YXJmLTR9XSB9IHsKKyAgICByZXR1cm4gLTEK K30KKworIyBTdHJlc3MgdGVzdCBnZGIncyBoYW5kbGluZyBvZiBjYWNoZWQg Y29tcCB1bml0cywgZGlzYWJsZSB0aGUgY2FjaGUuCitnZGJfdGVzdF9ub19v dXRwdXQgIm1haW50IHNldCBkd2FyZjIgbWF4LWNhY2hlLWFnZSAwIgorCitp ZiAhW3J1bnRvX21haW5dIHsKKyAgICByZXR1cm4gLTEKK30KKworIyBCcmlu ZyBzeW10YWIgZm9yIG15c2V0IGludG8gZ2RiLgorZ2RiX3Rlc3QgInAgbXlz ZXQiICIuKiIKKworIyBUaGlzIGlzIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBw cm9ibGVtIGluIFBSIDExOTQyLgorZ2RiX2JyZWFrcG9pbnQgImZvbyIKK2dk Yl9jb250aW51ZSAiZm9vIgpJbmRleDogdGVzdHN1aXRlL2dkYi5kd2FyZjIv ZHc0LXNpZy10eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IHRlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuaApkaWZm IC1OIHRlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuaAotLS0g L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3Rz dWl0ZS9nZGIuZHdhcmYyL2R3NC1zaWctdHlwZXMuaAkyNCBBdWcgMjAxMCAw ODoxNTowMiAtMDAwMApAQCAtMCwwICsxLDE1IEBACisKKyNpbmNsdWRlIDxz ZXQ+Cit1c2luZyBzdGQ6OnNldDsKKworbmFtZXNwYWNlIG15bnMKK3sKKwor c3RydWN0IGJhcl90eXBlCit7CisgIHNldDxpbnQ+IGZvbzsKK307CisKK30g Ly8gbXlucworCitleHRlcm4gdm9pZCBmb28gKCk7Cg== --e0cb4e6ff629cd84fa048e8d91fa--