From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x141.google.com (mail-il1-x141.google.com [IPv6:2607:f8b0:4864:20::141]) by sourceware.org (Postfix) with ESMTPS id 408EC386F439 for ; Tue, 9 Jun 2020 23:32:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 408EC386F439 Received: by mail-il1-x141.google.com with SMTP id g3so142767ilq.10 for ; Tue, 09 Jun 2020 16:32:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XhVRH4MieYGNWUxeXEfBgO5cTGE62GnGggz52OMR10Q=; b=Y/NyPcHSaDrv0zhIKkV+Y7fS4Fn9EnA17r5S1RqUno5+eGdu7iEa3+DhkqkvsXLHU4 510v0ri6rn6VXGxwMVW0rr6U4OP8ttrrA6xxIeAsOHUmrWYs72s5bjYyAPV3M54Q+qEK 8OKj8atENNoJCtnHQI7sGBqItmz89OoGJDJg7+qiYLPp3EjfmMQZ/gxgpaf5DnXP2DNM aXdVvjW1hUsbfwz5ji7J+9lavK8z/Vw5CLPuq8vDl1K0NnVEr6ktGlZDQSChgcGHb/Ap zX0+6sE/4QFa4OcsQnrA2AwI2YKyZdXS+SaaFh1YGyTQN4EVPv7Fe7uVL7RfSy49cIA8 1+tw== X-Gm-Message-State: AOAM532CczLAlmPP6xBqWmMxmGl/d5TGS7jPRKUzVOd4CwTlIQprfsUY //CZnXRLYz9RnoSrzGcP3tlkJg2sFVwZoct2us2tWC7wPeQ= X-Google-Smtp-Source: ABdhPJx20TQFxWJluBp9pBYnavPYk8xGi7Pvn6r3gGhLBBdpn4vRDBLcCoH70KrOLvx9dImcHqRcDW4gqeQ1nsEk+rw= X-Received: by 2002:a92:c513:: with SMTP id r19mr411894ilg.12.1591745547350; Tue, 09 Jun 2020 16:32:27 -0700 (PDT) MIME-Version: 1.0 References: <87lfl634rs.fsf@tromey.com> <87h7vsqk5h.fsf@tromey.com> In-Reply-To: From: Caroline Tice Date: Tue, 9 Jun 2020 16:32:15 -0700 Message-ID: Subject: Re: [PATCH] Fix issues with reading rnglists, especially from dwo files, for DWARF v5 To: Tom Tromey Cc: Caroline Tice via Gdb-patches , Eric Christopher Content-Type: multipart/mixed; boundary="000000000000ed2ecb05a7af2351" X-Spam-Status: No, score=-18.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_CSS, URIBL_CSS_A, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 23:32:30 -0000 --000000000000ed2ecb05a7af2351 Content-Type: text/plain; charset="UTF-8" While playing with this a bit more (getting ready to work on my .dwp file patch), I noticed that there was an important bit I left out of the original patch: dwarf2_rnglists_process, in the original code, always reads out of the rnglist section in the main objfile, even when there is a .rnglist section in a .dwo file that it should be reading instead. I had some local code that fixes this, but it didn't make it into my previous patch (I apologize for that). The attached patch has been updated to contain this fix as well. It also contains my fixes and testcase from the previous patch. I ran the testsuite again (adding the -gdwarf-5 and -gsplit-dwarf flags in testsuite/lib/gdb.exp), and compiling everything with clang: $ make check RUNTESTFLAGS="CC_FOR_TARGET=${CLANG_CC} CXX_FOR_TARGET=${CLANG_CXX}" This time my patched GDB passed quite a few tests that the unpatched version failed (when compiled with clang and passed the flags): Testsuite summary from unpatched GDB: === gdb Summary === # of expected passes 55725 # of unexpected failures 2956 # of unexpected successes 83 # of expected failures 169 # of known failures 57 # of unresolved testcases 115 # of untested testcases 175 # of unsupported tests 272 # of paths in test names 1 # of duplicate test names 269 Testsuite summary from patched GDB: === gdb Summary === # of expected passes 56173 # of unexpected failures 2523 # of unexpected successes 2 # of expected failures 250 # of known failures 57 # of unresolved testcases 111 # of untested testcases 174 # of unsupported tests 272 # of paths in test names 1 # of duplicate test names 269 Some of the tests that have more passes with the patch include: gdb.base/break-entry.exp, gdb.base/info-fun.exp, gdb.base/info-shared.exp,gdb.base/return-nodebug.exp, gdb.dwarf2/fission-base.exp (I can send you a complete list if you really want it) Anyway below is the updated patch for review. -- Caroline cmtice@google.com gdb/ChangeLog: 2020-06-09 Caroline Tice * dwarf2/read.c (struct dwop_section_names): Add rnglists_dwo. (dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo. (struct dwarf2_cu): Add cu_ranges_from_skeleton field. (struct dwo_sections): Add rnglists field. (dwarf2_ranges_read): Add tag parameter. (cu_debug_rnglist_section): New function (decl & definition). (cutu_reader::cutu_reader): Before replacing the skeleton unit comp_unit_die with the dwo comp_unit_die, check to see if the skeleton unit die has a DW_AT_ranges, and if so set the cu_ranges_from_skeleton field in the cu. (dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section. (dwarf2_rnglists_process): Add a dwarf_tag parameter, for the kind of die whose range is being checked; add code to read the rnglist section from the dwo file rather than from the main objfile, if appropriate. Add cases for DW_RLE_base_addressx, DW_RLE_startx_length, DW_RLE_startx_endx. Also, update to only add the base address to DW_RLE_offset_pairs (not to all ranges). (dwarf2_ranges_process): Add dwarf tag parameter and pass it to dwarf2_rnglists_process. (dwarf2_ranges_read): Add dwarf tag parameter and pass it to dwarf2_ranges_process. (dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (read_full_die_1): Add code to read DW_AT_rnglists_base and assign to cu->ranges_base. (partial_die_info::read): Check for DW_FORM_rnglistx when setting need_ranges_base. Also pass die tag to dwarf2_ranges_read. (read_rnglist_index): New function. (read_attribute_reprocess): Add code for DW_FORM_rnglistx. (read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess. gdb/testsuite/ChangeLog: 2020-06-09 Caroline Tice * gdb.dwarf2/dw5-rnglist-test.cc: New file. * gdb.dwarf2/dw5-rnglist-test.exp: New file. On Thu, Jun 4, 2020 at 2:39 PM Caroline Tice wrote: > > I've been playing with running the testsuite with -gdwarf-5 > -gsplit-dwarf and using the clang compiler. I did not find any tests > that showed the issues I was running into (but I did discover a small > bug in my patch, which my newer patch fixes). With my fixed patch, > there are no testsuite differences. I have created a new testsuite > test case, which does fail with current ToT and passes with my patch, > but that only works if you compile it with clang -- if you compile it > with GCC it passes in both cases (because GCC is not generating the > DW_FORM_rmglistx that my patch is handling/fixing). > > I've updated the patch to include the requested format changes, remove > the pieces that are only used in an upcoming patch, fix the small > issue I found while testing, and I've added the test to the testsuite. > To run the test and see the issue: > > $ make check RUNTESTFLAGS="CC_FOR_TARGET=${CLANG_CC} > CXX_FOR_TARGET=${CLANG_CXX} dw5-rnglist-test.exp" > > gdb/ChangeLog (updated) > > 2020-06-04 Caroline Tice > > * dwarf2/read.c (struct dwop_section_names): Add rnglists_dwo. > (dwop_section_names): Add .debug_rnglists.dwo, .zdebug_rnglists.dwo. > (struct dwo_sections): Add rnglists field. > (cu_debug_rnglist_section): New function (decl & definition). > (dwarf2_locate_dwo_sections): Add code to read rnglists_dwo section. > (dwarf2_rnglists_process): Add cases for DW_RLE_base_addressx, > DW_RLE_startx_length, DW_RLE_startx_endx. Also, update to only add > the base address to DW_RLE_offset_pairs (not to all ranges). > (dwarf2_get_pc_bounds): Check for DW_FORM_rnglistx when setting > need_ranges_base. > (dwarf2_record_block_ranges): Check for DW_FORM_rnglistx when setting > need_ranges_base. > (read_full_die_1): Add code to read DW_AT_rnglists_base and assign to > cu->ranges_base. > (partial_die_info::read): Check for DW_FORM_rnglistx when setting > need_ranges_base. > (read_rnglist_index): New function. > (read_attribute_reprocess): Add code for DW_FORM_rnglistx. > (read_attribute_value): Mark DW_FORM_rnglistx with need_reprocess. > > gdb/testsuite/ChangeLog: > > 2020-06-04 Caroline Tice > > * gdb.dwarf2/dw5-rnglist-test.cc: New file. > * gdb.dwarf2/dw5-rnglist-test.exp: New file. > > > > > > On Wed, Jun 3, 2020 at 7:49 AM Tom Tromey wrote: > > > > Caroline> $ clang++ -gdwarf-5 -O0 -gsplit-dwarf pre-order.cpp > > Caroline> pre-order-common.cpp -o pre-order > > > > I wonder if the test suite can be run this way. > > > > Caroline> Oh. Those get used in my next upcoming patch (where I update GDB to > > Caroline> handle DWARFv5 .dwp files). I can either leave them in this patch, or > > Caroline> remove them from here and put them in the next one, whichever you > > Caroline> prefer. > > > > I think it's better for patches to be reasonably self-contained when > > possible. > > > > Also, there were other patches for DWARFv5 on the list in "recent" (this > > year) times. I wonder if those are relevant / related. > > > > Tom --000000000000ed2ecb05a7af2351 Content-Type: application/octet-stream; name="gdb-dwo-rnglists.updated.patch" Content-Disposition: attachment; filename="gdb-dwo-rnglists.updated.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kb8k52qg0 ZGlmZiAtLWdpdCBhL2dkYi9kd2FyZjIvcmVhZC5jIGIvZ2RiL2R3YXJmMi9yZWFkLmMKaW5kZXgg ZTY1NjZmOTY0OS4uZTYwMzFjNDY4MyAxMDA2NDQKLS0tIGEvZ2RiL2R3YXJmMi9yZWFkLmMKKysr IGIvZ2RiL2R3YXJmMi9yZWFkLmMKQEAgLTM0MCw2ICszNDAsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGR3b3Bfc2VjdGlvbl9uYW1lcwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgbG9j bGlzdHNfZHdvOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgbWFjaW5mb19kd287CiAg IHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1lcyBtYWNyb19kd287CisgIHN0cnVjdCBkd2FyZjJf c2VjdGlvbl9uYW1lcyBybmdsaXN0c19kd287CiAgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9uYW1l cyBzdHJfZHdvOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgc3RyX29mZnNldHNfZHdv OwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25fbmFtZXMgdHlwZXNfZHdvOwpAQCAtMzU1LDYgKzM1 Niw3IEBAIGR3b3Bfc2VjdGlvbl9uYW1lcyA9CiAgIHsgIi5kZWJ1Z19sb2NsaXN0cy5kd28iLCAi LnpkZWJ1Z19sb2NsaXN0cy5kd28iIH0sCiAgIHsgIi5kZWJ1Z19tYWNpbmZvLmR3byIsICIuemRl YnVnX21hY2luZm8uZHdvIiB9LAogICB7ICIuZGVidWdfbWFjcm8uZHdvIiwgIi56ZGVidWdfbWFj cm8uZHdvIiB9LAorICB7ICIuZGVidWdfcm5nbGlzdHMuZHdvIiwgIi56ZGVidWdfcm5nbGlzdHMu ZHdvIiB9LAogICB7ICIuZGVidWdfc3RyLmR3byIsICIuemRlYnVnX3N0ci5kd28iIH0sCiAgIHsg Ii5kZWJ1Z19zdHJfb2Zmc2V0cy5kd28iLCAiLnpkZWJ1Z19zdHJfb2Zmc2V0cy5kd28iIH0sCiAg IHsgIi5kZWJ1Z190eXBlcy5kd28iLCAiLnpkZWJ1Z190eXBlcy5kd28iIH0sCkBAIC00NDgsNiAr NDUwLDkgQEAgc3RydWN0IGR3YXJmMl9jdQogICAvKiBCYXNlIGFkZHJlc3Mgb2YgdGhpcyBjb21w aWxhdGlvbiB1bml0LiAgKi8KICAgZ2RiOjpvcHRpb25hbDxDT1JFX0FERFI+IGJhc2VfYWRkcmVz czsKIAorICAvKiBDVSBybmdsaXN0IHJhbmdlcyBjYW1lIGZyb20gc2tlbGV0b24gdW5pdC4gKi8K KyAgYm9vbCBjdV9yYW5nZXNfZnJvbV9za2VsZXRvbiA9IGZhbHNlOworCiAgIC8qIFRoZSBsYW5n dWFnZSB3ZSBhcmUgZGVidWdnaW5nLiAgKi8KICAgZW51bSBsYW5ndWFnZSBsYW5ndWFnZSA9IGxh bmd1YWdlX3Vua25vd247CiAgIGNvbnN0IHN0cnVjdCBsYW5ndWFnZV9kZWZuICpsYW5ndWFnZV9k ZWZuID0gbnVsbHB0cjsKQEAgLTY1MCw2ICs2NTUsNyBAQCBzdHJ1Y3QgZHdvX3NlY3Rpb25zCiAg IHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvIGxvY2xpc3RzOwogICBzdHJ1Y3QgZHdhcmYyX3Nl Y3Rpb25faW5mbyBtYWNpbmZvOwogICBzdHJ1Y3QgZHdhcmYyX3NlY3Rpb25faW5mbyBtYWNybzsK KyAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gcm5nbGlzdHM7CiAgIHN0cnVjdCBkd2FyZjJf c2VjdGlvbl9pbmZvIHN0cjsKICAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gc3RyX29mZnNl dHM7CiAgIC8qIEluIHRoZSBjYXNlIG9mIGEgdmlydHVhbCBEV08gZmlsZSwgdGhlc2UgdHdvIGFy ZSB1bnVzZWQuICAqLwpAQCAtMTM3OSwxMSArMTM4NSwxNiBAQCBzdGF0aWMgdm9pZCByZWFkX2Nh bGxfc2l0ZV9zY29wZSAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBkd2FyZjJfY3UgKmN1 KTsKIHN0YXRpYyB2b2lkIHJlYWRfdmFyaWFibGUgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBzdHJ1 Y3QgZHdhcmYyX2N1ICpjdSk7CiAKIHN0YXRpYyBpbnQgZHdhcmYyX3Jhbmdlc19yZWFkICh1bnNp Z25lZCwgQ09SRV9BRERSICosIENPUkVfQUREUiAqLAotCQkJICAgICAgIHN0cnVjdCBkd2FyZjJf Y3UgKiwgZHdhcmYyX3BzeW10YWIgKik7CisJCQkgICAgICAgc3RydWN0IGR3YXJmMl9jdSAqLCBk d2FyZjJfcHN5bXRhYiAqLAorCQkJICAgICAgIGR3YXJmX3RhZyk7CiAKIC8qIFJldHVybiB0aGUg LmRlYnVnX2xvY2xpc3RzIHNlY3Rpb24gdG8gdXNlIGZvciBjdS4gICovCiBzdGF0aWMgc3RydWN0 IGR3YXJmMl9zZWN0aW9uX2luZm8gKmN1X2RlYnVnX2xvY19zZWN0aW9uIChzdHJ1Y3QgZHdhcmYy X2N1ICpjdSk7CiAKKy8qIFJldHVybiB0aGUgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24gdG8gdXNl IGZvciBjdS4gICovCitzdGF0aWMgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKmN1X2RlYnVn X3JuZ2xpc3Rfc2VjdGlvbgorICAoc3RydWN0IGR3YXJmMl9jdSAqY3UpOworCiAvKiBIb3cgZHdh cmYyX2dldF9wY19ib3VuZHMgY29uc3RydWN0ZWQgaXRzICpMT1dQQyBhbmQgKkhJR0hQQyByZXR1 cm4KICAgIHZhbHVlcy4gIEtlZXAgdGhlIGl0ZW1zIG9yZGVyZWQgd2l0aCBpbmNyZWFzaW5nIGNv bnN0cmFpbnRzIGNvbXBsaWFuY2UuICAqLwogZW51bSBwY19ib3VuZHNfa2luZApAQCAtNzE4MSw2 ICs3MTkyLDExIEBAIGN1dHVfcmVhZGVyOjpjdXR1X3JlYWRlciAoZHdhcmYyX3Blcl9jdV9kYXRh ICp0aGlzX2N1LAogCSAgICAgIGR1bW15X3AgPSB0cnVlOwogCSAgICAgIHJldHVybjsKIAkgICAg fQorICAgICAgICAgIC8qIGlmIChkd2FyZjJfYXR0cl9ub19mb2xsb3cgKGNvbXBfdW5pdF9kaWUs IERXX0FUX3JhbmdlcykpICovCisgICAgICAgICAgaWYgKGNvbXBfdW5pdF9kaWUtPmF0dHIgKERX X0FUX3JhbmdlcykgIT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY3Ut PmN1X3Jhbmdlc19mcm9tX3NrZWxldG9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAkgIGNvbXBf dW5pdF9kaWUgPSBkd29fY29tcF91bml0X2RpZTsKIAl9CiAgICAgICBlbHNlCkBAIC0xMjM5Nyw2 ICsxMjQxMywxMSBAQCBkd2FyZjJfbG9jYXRlX2R3b19zZWN0aW9ucyAoYmZkICphYmZkLCBhc2Vj dGlvbiAqc2VjdHAsIHZvaWQgKmR3b19zZWN0aW9uc19wdHIpCiAgICAgICBkd29fc2VjdGlvbnMt Pm1hY3JvLnMuc2VjdGlvbiA9IHNlY3RwOwogICAgICAgZHdvX3NlY3Rpb25zLT5tYWNyby5zaXpl ID0gYmZkX3NlY3Rpb25fc2l6ZSAoc2VjdHApOwogICAgIH0KKyAgZWxzZSBpZiAoc2VjdGlvbl9p c19wIChzZWN0cC0+bmFtZSwgJm5hbWVzLT5ybmdsaXN0c19kd28pKQorICAgIHsKKyAgICAgIGR3 b19zZWN0aW9ucy0+cm5nbGlzdHMucy5zZWN0aW9uID0gc2VjdHA7CisgICAgICBkd29fc2VjdGlv bnMtPnJuZ2xpc3RzLnNpemUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWN0cCk7CisgICAgfQogICBl bHNlIGlmIChzZWN0aW9uX2lzX3AgKHNlY3RwLT5uYW1lLCAmbmFtZXMtPnN0cl9kd28pKQogICAg IHsKICAgICAgIGR3b19zZWN0aW9ucy0+c3RyLnMuc2VjdGlvbiA9IHNlY3RwOwpAQCAtMTM3NDEs NyArMTM3NjIsNyBAQCByZWFkX3ZhcmlhYmxlIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0 IGR3YXJmMl9jdSAqY3UpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbGJhY2s+CiBzdGF0aWMgYm9v bAogZHdhcmYyX3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJm Ml9jdSAqY3UsCi0JCQkgQ2FsbGJhY2sgJiZjYWxsYmFjaykKKwkJCSBkd2FyZl90YWcgdGFnLCBD YWxsYmFjayAmJmNhbGxiYWNrKQogewogICBkd2FyZjJfcGVyX29iamZpbGUgKnBlcl9vYmpmaWxl ID0gY3UtPnBlcl9vYmpmaWxlOwogICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSA9IHBlcl9vYmpm aWxlLT5vYmpmaWxlOwpAQCAtMTM3NTEsMTcgKzEzNzcyLDQwIEBAIGR3YXJmMl9ybmdsaXN0c19w cm9jZXNzICh1bnNpZ25lZCBvZmZzZXQsIHN0cnVjdCBkd2FyZjJfY3UgKmN1LAogICBjb25zdCBn ZGJfYnl0ZSAqYnVmZmVyOwogICBDT1JFX0FERFIgYmFzZWFkZHI7CiAgIGJvb2wgb3ZlcmZsb3cg PSBmYWxzZTsKKyAgVUxPTkdFU1QgYWRkcl9pbmRleDsKKyAgYm9vbCBpZ25vcmVfZHdvX3VuaXQg PSBmYWxzZTsKKyAgc3RydWN0IGR3YXJmMl9zZWN0aW9uX2luZm8gKnJuZ2xpc3RzX3NlY3Rpb247 CiAKICAgYmFzZSA9IGN1LT5iYXNlX2FkZHJlc3M7CiAKLSAgcGVyX29iamZpbGUtPnBlcl9iZmQt PnJuZ2xpc3RzLnJlYWQgKG9iamZpbGUpOwotICBpZiAob2Zmc2V0ID49IHBlcl9vYmpmaWxlLT5w ZXJfYmZkLT5ybmdsaXN0cy5zaXplKQorICAvKiBJZiB0aGUgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0 ZSB3YXMgcGFydCBvZiBhIERXX1RBR19za2VsZXRvbl91bml0IHRoYXQgd2FzCisgICAgIGNoYW5n ZWQgaW50byBhIERXX1RBR19jb21waWxlX3VuaXQgYWZ0ZXIgY2FsbGluZyByZWFkX2N1dHVfZGll X2Zyb21fZHdvLAorICAgICB3ZSB3YW50IHRvIHVzZSB0aGUgcm5nbGlzdCBpbiB0aGUgb2JqZmls ZSByYXRoZXIgdGhhbiB0aGUgb25lIGluIHRoZQorICAgICBkd29fdW5pdC4gKi8KKyAgaWYgKHRh ZyA9PSBEV19UQUdfY29tcGlsZV91bml0ICYmCisgICAgICBjdS0+Y3VfcmFuZ2VzX2Zyb21fc2tl bGV0b24pCisgICAgaWdub3JlX2R3b191bml0ID0gdHJ1ZTsKKworICAvKiBFbHNlZSwgaWYgdGhl cmUncyBhIGR3b191bml0LCB3ZSB3YW50IHRoZSBybmdsaXN0IGZyb20gdGhlIGR3byBmaWxlLiAg Ki8KKyAgaWYgKGN1LT5kd29fdW5pdCAmJgorICAgICAgY3UtPmR3b191bml0LT5kd29fZmlsZS0+ c2VjdGlvbnMucm5nbGlzdHMuc2l6ZSA+IDAgJiYKKyAgICAgICFpZ25vcmVfZHdvX3VuaXQpCisg ICAgeworICAgICAgcm5nbGlzdHNfc2VjdGlvbiA9ICZjdS0+ZHdvX3VuaXQtPmR3b19maWxlLT5z ZWN0aW9ucy5ybmdsaXN0czsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBybmdsaXN0c19z ZWN0aW9uID0gJnBlcl9vYmpmaWxlLT5wZXJfYmZkLT5ybmdsaXN0czsKKyAgICB9CisKKyAgcm5n bGlzdHNfc2VjdGlvbi0+cmVhZCAob2JqZmlsZSk7CisgIGlmIChvZmZzZXQgPj0gcm5nbGlzdHNf c2VjdGlvbi0+c2l6ZSkKICAgICB7CiAgICAgICBjb21wbGFpbnQgKF8oIk9mZnNldCAlZCBvdXQg b2YgYm91bmRzIGZvciBEV19BVF9yYW5nZXMgYXR0cmlidXRlIiksCiAJCSBvZmZzZXQpOwogICAg ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgYnVmZmVyID0gcGVyX29iamZpbGUtPnBlcl9iZmQt PnJuZ2xpc3RzLmJ1ZmZlciArIG9mZnNldDsKKyAgYnVmZmVyID0gcm5nbGlzdHNfc2VjdGlvbi0+ YnVmZmVyICsgb2Zmc2V0OwogCiAgIGJhc2VhZGRyID0gb2JqZmlsZS0+dGV4dF9zZWN0aW9uX29m ZnNldCAoKTsKIApAQCAtMTM3NjksOCArMTM4MTMsOCBAQCBkd2FyZjJfcm5nbGlzdHNfcHJvY2Vz cyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKICAgICB7CiAgICAgICAv KiBJbml0aWFsaXplIGl0IGR1ZSB0byBhIGZhbHNlIGNvbXBpbGVyIHdhcm5pbmcuICAqLwogICAg ICAgQ09SRV9BRERSIHJhbmdlX2JlZ2lubmluZyA9IDAsIHJhbmdlX2VuZCA9IDA7Ci0gICAgICBj b25zdCBnZGJfYnl0ZSAqYnVmX2VuZCA9IChwZXJfb2JqZmlsZS0+cGVyX2JmZC0+cm5nbGlzdHMu YnVmZmVyCi0JCQkJICsgcGVyX29iamZpbGUtPnBlcl9iZmQtPnJuZ2xpc3RzLnNpemUpOworICAg ICAgY29uc3QgZ2RiX2J5dGUgKmJ1Zl9lbmQgPSAocm5nbGlzdHNfc2VjdGlvbi0+YnVmZmVyCisJ CQkJICsgcm5nbGlzdHNfc2VjdGlvbi0+c2l6ZSk7CiAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNf cmVhZDsKIAogICAgICAgaWYgKGJ1ZmZlciA9PSBidWZfZW5kKQpAQCAtMTM3OTIsNiArMTM4MzYs MTEgQEAgZHdhcmYyX3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3 YXJmMl9jdSAqY3UsCiAJICBiYXNlID0gY3UtPmhlYWRlci5yZWFkX2FkZHJlc3MgKG9iZmQsIGJ1 ZmZlciwgJmJ5dGVzX3JlYWQpOwogCSAgYnVmZmVyICs9IGJ5dGVzX3JlYWQ7CiAJICBicmVhazsK KyAgICAgICAgY2FzZSBEV19STEVfYmFzZV9hZGRyZXNzeDoKKyAgICAgICAgICBhZGRyX2luZGV4 ID0gcmVhZF91bnNpZ25lZF9sZWIxMjggKG9iZmQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOworICAg ICAgICAgIGJ1ZmZlciArPSBieXRlc19yZWFkOworICAgICAgICAgIGJhc2UgPSByZWFkX2FkZHJf aW5kZXggKGN1LCBhZGRyX2luZGV4KTsKKyAgICAgICAgICBicmVhazsKIAljYXNlIERXX1JMRV9z dGFydF9sZW5ndGg6CiAJICBpZiAoYnVmZmVyICsgY3UtPmhlYWRlci5hZGRyX3NpemUgPiBidWZf ZW5kKQogCSAgICB7CkBAIC0xMzgxMCw2ICsxMzg1OSwxOSBAQCBkd2FyZjJfcm5nbGlzdHNfcHJv Y2VzcyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKIAkgICAgICBicmVh azsKIAkgICAgfQogCSAgYnJlYWs7CisJY2FzZSBEV19STEVfc3RhcnR4X2xlbmd0aDoKKyAgICAg ICAgICBhZGRyX2luZGV4ID0gcmVhZF91bnNpZ25lZF9sZWIxMjggKG9iZmQsIGJ1ZmZlciwgJmJ5 dGVzX3JlYWQpOworICAgICAgICAgIGJ1ZmZlciArPSBieXRlc19yZWFkOworICAgICAgICAgIHJh bmdlX2JlZ2lubmluZyA9IHJlYWRfYWRkcl9pbmRleCAoY3UsIGFkZHJfaW5kZXgpOworICAgICAg ICAgIGlmIChidWZmZXIgPiBidWZfZW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBv dmVyZmxvdyA9IHRydWU7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg ICAgICAgIHJhbmdlX2VuZCA9IChyYW5nZV9iZWdpbm5pbmcKKyAgICAgICAgICAgICAgICAgICAg ICAgKyByZWFkX3Vuc2lnbmVkX2xlYjEyOCAob2JmZCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCkpOwor ICAgICAgICAgIGJ1ZmZlciArPSBieXRlc19yZWFkOworICAgICAgICAgIGJyZWFrOwogCWNhc2Ug RFdfUkxFX29mZnNldF9wYWlyOgogCSAgcmFuZ2VfYmVnaW5uaW5nID0gcmVhZF91bnNpZ25lZF9s ZWIxMjggKG9iZmQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOwogCSAgYnVmZmVyICs9IGJ5dGVzX3Jl YWQ7CkBAIC0xMzgzOCw3ICsxMzkwMCwyMCBAQCBkd2FyZjJfcm5nbGlzdHNfcHJvY2VzcyAodW5z aWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKIAkgIHJhbmdlX2VuZCA9IGN1LT5o ZWFkZXIucmVhZF9hZGRyZXNzIChvYmZkLCBidWZmZXIsICZieXRlc19yZWFkKTsKIAkgIGJ1ZmZl ciArPSBieXRlc19yZWFkOwogCSAgYnJlYWs7Ci0JZGVmYXVsdDoKKwljYXNlIERXX1JMRV9zdGFy dHhfZW5keDoKKyAgICAgICAgICBhZGRyX2luZGV4ID0gcmVhZF91bnNpZ25lZF9sZWIxMjggKG9i ZmQsIGJ1ZmZlciwgJmJ5dGVzX3JlYWQpOworICAgICAgICAgIGJ1ZmZlciArPSBieXRlc19yZWFk OworICAgICAgICAgIHJhbmdlX2JlZ2lubmluZyA9IHJlYWRfYWRkcl9pbmRleCAoY3UsIGFkZHJf aW5kZXgpOworICAgICAgICAgIGlmIChidWZmZXIgPiBidWZfZW5kKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBvdmVyZmxvdyA9IHRydWU7CisgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorICAgICAgICAgIGFkZHJfaW5kZXggPSByZWFkX3Vuc2lnbmVkX2xlYjEyOCAo b2JmZCwgYnVmZmVyLCAmYnl0ZXNfcmVhZCk7CisgICAgICAgICAgYnVmZmVyICs9IGJ5dGVzX3Jl YWQ7CisgICAgICAgICAgcmFuZ2VfZW5kID0gcmVhZF9hZGRyX2luZGV4IChjdSwgYWRkcl9pbmRl eCk7CisgICAgICAgICAgYnJlYWs7CisgCWRlZmF1bHQ6CiAJICBjb21wbGFpbnQgKF8oIkludmFs aWQgLmRlYnVnX3JuZ2xpc3RzIGRhdGEgKG5vIGJhc2UgYWRkcmVzcykiKSk7CiAJICByZXR1cm4g ZmFsc2U7CiAJfQpAQCAtMTM4NjYsOCArMTM5NDEsMTIgQEAgZHdhcmYyX3JuZ2xpc3RzX3Byb2Nl c3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3UsCiAgICAgICBpZiAocmFu Z2VfYmVnaW5uaW5nID09IHJhbmdlX2VuZCkKIAljb250aW51ZTsKIAotICAgICAgcmFuZ2VfYmVn aW5uaW5nICs9ICpiYXNlOwotICAgICAgcmFuZ2VfZW5kICs9ICpiYXNlOworICAgICAgLyogT25s eSBEV19STEVfb2Zmc2V0X3BhaXIgbmVlZHMgdGhlIGJhc2UgYWRkcmVzcyBhZGRlZC4gICovCisg ICAgICBpZiAocmxldCA9PSBEV19STEVfb2Zmc2V0X3BhaXIpCisJeworCSAgcmFuZ2VfYmVnaW5u aW5nICs9ICpiYXNlOworCSAgcmFuZ2VfZW5kICs9ICpiYXNlOworCX0KIAogICAgICAgLyogQSBu b3QtdW5jb21tb24gY2FzZSBvZiBiYWQgZGVidWcgaW5mby4KIAkgRG9uJ3QgcG9sbHV0ZSB0aGUg YWRkcm1hcCB3aXRoIGJhZCBkYXRhLiAgKi8KQEAgLTEzOTAwLDcgKzEzOTc5LDcgQEAgZHdhcmYy X3JuZ2xpc3RzX3Byb2Nlc3MgKHVuc2lnbmVkIG9mZnNldCwgc3RydWN0IGR3YXJmMl9jdSAqY3Us CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDYWxsYmFjaz4KIHN0YXRpYyBpbnQKLWR3YXJmMl9yYW5n ZXNfcHJvY2VzcyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKK2R3YXJm Ml9yYW5nZXNfcHJvY2VzcyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwg ZHdhcmZfdGFnIHRhZywKIAkJICAgICAgIENhbGxiYWNrICYmY2FsbGJhY2spCiB7CiAgIGR3YXJm Ml9wZXJfb2JqZmlsZSAqcGVyX29iamZpbGUgPSBjdS0+cGVyX29iamZpbGU7CkBAIC0xMzkxNiw3 ICsxMzk5NSw3IEBAIGR3YXJmMl9yYW5nZXNfcHJvY2VzcyAodW5zaWduZWQgb2Zmc2V0LCBzdHJ1 Y3QgZHdhcmYyX2N1ICpjdSwKICAgQ09SRV9BRERSIGJhc2VhZGRyOwogCiAgIGlmIChjdV9oZWFk ZXItPnZlcnNpb24gPj0gNSkKLSAgICByZXR1cm4gZHdhcmYyX3JuZ2xpc3RzX3Byb2Nlc3MgKG9m ZnNldCwgY3UsIGNhbGxiYWNrKTsKKyAgICByZXR1cm4gZHdhcmYyX3JuZ2xpc3RzX3Byb2Nlc3Mg KG9mZnNldCwgY3UsIHRhZywgY2FsbGJhY2spOwogCiAgIGJhc2UgPSBjdS0+YmFzZV9hZGRyZXNz OwogCkBAIC0xNDAwMiw3ICsxNDA4MSw3IEBAIGR3YXJmMl9yYW5nZXNfcHJvY2VzcyAodW5zaWdu ZWQgb2Zmc2V0LCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKIHN0YXRpYyBpbnQKIGR3YXJmMl9yYW5n ZXNfcmVhZCAodW5zaWduZWQgb2Zmc2V0LCBDT1JFX0FERFIgKmxvd19yZXR1cm4sCiAJCSAgICBD T1JFX0FERFIgKmhpZ2hfcmV0dXJuLCBzdHJ1Y3QgZHdhcmYyX2N1ICpjdSwKLQkJICAgIGR3YXJm Ml9wc3ltdGFiICpyYW5nZXNfcHN0KQorCQkgICAgZHdhcmYyX3BzeW10YWIgKnJhbmdlc19wc3Qs IGR3YXJmX3RhZyB0YWcpCiB7CiAgIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlID0gY3UtPnBlcl9v YmpmaWxlLT5vYmpmaWxlOwogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IG9iamZpbGUtPmFy Y2ggKCk7CkBAIC0xNDAxMiw3ICsxNDA5MSw3IEBAIGR3YXJmMl9yYW5nZXNfcmVhZCAodW5zaWdu ZWQgb2Zmc2V0LCBDT1JFX0FERFIgKmxvd19yZXR1cm4sCiAgIENPUkVfQUREUiBoaWdoID0gMDsK ICAgaW50IHJldHZhbDsKIAotICByZXR2YWwgPSBkd2FyZjJfcmFuZ2VzX3Byb2Nlc3MgKG9mZnNl dCwgY3UsCisgIHJldHZhbCA9IGR3YXJmMl9yYW5nZXNfcHJvY2VzcyAob2Zmc2V0LCBjdSwgdGFn LAogICAgIFsmXSAoQ09SRV9BRERSIHJhbmdlX2JlZ2lubmluZywgQ09SRV9BRERSIHJhbmdlX2Vu ZCkKICAgICB7CiAgICAgICBpZiAocmFuZ2VzX3BzdCAhPSBOVUxMKQpAQCAtMTQxMDUsNyArMTQx ODQsOCBAQCBkd2FyZjJfZ2V0X3BjX2JvdW5kcyAoc3RydWN0IGRpZV9pbmZvICpkaWUsIENPUkVf QUREUiAqbG93cGMsCiAJICAvKiBEV19BVF9ybmdsaXN0c19iYXNlIGRvZXMgbm90IGFwcGx5IHRv IERJRXMgZnJvbSB0aGUgRFdPIHNrZWxldG9uLgogCSAgICAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2Yg dGhlIGZhY3QgdGhhdCBEV19BVF9yYW5nZXMgZG9lcyBub3QgYXBwZWFyCiAJICAgICBpbiBEV19U QUdfY29tcGlsZV91bml0IG9mIERXTyBmaWxlcy4gICovCi0JICBpbnQgbmVlZF9yYW5nZXNfYmFz ZSA9IGRpZS0+dGFnICE9IERXX1RBR19jb21waWxlX3VuaXQ7CisJICBpbnQgbmVlZF9yYW5nZXNf YmFzZSA9IChkaWUtPnRhZyAhPSBEV19UQUdfY29tcGlsZV91bml0CisJCQkJICAmJiBhdHRyLT5m b3JtICE9IERXX0ZPUk1fcm5nbGlzdHgpOwogCSAgdW5zaWduZWQgaW50IHJhbmdlc19vZmZzZXQg PSAoRFdfVU5TTkQgKGF0dHIpCiAJCQkJCSsgKG5lZWRfcmFuZ2VzX2Jhc2UKIAkJCQkJICAgPyBj dS0+cmFuZ2VzX2Jhc2UKQEAgLTE0MTEzLDcgKzE0MTkzLDggQEAgZHdhcmYyX2dldF9wY19ib3Vu ZHMgKHN0cnVjdCBkaWVfaW5mbyAqZGllLCBDT1JFX0FERFIgKmxvd3BjLAogCiAJICAvKiBWYWx1 ZSBvZiB0aGUgRFdfQVRfcmFuZ2VzIGF0dHJpYnV0ZSBpcyB0aGUgb2Zmc2V0IGluIHRoZQogCSAg ICAgLmRlYnVnX3JhbmdlcyBzZWN0aW9uLiAgKi8KLQkgIGlmICghZHdhcmYyX3Jhbmdlc19yZWFk IChyYW5nZXNfb2Zmc2V0LCAmbG93LCAmaGlnaCwgY3UsIHBzdCkpCisJICBpZiAoIWR3YXJmMl9y YW5nZXNfcmVhZCAocmFuZ2VzX29mZnNldCwgJmxvdywgJmhpZ2gsIGN1LCBwc3QsCisJCQkJICAg ZGllLT50YWcpKQogCSAgICByZXR1cm4gUENfQk9VTkRTX0lOVkFMSUQ7CiAJICAvKiBGb3VuZCBk aXNjb250aW51b3VzIHJhbmdlIG9mIGFkZHJlc3Nlcy4gICovCiAJICByZXQgPSBQQ19CT1VORFNf UkFOR0VTOwpAQCAtMTQyNzYsNyArMTQzNTcsOCBAQCBkd2FyZjJfcmVjb3JkX2Jsb2NrX3Jhbmdl cyAoc3RydWN0IGRpZV9pbmZvICpkaWUsIHN0cnVjdCBibG9jayAqYmxvY2ssCiAgICAgICAvKiBE V19BVF9ybmdsaXN0c19iYXNlIGRvZXMgbm90IGFwcGx5IHRvIERJRXMgZnJvbSB0aGUgRFdPIHNr ZWxldG9uLgogCSBXZSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IERXX0FUX3Jhbmdl cyBkb2VzIG5vdCBhcHBlYXIKIAkgaW4gRFdfVEFHX2NvbXBpbGVfdW5pdCBvZiBEV08gZmlsZXMu ICAqLwotICAgICAgaW50IG5lZWRfcmFuZ2VzX2Jhc2UgPSBkaWUtPnRhZyAhPSBEV19UQUdfY29t cGlsZV91bml0OworICAgICAgaW50IG5lZWRfcmFuZ2VzX2Jhc2UgPSAoZGllLT50YWcgIT0gRFdf VEFHX2NvbXBpbGVfdW5pdAorCQkJICAgICAgJiYgYXR0ci0+Zm9ybSAhPSBEV19GT1JNX3JuZ2xp c3R4KTsKIAogICAgICAgLyogVGhlIHZhbHVlIG9mIHRoZSBEV19BVF9yYW5nZXMgYXR0cmlidXRl IGlzIHRoZSBvZmZzZXQgb2YgdGhlCiAgICAgICAgICBhZGRyZXNzIHJhbmdlIGxpc3QgaW4gdGhl IC5kZWJ1Z19yYW5nZXMgc2VjdGlvbi4gICovCkBAIC0xNDI4NCw3ICsxNDM2Niw3IEBAIGR3YXJm Ml9yZWNvcmRfYmxvY2tfcmFuZ2VzIChzdHJ1Y3QgZGllX2luZm8gKmRpZSwgc3RydWN0IGJsb2Nr ICpibG9jaywKIAkJCSAgICAgICsgKG5lZWRfcmFuZ2VzX2Jhc2UgPyBjdS0+cmFuZ2VzX2Jhc2Ug OiAwKSk7CiAKICAgICAgIHN0ZDo6dmVjdG9yPGJsb2NrcmFuZ2U+IGJsb2NrdmVjOwotICAgICAg ZHdhcmYyX3Jhbmdlc19wcm9jZXNzIChvZmZzZXQsIGN1LAorICAgICAgZHdhcmYyX3Jhbmdlc19w cm9jZXNzIChvZmZzZXQsIGN1LCBkaWUtPnRhZywKIAlbJl0gKENPUkVfQUREUiBzdGFydCwgQ09S RV9BRERSIGVuZCkKIAl7CiAJICBzdGFydCArPSBiYXNlYWRkcjsKQEAgLTE4MTE1LDYgKzE4MTk3 LDExIEBAIHJlYWRfZnVsbF9kaWVfMSAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJl YWRlciwKICAgYXV0byBtYXliZV9hZGRyX2Jhc2UgPSBkaWUtPmFkZHJfYmFzZSAoKTsKICAgaWYg KG1heWJlX2FkZHJfYmFzZS5oYXNfdmFsdWUgKCkpCiAgICAgY3UtPmFkZHJfYmFzZSA9ICptYXli ZV9hZGRyX2Jhc2U7CisKKyAgYXR0ciA9IGRpZS0+YXR0ciAoRFdfQVRfcm5nbGlzdHNfYmFzZSk7 CisgIGlmIChhdHRyICE9IG51bGxwdHIpCisgICAgY3UtPnJhbmdlc19iYXNlID0gRFdfVU5TTkQg KGF0dHIpOworCiAgIGZvciAoaW50IGluZGV4IDogaW5kZXhlc190aGF0X25lZWRfcmVwcm9jZXNz KQogICAgIHJlYWRfYXR0cmlidXRlX3JlcHJvY2VzcyAocmVhZGVyLCAmZGllLT5hdHRyc1tpbmRl eF0pOwogICAqZGllcCA9IGRpZTsKQEAgLTE4NjMzLDcgKzE4NzIwLDggQEAgcGFydGlhbF9kaWVf aW5mbzo6cmVhZCAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJlYWRlciwKIAkgICAg LyogSXQgd291bGQgYmUgbmljZSB0byByZXVzZSBkd2FyZjJfZ2V0X3BjX2JvdW5kcyBoZXJlLAog CSAgICAgICBidXQgdGhhdCByZXF1aXJlcyBhIGZ1bGwgRElFLCBzbyBpbnN0ZWFkIHdlIGp1c3QK IAkgICAgICAgcmVpbXBsZW1lbnQgaXQuICAqLwotCSAgICBpbnQgbmVlZF9yYW5nZXNfYmFzZSA9 IHRhZyAhPSBEV19UQUdfY29tcGlsZV91bml0OworCSAgICBpbnQgbmVlZF9yYW5nZXNfYmFzZSA9 ICh0YWcgIT0gRFdfVEFHX2NvbXBpbGVfdW5pdAorCQkJCSAgICAmJiBhdHRyLmZvcm0gIT0gRFdf Rk9STV9ybmdsaXN0eCk7CiAJICAgIHVuc2lnbmVkIGludCByYW5nZXNfb2Zmc2V0ID0gKERXX1VO U05EICgmYXR0cikKIAkJCQkJICArIChuZWVkX3Jhbmdlc19iYXNlCiAJCQkJCSAgICAgPyBjdS0+ cmFuZ2VzX2Jhc2UKQEAgLTE4NjQyLDcgKzE4NzMwLDcgQEAgcGFydGlhbF9kaWVfaW5mbzo6cmVh ZCAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3MgKnJlYWRlciwKIAkgICAgLyogVmFsdWUg b2YgdGhlIERXX0FUX3JhbmdlcyBhdHRyaWJ1dGUgaXMgdGhlIG9mZnNldCBpbiB0aGUKIAkgICAg ICAgLmRlYnVnX3JhbmdlcyBzZWN0aW9uLiAgKi8KIAkgICAgaWYgKGR3YXJmMl9yYW5nZXNfcmVh ZCAocmFuZ2VzX29mZnNldCwgJmxvd3BjLCAmaGlnaHBjLCBjdSwKLQkJCQkgICAgbnVsbHB0cikp CisJCQkJICAgIG51bGxwdHIsIHRhZykpCiAJICAgICAgaGFzX3BjX2luZm8gPSAxOwogCSAgfQog CSAgYnJlYWs7CkBAIC0xOTA0Myw2ICsxOTEzMSw0OSBAQCByZWFkX2xvY2xpc3RfaW5kZXggKHN0 cnVjdCBkd2FyZjJfY3UgKmN1LCBVTE9OR0VTVCBsb2NsaXN0X2luZGV4KQogICAgIHJldHVybiBi ZmRfZ2V0XzY0IChhYmZkLCBpbmZvX3B0cikgKyBsb2NsaXN0X2Jhc2U7CiB9CiAKKy8qIEdpdmVu IGEgRFdfRk9STV9ybmdsaXN0eCB2YWx1ZSBybmdsaXN0X2luZGV4LCBmZXRjaCB0aGUgb2Zmc2V0 IGZyb20gdGhlCisgICBhcnJheSBvZiBvZmZzZXRzIGluIHRoZSAuZGVidWdfcm5nbGlzdHMgc2Vj dGlvbi4gICovCitzdGF0aWMgQ09SRV9BRERSCityZWFkX3JuZ2xpc3RfaW5kZXggKHN0cnVjdCBk d2FyZjJfY3UgKmN1LCBVTE9OR0VTVCBybmdsaXN0X2luZGV4KQoreworICBzdHJ1Y3QgZHdhcmYy X3Blcl9vYmpmaWxlICpkd2FyZjJfcGVyX29iamZpbGUgPSBjdS0+cGVyX29iamZpbGU7CisgIHN0 cnVjdCBvYmpmaWxlICpvYmpmaWxlID0gZHdhcmYyX3Blcl9vYmpmaWxlLT5vYmpmaWxlOworICBi ZmQgKmFiZmQgPSBvYmpmaWxlLT5vYmZkOworICBVTE9OR0VTVCBybmdsaXN0X2hlYWRlcl9zaXpl ID0KKyAgICAoY3UtPmhlYWRlci5pbml0aWFsX2xlbmd0aF9zaXplID09IDQgPyBMT0NMSVNUX0hF QURFUl9TSVpFMzIKKyAgICAgOiBMT0NMSVNUX0hFQURFUl9TSVpFNjQpOworICBVTE9OR0VTVCBy bmdsaXN0X2Jhc2UgPQorICAgICAgKGN1LT5kd29fdW5pdCkgPyBybmdsaXN0X2hlYWRlcl9zaXpl IDogY3UtPnJhbmdlc19iYXNlOworCisgIHN0cnVjdCBkd2FyZjJfc2VjdGlvbl9pbmZvICpzZWN0 aW9uID0gY3VfZGVidWdfcm5nbGlzdF9zZWN0aW9uIChjdSk7CisgIGlmIChzZWN0aW9uID09IG51 bGxwdHIpCisgICAgZXJyb3IoXygiQ2Fubm90IGZpbmQgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rpb24g W2luIG1vZHVsZSAlc10iKSwKKwkgIG9iamZpbGVfbmFtZShvYmpmaWxlKSk7CisgIHNlY3Rpb24t PnJlYWQgKG9iamZpbGUpOworICBpZiAoc2VjdGlvbi0+YnVmZmVyID09IE5VTEwpCisgICAgZXJy b3IoXygiRFdfRk9STV9ybmdsaXN0eCB1c2VkIHdpdGhvdXQgLmRlYnVnX3JuZ2xpc3RzIHNlY3Rp b24gIgorCSAgICAiW2luIG1vZHVsZSAlc10iKSwKKyAgICAgICBvYmpmaWxlX25hbWUgKG9iamZp bGUpKTsKKyAgc3RydWN0IGxvY2xpc3RfaGVhZGVyIGhlYWRlcjsKKyAgcmVhZF9sb2NsaXN0X2hl YWRlciAoJmhlYWRlciwgc2VjdGlvbik7CisgIGlmIChybmdsaXN0X2luZGV4ID49IGhlYWRlci5v ZmZzZXRfZW50cnlfY291bnQpCisgICAgZXJyb3IoXygiRFdfRk9STV9ybmdsaXN0eCBpbmRleCBw b2ludGluZyBvdXRzaWRlIG9mICIKKwkgICAgIi5kZWJ1Z19ybmdsaXN0cyBvZmZzZXQgYXJyYXkg W2luIG1vZHVsZSAlc10iKSwKKwkgICAgb2JqZmlsZV9uYW1lKG9iamZpbGUpKTsKKyAgaWYgKHJu Z2xpc3RfYmFzZSArIHJuZ2xpc3RfaW5kZXggKiBjdS0+aGVhZGVyLm9mZnNldF9zaXplCisgICAg ICAgID49IHNlY3Rpb24tPnNpemUpCisgICAgZXJyb3IoXygiRFdfRk9STV9ybmdsaXN0eCBwb2lu dGluZyBvdXRzaWRlIG9mICIKKyAgICAgICAgICAgICIuZGVidWdfcm5nbGlzdHMgc2VjdGlvbiBb aW4gbW9kdWxlICVzXSIpLAorICAgICAgICAgIG9iamZpbGVfbmFtZShvYmpmaWxlKSk7CisgIGNv bnN0IGdkYl9ieXRlICppbmZvX3B0cgorICAgID0gc2VjdGlvbi0+YnVmZmVyICsgcm5nbGlzdF9i YXNlICsgcm5nbGlzdF9pbmRleCAqIGN1LT5oZWFkZXIub2Zmc2V0X3NpemU7CisKKyAgaWYgKGN1 LT5oZWFkZXIub2Zmc2V0X3NpemUgPT0gNCkKKyAgICByZXR1cm4gcmVhZF80X2J5dGVzIChhYmZk LCBpbmZvX3B0cikgKyBybmdsaXN0X2Jhc2U7CisgIGVsc2UKKyAgICByZXR1cm4gcmVhZF84X2J5 dGVzIChhYmZkLCBpbmZvX3B0cikgKyBybmdsaXN0X2Jhc2U7Cit9CisKIC8qIFByb2Nlc3MgdGhl IGF0dHJpYnV0ZXMgdGhhdCBoYWQgdG8gYmUgc2tpcHBlZCBpbiB0aGUgZmlyc3Qgcm91bmQuIFRo ZXNlCiAgICBhdHRyaWJ1dGVzIGFyZSB0aGUgb25lcyB0aGF0IG5lZWQgc3RyX29mZnNldHNfYmFz ZSBvciBhZGRyX2Jhc2UgYXR0cmlidXRlcy4KICAgIFRoZXkgY291bGQgbm90IGhhdmUgYmVlbiBw cm9jZXNzZWQgaW4gdGhlIGZpcnN0IHJvdW5kLCBiZWNhdXNlIGF0IHRoZSB0aW1lCkBAIC0xOTA2 MSw2ICsxOTE5Miw5IEBAIHJlYWRfYXR0cmlidXRlX3JlcHJvY2VzcyAoY29uc3Qgc3RydWN0IGRp ZV9yZWFkZXJfc3BlY3MgKnJlYWRlciwKICAgICAgIGNhc2UgRFdfRk9STV9sb2NsaXN0eDoKIAkg RFdfVU5TTkQgKGF0dHIpID0gcmVhZF9sb2NsaXN0X2luZGV4IChjdSwgRFdfVU5TTkQgKGF0dHIp KTsKIAkgYnJlYWs7CisgICAgICBjYXNlIERXX0ZPUk1fcm5nbGlzdHg6CisgICAgICAgIERXX1VO U05EIChhdHRyKSA9IHJlYWRfcm5nbGlzdF9pbmRleCAoY3UsIERXX1VOU05EIChhdHRyKSk7Cisg ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBEV19GT1JNX3N0cng6CiAgICAgICBjYXNlIERXX0ZP Uk1fc3RyeDE6CiAgICAgICBjYXNlIERXX0ZPUk1fc3RyeDI6CkBAIC0xOTI0Miw4ICsxOTM3Niwx MCBAQCByZWFkX2F0dHJpYnV0ZV92YWx1ZSAoY29uc3Qgc3RydWN0IGRpZV9yZWFkZXJfc3BlY3Mg KnJlYWRlciwKICAgICAgIERXX1NORCAoYXR0cikgPSByZWFkX3NpZ25lZF9sZWIxMjggKGFiZmQs IGluZm9fcHRyLCAmYnl0ZXNfcmVhZCk7CiAgICAgICBpbmZvX3B0ciArPSBieXRlc19yZWFkOwog ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19GT1JNX3VkYXRhOgogICAgIGNhc2UgRFdfRk9STV9y bmdsaXN0eDoKKyAgICAgICpuZWVkX3JlcHJvY2VzcyA9IHRydWU7CisgICAgICAvKiBGQUxMVEhS T1VHSCAqLworICAgIGNhc2UgRFdfRk9STV91ZGF0YToKICAgICAgIERXX1VOU05EIChhdHRyKSA9 IHJlYWRfdW5zaWduZWRfbGViMTI4IChhYmZkLCBpbmZvX3B0ciwgJmJ5dGVzX3JlYWQpOwogICAg ICAgaW5mb19wdHIgKz0gYnl0ZXNfcmVhZDsKICAgICAgIGJyZWFrOwpAQCAtMjMzMzIsNiArMjM0 NjgsMjUgQEAgY3VfZGVidWdfbG9jX3NlY3Rpb24gKHN0cnVjdCBkd2FyZjJfY3UgKmN1KQogCQkJ CSAgOiAmcGVyX29iamZpbGUtPnBlcl9iZmQtPmxvYyk7CiB9CiAKKy8qIFJldHVybiB0aGUgLmRl YnVnX3JuZ2xpc3RzIHNlY3Rpb24gdG8gdXNlIGZvciBDVS4gICovCitzdGF0aWMgc3RydWN0IGR3 YXJmMl9zZWN0aW9uX2luZm8gKgorY3VfZGVidWdfcm5nbGlzdF9zZWN0aW9uIChzdHJ1Y3QgZHdh cmYyX2N1ICpjdSkKK3sKKyAgaWYgKGN1LT5oZWFkZXIudmVyc2lvbiA8IDUpCisgICAgZXJyb3Ig KF8oIi5kZWJ1Z19ybmdsaXN0cyBzZWN0aW9uIGNhbm5vdCBiZSB1c2VkIGluIERXQVJGICVkIiks CisJICAgY3UtPmhlYWRlci52ZXJzaW9uKTsKKyAgc3RydWN0IGR3YXJmMl9wZXJfb2JqZmlsZSAq ZHdhcmYyX3Blcl9vYmpmaWxlID0gY3UtPnBlcl9vYmpmaWxlOworCisgIGlmIChjdS0+ZHdvX3Vu aXQpCisgICAgeworICAgICAgc3RydWN0IGR3b19zZWN0aW9ucyAqc2VjdGlvbnMgPSAmY3UtPmR3 b191bml0LT5kd29fZmlsZS0+c2VjdGlvbnM7CisKKyAgICAgIGlmIChzZWN0aW9ucy0+cm5nbGlz dHMuc2l6ZSA+IDApCisJcmV0dXJuICZzZWN0aW9ucy0+cm5nbGlzdHM7CisgICAgfQorICByZXR1 cm4gJmR3YXJmMl9wZXJfb2JqZmlsZS0+cGVyX2JmZC0+cm5nbGlzdHM7Cit9CisKIC8qIEEgaGVs cGVyIGZ1bmN0aW9uIHRoYXQgZmlsbHMgaW4gYSBkd2FyZjJfbG9jbGlzdF9iYXRvbi4gICovCiAK IHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9kdzUtcm5nbGlz dC10ZXN0LmNjIGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY1MGUxMjc5Ci0tLSAvZGV2L251bGwK KysrIGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5jYwpAQCAtMCwwICsx LDcxIEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8dmVjdG9yPgorCitzdHJ1Y3Qg bm9kZSB7CisgIGludCBpZDsKKyAgbm9kZSAqbGVmdDsKKyAgbm9kZSAqcmlnaHQ7CisgIGJvb2wg dmlzaXRlZDsKK307CisKK25vZGUgIG5vZGVfYXJyYXlbNTBdOwordW5zaWduZWQgaW50IENVUl9J RFggPSAwOworCitub2RlICogbWFrZV9ub2RlIChpbnQgdmFsKQoreworICBub2RlICpuZXdfbm9k ZSA9ICYobm9kZV9hcnJheVtDVVJfSURYKytdKTsKKyAgbmV3X25vZGUtPmxlZnQgPSBOVUxMOwor ICBuZXdfbm9kZS0+cmlnaHQgPSBOVUxMOworICBuZXdfbm9kZS0+aWQgPSB2YWw7CisgIG5ld19u b2RlLT52aXNpdGVkID0gZmFsc2U7CisKKyAgcmV0dXJuIG5ld19ub2RlOworfQorCit2b2lkIHRy ZWVfaW5zZXJ0IChub2RlICpyb290LCBpbnQgdmFsKQoreworICBpZiAodmFsIDwgcm9vdC0+aWQp CisgICAgeworICAgICAgaWYgKHJvb3QtPmxlZnQpCisgICAgICAgIHRyZWVfaW5zZXJ0IChyb290 LT5sZWZ0LCB2YWwpOworICAgICAgZWxzZQorICAgICAgICByb290LT5sZWZ0ID0gbWFrZV9ub2Rl KHZhbCk7CisgICAgfQorICBlbHNlIGlmICh2YWwgPiByb290LT5pZCkKKyAgICB7CisgICAgICBp ZiAocm9vdC0+cmlnaHQpCisgICAgICAgIHRyZWVfaW5zZXJ0IChyb290LT5yaWdodCwgdmFsKTsK KyAgICAgIGVsc2UKKyAgICAgICAgcm9vdC0+cmlnaHQgPSBtYWtlX25vZGUodmFsKTsKKyAgICB9 Cit9CisKK3ZvaWQgaW5vcmRlcihub2RlICpyb290KSB7CisgIHN0ZDo6dmVjdG9yPG5vZGUgKj4g dG9kbzsKKyAgdG9kby5wdXNoX2JhY2socm9vdCk7CisgIHdoaWxlICghdG9kby5lbXB0eSgpKXsK KyAgICBub2RlICpjdXJyID0gdG9kby5iYWNrKCk7CisgICAgdG9kby5wb3BfYmFjaygpOyAvKiBi cmVhay1oZXJlICovCisgICAgaWYgKGN1cnItPnZpc2l0ZWQpIHsKKyAgICAgIHN0ZDo6Y291dCA8 PCBjdXJyLT5pZCA8PCAiICI7CisgICAgfSBlbHNlIHsKKyAgICAgIGN1cnItPnZpc2l0ZWQgPSB0 cnVlOworICAgICAgaWYgKGN1cnItPnJpZ2h0KSB7IHRvZG8ucHVzaF9iYWNrKGN1cnItPnJpZ2h0 KTsgfQorICAgICAgdG9kby5wdXNoX2JhY2soY3Vycik7CisgICAgICBpZiAoY3Vyci0+bGVmdCkg eyB0b2RvLnB1c2hfYmFjayhjdXJyLT5sZWZ0KTsgfQorICAgIH0KKyAgfQorfQorCitpbnQgbWFp biAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBub2RlICpyb290ID0gbWFrZV9ub2RlICgz NSk7CisKKyAgdHJlZV9pbnNlcnQgKHJvb3QsIDI4KTsKKyAgdHJlZV9pbnNlcnQgKHJvb3QsIDIw KTsKKyAgdHJlZV9pbnNlcnQgKHJvb3QsIDYwKTsKKworICBpbm9yZGVyIChyb290KTsKKworICBy ZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NS1ybmdsaXN0 LXRlc3QuZXhwIGIvdGVzdHN1aXRlL2dkYi5kd2FyZjIvZHc1LXJuZ2xpc3QtdGVzdC5leHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjNmMzYmZlMwotLS0gL2Rldi9udWxs CisrKyBiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYyL2R3NS1ybmdsaXN0LXRlc3QuZXhwCkBAIC0wLDAg KzEsNDAgQEAKKyMgQ29weXJpZ2h0IDIwMTEtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBDaGVjayB0aGF0IEdEQiBjYW4gZmluZCB0 aGUgdmFyaWFibGVzIGluIGEgbGV4aWNhbCBibG9jayB3aXRoIGEKKyMgRFdfRk9STV9ybmdsaXN0 eCBEV19BVF9yYW5nZXMgZmllbGQuICBUaGlzIHRlc3QgaXMgaW50ZW5kZWQgZm9yIERXQVJGLTUs CisjIGNvbXBpbGVkIHdpdGggY2xhbmcrKy4KKworc3RhbmRhcmRfdGVzdGZpbGUgLmNjCisKKyMg VGhpcyB0ZXN0IGlzIGludGVuZGVkIGZvciB0YXJnZXRzIHdoaWNoIHN1cHBvcnQgRFdBUkYtNS4K KyMgU2luY2Ugd2UgcGFzcyBhbiBleHBsaWNpdCAtZ2R3YXJmLTUgdG8gdGhlIGNvbXBpbGVyLAor IyB3ZSBsZXQgdGhhdCBiZSB0aGUgdGVzdCBvZiB3aGV0aGVyIHRoZSB0YXJnZXQgc3VwcG9ydHMg aXQuCisKK2lmIHsgW3ByZXBhcmVfZm9yX3Rlc3RpbmcgImZhaWxlZCB0byBwcmVwYXJlIiAiJHt0 ZXN0ZmlsZX0iIFwKKyAgICAgICAgICAkc3JjZmlsZSB7ZGVidWcgYysrIGFkZGl0aW9uYWxfZmxh Z3M9LWdkd2FyZi01IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZmxhZ3M9 LU8wfV0gfSB7CisgICAgcmV0dXJuIC0xCit9CisKK2lmICFbcnVudG9fbWFpbl0geworICAgIHJl dHVybiAtMQorfQorCitnZGJfYnJlYWtwb2ludCBbZ2RiX2dldF9saW5lX251bWJlciAiYnJlYWst aGVyZSJdCitnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiYnJlYWstaGVyZSIgIi4qIGJyZWFr LWhlcmUgLioiCisKK2dkYl90ZXN0ICJwcmludCBjdXJyIiAiXFxcKG5vZGUgXFxcKlxcXCkgJGhl eCA8bm9kZV9hcnJheT4iCitnZGJfdGVzdCAicHJpbnQgKmN1cnIiICI9IHtpZCA9IDM1LCBsZWZ0 ID0gJGhleCA8bm9kZV9hcnJheVxcKyRkZWNpbWFsPiwgcmlnaHQgPSAkaGV4IDxub2RlX2FycmF5 XFwrJGRlY2ltYWw+LCB2aXNpdGVkID0gZmFsc2V9Igo= --000000000000ed2ecb05a7af2351--