From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12397 invoked by alias); 6 Aug 2008 21:36:51 -0000 Received: (qmail 12387 invoked by uid 22791); 6 Aug 2008 21:36:49 -0000 X-Spam-Check-By: sourceware.org Received: from nf-out-0910.google.com (HELO nf-out-0910.google.com) (64.233.182.188) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 06 Aug 2008 21:36:04 +0000 Received: by nf-out-0910.google.com with SMTP id h3so63171nfh.48 for ; Wed, 06 Aug 2008 14:36:01 -0700 (PDT) Received: by 10.210.16.20 with SMTP id 20mr3102268ebp.134.1218058561250; Wed, 06 Aug 2008 14:36:01 -0700 (PDT) Received: by 10.210.66.15 with HTTP; Wed, 6 Aug 2008 14:36:01 -0700 (PDT) Message-ID: <6dc9ffc80808061436y7ba7c35fl4844b5d9bce52a1@mail.gmail.com> Date: Wed, 06 Aug 2008 21:36:00 -0000 From: "H.J. Lu" To: "Mark Kettenis" Subject: Re: PATCH: Update x86 stack align analyzer Cc: GDB , xuepeng.guo@intel.com, joey.ye@intel.com In-Reply-To: <200808062105.m76L51xN016378@brahms.sibelius.xs4all.nl> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_9712_7464520.1218058561226" References: <20080730211152.GA9645@lucon.org> <200808062105.m76L51xN016378@brahms.sibelius.xs4all.nl> 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: 2008-08/txt/msg00142.txt.bz2 ------=_Part_9712_7464520.1218058561226 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2832 On Wed, Aug 6, 2008 at 2:05 PM, Mark Kettenis wrote: >> >> introduced new ways to align stack. This patch teaches gdb how to >> recognize the new stack prologue. OK for trunk? > > A few comments inline below. Thanks for you review. > >> --- ../gdb/src/gdb/amd64-tdep.c 2008-07-16 22:30:04.000000000 -0700 >> +++ gdb/gdb/amd64-tdep.c 2008-07-25 11:57:37.000000000 -0700 >> @@ -680,6 +680,7 @@ struct amd64_frame_cache >> /* Saved registers. */ >> CORE_ADDR saved_regs[AMD64_NUM_SAVED_REGS]; >> CORE_ADDR saved_sp; >> + enum i386_regnum saved_sp_reg; > > I suppose you meant 'enum amd64_regnum' here. I'd prefer if you'd > simply use 'int' as the type for registers instead of the enum. > That's what all the other code in GDB does. > Done. >> +/* GCC 4.4 and later, can put code in the prologue to realign the >> + stack pointer. Check whether PC points to such code, and update >> + CACHE accordingly. Return the first instruction after the code >> + sequence or CURRENT_PC, whichever is smaller. If we don't >> + recognize the code, return PC. */ > > There are older versions of GCC that use at least method #2, so this > comment is a bit misleading. Gcc 4.1 can align stack to 16byte, but only for ia32, not for x86-64. We added this capability to gcc 4.4. > >> +static CORE_ADDR >> +amd64_analyze_stack_align (CORE_ADDR pc, CORE_ADDR current_pc, >> + struct amd64_frame_cache *cache) >> +{ >> + /* There are 3 code sequences to re-align stack: >> + >> + 1. Use %ebp: >> + >> + pushq %rbp >> + movq %rsp, %rbp >> + andq $-XXX, %rsp > > But this is basically the standard prologue sequence. I don't see why > you need to handle this sequence here, since it is already handled in > amd64_analyze_prologue(). We need it to set saved_sp_reg. > >> - get_frame_register (this_frame, AMD64_RSP_REGNUM, buf); >> - cache->base = extract_unsigned_integer (buf, 8) + cache->sp_offset; >> + if (cache->saved_sp_reg != AMD64_RSP_REGNUM) >> + { >> + /* We're halfway aligning the stack. Saved stack pointer >> + has been saved in saved_sp_reg. */ >> + get_frame_register (this_frame, cache->saved_sp_reg, buf); >> + cache->saved_sp = extract_unsigned_integer(buf, 8); >> + cache->base = ((cache->saved_sp - 8) & 0xfffffffffffffff0LL) - 8; >> + cache->saved_regs[AMD64_RIP_REGNUM] = cache->saved_sp - 8; > > I don't see how this could possibly work if saved_regs[AMD64_RIP_REGNUM] > is set to 8 unconditionally a few lines further on. I changed it not to set %rip to 8 when halfway aligning the stack. That is similar to i386 code. > > See my comment about amd64. > I changed to int. I am enclosed my updated patch. Thanks. -- H.J. ------=_Part_9712_7464520.1218058561226 Content-Type: text/plain; name=gdb-stack-3.patch.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fjkgg2ay0 Content-Disposition: attachment; filename=gdb-stack-3.patch.txt Content-length: 21631 MjAwOC0wOC0wNiAgWHVlcGVuZyBHdW8gIDx4dWVwZW5nLmd1b0BpbnRlbC5j b20+CgkgICAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgoKCSog YW1kNjQtdGRlcC5jIChhbWQ2NF9mcmFtZV9jYWNoZSk6IEFkZCBzYXZlZF9z cF9yZWcuCgkoYW1kNjRfaW5pdF9mcmFtZV9jYWNoZSk6IEluaXRpYWxpemUg c2F2ZWRfc3BfcmVnLgoJKGFtZDY0X2FuYWx5emVfc3RhY2tfYWxpZ24pOiBO ZXcuCgkoYW1kNjRfYW5hbHl6ZV9wcm9sb2d1ZSk6IENhbGwgaXQuCgkoYW1k NjRfZnJhbWVfY2FjaGUpOiBUcnkgdG8gdXNlIHNhdmVkX3NwX3JlZyBpZiBm cmFtZSBpcyBpbnZhbGlkLgoJRG9uJ3Qgc2V0ICVyaXAgdG8gOCB3aGVuIGhh bGZ3YXkgYWxpZ25pbmcgdGhlIHN0YWNrLgoKCSogYW1kNjQtdGRlcC5oIChh bWQ2NF9yZWdudW0pOiBBZGQgQU1ENjRfUjlfUkVHTlVNIHRvCglBTUQ2NF9S MTRfUkVHTlVNLgoKCSogaTM4Ni10ZGVwLmMgKGkzODZfZnJhbWVfY2FjaGUp OiBSZW1vdmUgc3RhY2tfYWxpZ24uICBBZGQKCXNhdmVkX3NwX3JlZy4KCShp Mzg2X2FsbG9jX2ZyYW1lX2NhY2hlKTogUmVtb3ZlIHN0YWNrX2FsaWduLiAg SW5pdGlhbGl6ZQoJc2F2ZWRfc3BfcmVnIHRvIEkzODZfRVNQX1JFR05VTS4K CShpMzg2X2FuYWx5emVfc3RhY2tfYWxpZ24pOiBSZXdyaXRlLgoJKGkzODZf ZnJhbWVfY2FjaGUpOiBVc2Ugc2F2ZWRfc3BfcmVnIG9ubHkgaWYgZnJhbWUg aXMgaW52YWxpZC4KCmRpZmYgLXggLnN2biAtdXByIC4uL2dkYi9zcmMvZ2Ri IGdkYi9nZGIKZGlmZiAteCAuc3ZuIC11cHIgLi4vZ2RiL3NyYy9nZGIvYW1k NjQtdGRlcC5jIGdkYi9nZGIvYW1kNjQtdGRlcC5jCi0tLSAuLi9nZGIvc3Jj L2dkYi9hbWQ2NC10ZGVwLmMJMjAwOC0wNy0xNiAyMjozMDowNC4wMDAwMDAw MDAgLTA3MDAKKysrIGdkYi9nZGIvYW1kNjQtdGRlcC5jCTIwMDgtMDgtMDYg MTQ6MjU6NDkuMDAwMDAwMDAwIC0wNzAwCkBAIC02ODAsNiArNjgwLDcgQEAg c3RydWN0IGFtZDY0X2ZyYW1lX2NhY2hlCiAgIC8qIFNhdmVkIHJlZ2lzdGVy cy4gICovCiAgIENPUkVfQUREUiBzYXZlZF9yZWdzW0FNRDY0X05VTV9TQVZF RF9SRUdTXTsKICAgQ09SRV9BRERSIHNhdmVkX3NwOworICBpbnQgc2F2ZWRf c3BfcmVnOwogCiAgIC8qIERvIHdlIGhhdmUgYSBmcmFtZT8gICovCiAgIGlu dCBmcmFtZWxlc3NfcDsKQEAgLTcwMiw2ICs3MDMsNyBAQCBhbWQ2NF9pbml0 X2ZyYW1lX2NhY2hlIChzdHJ1Y3QgYW1kNjRfZnJhCiAgIGZvciAoaSA9IDA7 IGkgPCBBTUQ2NF9OVU1fU0FWRURfUkVHUzsgaSsrKQogICAgIGNhY2hlLT5z YXZlZF9yZWdzW2ldID0gLTE7CiAgIGNhY2hlLT5zYXZlZF9zcCA9IDA7Cisg IGNhY2hlLT5zYXZlZF9zcF9yZWcgPSBBTUQ2NF9SU1BfUkVHTlVNOwogCiAg IC8qIEZyYW1lbGVzcyB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlLiAgKi8KICAg Y2FjaGUtPmZyYW1lbGVzc19wID0gMTsKQEAgLTcxOSw2ICs3MjEsMjA0IEBA IGFtZDY0X2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQogICByZXR1cm4gY2Fj aGU7CiB9CiAKKy8qIEdDQyA0LjQgYW5kIGxhdGVyLCBjYW4gcHV0IGNvZGUg aW4gdGhlIHByb2xvZ3VlIHRvIHJlYWxpZ24gdGhlCisgICBzdGFjayBwb2lu dGVyLiAgQ2hlY2sgd2hldGhlciBQQyBwb2ludHMgdG8gc3VjaCBjb2RlLCBh bmQgdXBkYXRlCisgICBDQUNIRSBhY2NvcmRpbmdseS4gIFJldHVybiB0aGUg Zmlyc3QgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIGNvZGUKKyAgIHNlcXVlbmNl IG9yIENVUlJFTlRfUEMsIHdoaWNoZXZlciBpcyBzbWFsbGVyLiAgSWYgd2Ug ZG9uJ3QKKyAgIHJlY29nbml6ZSB0aGUgY29kZSwgcmV0dXJuIFBDLiAgKi8K Kworc3RhdGljIENPUkVfQUREUgorYW1kNjRfYW5hbHl6ZV9zdGFja19hbGln biAoQ09SRV9BRERSIHBjLCBDT1JFX0FERFIgY3VycmVudF9wYywKKwkJCSAg IHN0cnVjdCBhbWQ2NF9mcmFtZV9jYWNoZSAqY2FjaGUpCit7CisgIC8qIFRo ZXJlIGFyZSAzIGNvZGUgc2VxdWVuY2VzIHRvIHJlLWFsaWduIHN0YWNrOgor CisgICAgIAkxLiBVc2UgJXJicDoKKworCQlwdXNocSAlcmJwCisJCW1vdnEg ICVyc3AsICVyYnAKKwkJYW5kcSAgJC1YWFgsICVyc3AKKworCTIuIFVzZSBh IGNhbGxlci1zYXZlZCBzYXZlZCByZWdpc3RlcjoKKworCQlsZWFxICA4KCVy c3ApLCAlcmVnCisJCWFuZHEgICQtWFhYLCAlcnNwCisJCXB1c2hxIC04KCVy ZWcpCisKKwkzLiBVc2UgYSBjYWxsZWUtc2F2ZWQgc2F2ZWQgcmVnaXN0ZXI6 CisKKwkJcHVzaHEgJXJlZworCQlsZWFxICAxNiglcnNwKSwgJXJlZworCQlh bmRxICAkLVhYWCwgJXJzcAorCQlwdXNocSAtOCglcmVnKQorCisgICAgICJh bmRxICQtWFhYLCAlcnNwIiBjYW4gYmUgZWl0aGVyIDQgYnl0ZXMgb3IgNyBi eXRlczoKKyAgICAgCisgICAgIAkweDQ4IDB4ODMgMHhlNCAweGYwCQkJYW5k cSAkLTE2LCAlcnNwCisgICAgIAkweDQ4IDB4ODEgMHhlNCAweDAwIDB4ZmYg MHhmZiAweGZmCWFuZHEgJC0yNTYsICVyc3AKKyAgICovCisKKyAgZ2RiX2J5 dGUgYnVmWzE4XTsKKyAgaW50IHJlZywgcjsKKyAgaW50IG9mZnNldCwgb2Zm c2V0X2FuZDsKKyAgc3RhdGljIGludCByZWdudW1zWzE2XSA9IHsKKyAgICBB TUQ2NF9SQVhfUkVHTlVNLAkJLyogJXJheCAqLworICAgIEFNRDY0X1JDWF9S RUdOVU0sCQkvKiAlcmN4ICovCisgICAgQU1ENjRfUkRYX1JFR05VTSwJCS8q ICVyZHggKi8KKyAgICBBTUQ2NF9SQlhfUkVHTlVNLAkJLyogJXJieCAqLwor ICAgIEFNRDY0X1JTUF9SRUdOVU0sCQkvKiAlcnNwICovCisgICAgQU1ENjRf UkJQX1JFR05VTSwJCS8qICVyYnAgKi8KKyAgICBBTUQ2NF9SU0lfUkVHTlVN LAkJLyogJXJzaSAqLworICAgIEFNRDY0X1JESV9SRUdOVU0sCQkvKiAlcmRp ICovCisgICAgQU1ENjRfUjhfUkVHTlVNLAkJLyogJXI4ICovCisgICAgQU1E NjRfUjlfUkVHTlVNLAkJLyogJXI5ICovCisgICAgQU1ENjRfUjEwX1JFR05V TSwJCS8qICVyMTAgKi8KKyAgICBBTUQ2NF9SMTFfUkVHTlVNLAkJLyogJXIx MSAqLworICAgIEFNRDY0X1IxMl9SRUdOVU0sCQkvKiAlcjEyICovCisgICAg QU1ENjRfUjEzX1JFR05VTSwJCS8qICVyMTMgKi8KKyAgICBBTUQ2NF9SMTRf UkVHTlVNLAkJLyogJXIxNCAqLworICAgIEFNRDY0X1IxNV9SRUdOVU0sCQkv KiAlcjE1ICovCisgIH07CisKKyAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAo cGMsIGJ1Ziwgc2l6ZW9mIGJ1ZikpCisgICAgcmV0dXJuIHBjOworCisgIC8q IEZpcnN0IGNoZWNrICJwdXNocSAlcmJwIi4gICovCisgIGlmIChidWZbMF0g PT0gMHg1NSkKKyAgICB7CisgICAgICAvKiBUaGUgbmV4dCBpbnN0cnVjdGlv biBoYXMgdG8gYmUgIm1vdnEgJXJzcCwgJXJicCIuICAqLworICAgICAgaWYg KGJ1ZlsxXSAhPSAweDQ4IHx8IGJ1ZlsyXSAhPSAweDg5IHx8IGJ1ZlszXSAh PSAweGU1KQorCXJldHVybiBwYzsKKworICAgICAgLyogVGhlIG5leHQgaW5z dHJ1Y3Rpb24gaGFzIHRvIGJlICJhbmRxICQtWFhYLCAlcnNwIi4gICovCisg ICAgICBpZiAoYnVmWzRdICE9IDB4NDgKKwkgIHx8IGJ1Zls2XSAhPSAweGU0 CisJICB8fCAoYnVmWzVdICE9IDB4ODEgJiYgYnVmWzVdICE9IDB4ODMpKQor CXJldHVybiBwYzsKKworICAgICAgaWYgKGN1cnJlbnRfcGMgPiBwYyArIDQp CisJY2FjaGUtPnNhdmVkX3NwX3JlZyA9IEFNRDY0X1JCUF9SRUdOVU07CisK KyAgICAgIC8qIEtlZXAgdGhlIHByb2xvZ3VlIGZvciBhbWQ2NF9hbmFseXpl X3Byb2xvZ3VlLiAgKi8KKyAgICAgIHJldHVybiBwYzsKKyAgICB9CisKKyAg LyogQ2hlY2sgY2FsbGVyLXNhdmVkIHNhdmVkIHJlZ2lzdGVyLiAgVGhlIGZp cnN0IGluc3RydWN0aW9uIGhhcworICAgICB0byBiZSAibGVhcSA4KCVyc3Ap LCAlcmVnIi4gICovCisgIGlmICgoYnVmWzBdICYgMHhmYikgPT0gMHg0OAor ICAgICAgJiYgYnVmWzFdID09IDB4OGQKKyAgICAgICYmIGJ1ZlszXSA9PSAw eDI0CisgICAgICAmJiBidWZbNF0gPT0gMHg4KQorICAgIHsKKyAgICAgIC8q IE1PRCBtdXN0IGJlIGJpbmFyeSAxMCBhbmQgUi9NIG11c3QgYmUgYmluYXJ5 IDEwMC4gICovCisgICAgICBpZiAoKGJ1ZlsyXSAmIDB4YzcpICE9IDB4NDQp CisJcmV0dXJuIHBjOworCisgICAgICAvKiBSRUcgaGFzIHJlZ2lzdGVyIG51 bWJlci4gICovCisgICAgICByZWcgPSAoYnVmWzJdID4+IDMpICYgNzsKKwor ICAgICAgLyogQ2hlY2sgdGhlIFJFWC5SIGJpdC4gICovCisgICAgICBpZiAo YnVmWzBdID09IDB4NGMpCisJcmVnICs9IDg7CisKKyAgICAgIG9mZnNldCA9 IDU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogQ2hlY2sgY2Fs bGVlLXNhdmVkIHNhdmVkIHJlZ2lzdGVyLiAgVGhlIGZpcnN0IGluc3RydWN0 aW9uCisJIGhhcyB0byBiZSAicHVzaHEgJXJlZyIuICAqLworICAgICAgcmVn ID0gMDsKKyAgICAgIGlmICgoYnVmWzBdICYgMHhmOCkgPT0gMHg1MCkKKwlv ZmZzZXQgPSAwOworICAgICAgZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjYpID09 IDB4NDAKKwkgICAgICAgJiYgKGJ1ZlsxXSAmIDB4ZjgpID09IDB4NTApCisJ eworCSAgLyogQ2hlY2sgdGhlIFJFWC5CIGJpdC4gICovCisJICBpZiAoKGJ1 ZlswXSAmIDEpICE9IDApCisJICAgIHJlZyA9IDg7CisKKwkgIG9mZnNldCA9 IDE7CisJfQorICAgICAgZWxzZQorCXJldHVybiBwYzsKKworICAgICAgLyog R2V0IHJlZ2lzdGVyLiAgKi8KKyAgICAgIHJlZyArPSBidWZbb2Zmc2V0XSAm IDB4NzsKKworICAgICAgb2Zmc2V0Kys7CisKKyAgICAgIC8qIFRoZSBuZXh0 IGluc3RydWN0aW9uIGhhcyB0byBiZSAibGVhcSAxNiglcnNwKSwgJXJlZyIu ICAqLworICAgICAgaWYgKChidWZbb2Zmc2V0XSAmIDB4ZmIpICE9IDB4NDgK KwkgIHx8IGJ1ZltvZmZzZXQgKyAxXSAhPSAweDhkCisJICB8fCBidWZbb2Zm c2V0ICsgM10gIT0gMHgyNAorCSAgfHwgYnVmW29mZnNldCArIDRdICE9IDB4 MTApCisJcmV0dXJuIHBjOworCisgICAgICAvKiBNT0QgbXVzdCBiZSBiaW5h cnkgMTAgYW5kIFIvTSBtdXN0IGJlIGJpbmFyeSAxMDAuICAqLworICAgICAg aWYgKChidWZbb2Zmc2V0ICsgMl0gJiAweGM3KSAhPSAweDQ0KQorCXJldHVy biBwYzsKKyAgICAgIAorICAgICAgLyogUkVHIGhhcyByZWdpc3RlciBudW1i ZXIuICAqLworICAgICAgciA9IChidWZbb2Zmc2V0ICsgMl0gPj4gMykgJiA3 OworCisgICAgICAvKiBDaGVjayB0aGUgUkVYLlIgYml0LiAgKi8KKyAgICAg IGlmIChidWZbb2Zmc2V0XSA9PSAweDRjKQorCXIgKz0gODsKKworICAgICAg LyogUmVnaXN0ZXJzIGluIHB1c2hxIGFuZCBsZWFxIGhhdmUgdG8gYmUgdGhl IHNhbWUuICAqLworICAgICAgaWYgKHJlZyAhPSByKQorCXJldHVybiBwYzsK KworICAgICAgb2Zmc2V0ICs9IDU7CisgICAgfQorCisgIC8qIFJpZ2lzdGVy IGNhbid0IGJlICVyc3Agbm9yICVyYnAuICAqLworICBpZiAocmVnID09IDQg fHwgcmVnID09IDUpCisgICAgcmV0dXJuIHBjOworCisgIC8qIFRoZSBuZXh0 IGluc3RydWN0aW9uIGhhcyB0byBiZSAiYW5kcSAkLVhYWCwgJXJzcCIuICAq LworICBpZiAoYnVmW29mZnNldF0gIT0gMHg0OAorICAgICAgfHwgYnVmW29m ZnNldCArIDJdICE9IDB4ZTQKKyAgICAgIHx8IChidWZbb2Zmc2V0ICsgMV0g IT0gMHg4MSAmJiBidWZbb2Zmc2V0ICsgMV0gIT0gMHg4MykpCisgICAgcmV0 dXJuIHBjOworCisgIG9mZnNldF9hbmQgPSBvZmZzZXQ7CisgIG9mZnNldCAr PSBidWZbb2Zmc2V0ICsgMV0gPT0gMHg4MSA/IDcgOiA0OworCisgIC8qIFRo ZSBuZXh0IGluc3RydWN0aW9uIGhhcyB0byBiZSAicHVzaHEgLTgoJXJlZyki LiAgKi8KKyAgciA9IDA7CisgIGlmIChidWZbb2Zmc2V0XSA9PSAweGZmKQor ICAgIG9mZnNldCsrOworICBlbHNlIGlmICgoYnVmW29mZnNldF0gJiAweGY2 KSA9PSAweDQwCisJICAgJiYgYnVmW29mZnNldCArIDFdID09IDB4ZmYpCisg ICAgeworICAgICAgLyogQ2hlY2sgdGhlIFJFWC5CIGJpdC4gICovCisgICAg ICBpZiAoKGJ1ZltvZmZzZXRdICYgMHgxKSAhPSAwKQorCXIgPSA4OworICAg ICAgb2Zmc2V0ICs9IDI7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIHBj OworCisgIC8qIDhiaXQgLTggaXMgMHhmOC4gIFJFRyBtdXN0IGJlIGJpbmFy eSAxMTAgYW5kIE1PRCBtdXN0IGJlIGJpbmFyeQorICAgICAwMS4gICovCisg IGlmIChidWZbb2Zmc2V0ICsgMV0gIT0gMHhmOAorICAgICAgfHwgKGJ1Zltv ZmZzZXRdICYgMHhmOCkgIT0gMHg3MCkKKyAgICByZXR1cm4gcGM7CisKKyAg LyogUi9NIGhhcyByZWdpc3Rlci4gICovCisgIHIgKz0gYnVmW29mZnNldF0g JiA3OworCisgIC8qIFJlZ2lzdGVycyBpbiBsZWFxIGFuZCBwdXNocSBoYXZl IHRvIGJlIHRoZSBzYW1lLiAgKi8KKyAgaWYgKHJlZyAhPSByKQorICAgIHJl dHVybiBwYzsKKworICBpZiAoY3VycmVudF9wYyA+IHBjICsgb2Zmc2V0X2Fu ZCkKKyAgICBjYWNoZS0+c2F2ZWRfc3BfcmVnID0gcmVnbnVtc1tyZWddOwor CisgIHJldHVybiBtaW4gKHBjICsgb2Zmc2V0ICsgMiwgY3VycmVudF9wYyk7 Cit9CisKIC8qIERvIGEgbGltaXRlZCBhbmFseXNpcyBvZiB0aGUgcHJvbG9n dWUgYXQgUEMgYW5kIHVwZGF0ZSBDQUNIRQogICAgYWNjb3JkaW5nbHkuICBC YWlsIG91dCBlYXJseSBpZiBDVVJSRU5UX1BDIGlzIHJlYWNoZWQuICBSZXR1 cm4gdGhlCiAgICBhZGRyZXNzIHdoZXJlIHRoZSBhbmFseXNpcyBzdG9wcGVk LgpAQCAtNzQyLDYgKzk0Miw4IEBAIGFtZDY0X2FuYWx5emVfcHJvbG9ndWUg KENPUkVfQUREUiBwYywgQ08KICAgaWYgKGN1cnJlbnRfcGMgPD0gcGMpCiAg ICAgcmV0dXJuIGN1cnJlbnRfcGM7CiAKKyAgcGMgPSBhbWQ2NF9hbmFseXpl X3N0YWNrX2FsaWduIChwYywgY3VycmVudF9wYywgY2FjaGUpOworCiAgIG9w ID0gcmVhZF9tZW1vcnlfdW5zaWduZWRfaW50ZWdlciAocGMsIDEpOwogCiAg IGlmIChvcCA9PSAweDU1KQkJLyogcHVzaHEgJXJicCAqLwpAQCAtODEzLDgg KzEwMTUsMjMgQEAgYW1kNjRfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9p bmZvICp0aAogCSBhdCB0aGUgc3RhY2sgcG9pbnRlci4gIEZvciB0cnVseSAi ZnJhbWVsZXNzIiBmdW5jdGlvbnMgdGhpcwogCSBtaWdodCB3b3JrIHRvby4g ICovCiAKLSAgICAgIGdldF9mcmFtZV9yZWdpc3RlciAodGhpc19mcmFtZSwg QU1ENjRfUlNQX1JFR05VTSwgYnVmKTsKLSAgICAgIGNhY2hlLT5iYXNlID0g ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyIChidWYsIDgpICsgY2FjaGUtPnNw X29mZnNldDsKKyAgICAgIGlmIChjYWNoZS0+c2F2ZWRfc3BfcmVnICE9IEFN RDY0X1JTUF9SRUdOVU0pCisJeworCSAgLyogV2UncmUgaGFsZndheSBhbGln bmluZyB0aGUgc3RhY2suICBTYXZlZCBzdGFjayBwb2ludGVyCisJICAgICBo YXMgYmVlbiBzYXZlZCBpbiBzYXZlZF9zcF9yZWcuICAqLworCSAgZ2V0X2Zy YW1lX3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCBjYWNoZS0+c2F2ZWRfc3BfcmVn LCBidWYpOworCSAgY2FjaGUtPnNhdmVkX3NwID0gZXh0cmFjdF91bnNpZ25l ZF9pbnRlZ2VyKGJ1ZiwgOCk7CisJICBjYWNoZS0+YmFzZSA9ICgoY2FjaGUt PnNhdmVkX3NwIC0gOCkgJiAweGZmZmZmZmZmZmZmZmZmZjBMTCkgLSA4Owor CSAgY2FjaGUtPnNhdmVkX3JlZ3NbQU1ENjRfUklQX1JFR05VTV0gPSBjYWNo ZS0+c2F2ZWRfc3AgLSA4OworCisJICAvKiBUaGlzIHdpbGwgYmUgYWRkZWQg YmFjayBiZWxvdy4gICovCisJICBjYWNoZS0+c2F2ZWRfcmVnc1tBTUQ2NF9S SVBfUkVHTlVNXSAtPSBjYWNoZS0+YmFzZTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgZ2V0X2ZyYW1lX3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCBBTUQ2NF9S U1BfUkVHTlVNLCBidWYpOworCSAgY2FjaGUtPmJhc2UgPSBleHRyYWN0X3Vu c2lnbmVkX2ludGVnZXIgKGJ1ZiwgOCkgKyBjYWNoZS0+c3Bfb2Zmc2V0Owor CX0KICAgICB9CiAgIGVsc2UKICAgICB7CkBAIC04MjgsOCArMTA0NSwxMSBA QCBhbWQ2NF9mcmFtZV9jYWNoZSAoc3RydWN0IGZyYW1lX2luZm8gKnRoCiAK ICAgLyogRm9yIG5vcm1hbCBmcmFtZXMsICVyaXAgaXMgc3RvcmVkIGF0IDgo JXJicCkuICBJZiB3ZSBkb24ndCBoYXZlIGEKICAgICAgZnJhbWUgd2UgZmlu ZCBpdCBhdCB0aGUgc2FtZSBvZmZzZXQgZnJvbSB0aGUgcmVjb25zdHJ1Y3Rl ZCBiYXNlCi0gICAgIGFkZHJlc3MuICAqLwotICBjYWNoZS0+c2F2ZWRfcmVn c1tBTUQ2NF9SSVBfUkVHTlVNXSA9IDg7CisgICAgIGFkZHJlc3MuICBJZiB3 ZSdyZSBoYWxmd2F5IGFsaWduaW5nIHRoZSBzdGFjaywgJXJpcCBpcyBoYW5k bGVkCisgICAgIGRpZmZlcmVudGx5IChzZWUgYWJvdmUpLiAgKi8KKyAgaWYg KCFjYWNoZS0+ZnJhbWVsZXNzX3AKKyAgICAgIHx8IGNhY2hlLT5zYXZlZF9z cF9yZWcgPT0gQU1ENjRfUlNQX1JFR05VTSkKKyAgICBjYWNoZS0+c2F2ZWRf cmVnc1tBTUQ2NF9SSVBfUkVHTlVNXSA9IDg7CiAKICAgLyogQWRqdXN0IGFs bCB0aGUgc2F2ZWQgcmVnaXN0ZXJzIHN1Y2ggdGhhdCB0aGV5IGNvbnRhaW4g YWRkcmVzc2VzCiAgICAgIGluc3RlYWQgb2Ygb2Zmc2V0cy4gICovCmRpZmYg LXggLnN2biAtdXByIC4uL2dkYi9zcmMvZ2RiL2FtZDY0LXRkZXAuaCBnZGIv Z2RiL2FtZDY0LXRkZXAuaAotLS0gLi4vZ2RiL3NyYy9nZGIvYW1kNjQtdGRl cC5oCTIwMDgtMDEtMTcgMDk6Mzg6NDEuMDAwMDAwMDAwIC0wODAwCisrKyBn ZGIvZ2RiL2FtZDY0LXRkZXAuaAkyMDA4LTA3LTE4IDE1OjQxOjMyLjAwMDAw MDAwMCAtMDcwMApAQCAtMzksOCArMzksMTQgQEAgZW51bSBhbWQ2NF9yZWdu dW0KICAgQU1ENjRfUkRJX1JFR05VTSwJCS8qICVyZGkgKi8KICAgQU1ENjRf UkJQX1JFR05VTSwJCS8qICVyYnAgKi8KICAgQU1ENjRfUlNQX1JFR05VTSwJ CS8qICVyc3AgKi8KLSAgQU1ENjRfUjhfUkVHTlVNID0gOCwJCS8qICVyOCAq LwotICBBTUQ2NF9SMTVfUkVHTlVNID0gMTUsCS8qICVyMTUgKi8KKyAgQU1E NjRfUjhfUkVHTlVNLAkJLyogJXI4ICovCisgIEFNRDY0X1I5X1JFR05VTSwJ CS8qICVyOSAqLworICBBTUQ2NF9SMTBfUkVHTlVNLAkJLyogJXIxMCAqLwor ICBBTUQ2NF9SMTFfUkVHTlVNLAkJLyogJXIxMSAqLworICBBTUQ2NF9SMTJf UkVHTlVNLAkJLyogJXIxMiAqLworICBBTUQ2NF9SMTNfUkVHTlVNLAkJLyog JXIxMyAqLworICBBTUQ2NF9SMTRfUkVHTlVNLAkJLyogJXIxNCAqLworICBB TUQ2NF9SMTVfUkVHTlVNLAkJLyogJXIxNSAqLwogICBBTUQ2NF9SSVBfUkVH TlVNLAkJLyogJXJpcCAqLwogICBBTUQ2NF9FRkxBR1NfUkVHTlVNLAkJLyog JWVmbGFncyAqLwogICBBTUQ2NF9DU19SRUdOVU0sCQkvKiAlY3MgKi8KT25s eSBpbiBnZGIvZ2RiOiBDaGFuZ2VMb2cuc3RhY2sKZGlmZiAteCAuc3ZuIC11 cHIgLi4vZ2RiL3NyYy9nZGIvaTM4Ni10ZGVwLmMgZ2RiL2dkYi9pMzg2LXRk ZXAuYwotLS0gLi4vZ2RiL3NyYy9nZGIvaTM4Ni10ZGVwLmMJMjAwOC0wNy0x NiAyMjozMDoxNy4wMDAwMDAwMDAgLTA3MDAKKysrIGdkYi9nZGIvaTM4Ni10 ZGVwLmMJMjAwOC0wOC0wNiAxNDoyNDoyMy4wMDAwMDAwMDAgLTA3MDAKQEAg LTUxOCw3ICs1MTgsNyBAQCBzdHJ1Y3QgaTM4Nl9mcmFtZV9jYWNoZQogICAv KiBTYXZlZCByZWdpc3RlcnMuICAqLwogICBDT1JFX0FERFIgc2F2ZWRfcmVn c1tJMzg2X05VTV9TQVZFRF9SRUdTXTsKICAgQ09SRV9BRERSIHNhdmVkX3Nw OwotICBpbnQgc3RhY2tfYWxpZ247CisgIGludCBzYXZlZF9zcF9yZWc7CiAg IGludCBwY19pbl9lYXg7CiAKICAgLyogU3RhY2sgc3BhY2UgcmVzZXJ2ZWQg Zm9yIGxvY2FsIHZhcmlhYmxlcy4gICovCkBAIC01NDUsNyArNTQ1LDcgQEAg aTM4Nl9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKICAgZm9yIChpID0gMDsg aSA8IEkzODZfTlVNX1NBVkVEX1JFR1M7IGkrKykKICAgICBjYWNoZS0+c2F2 ZWRfcmVnc1tpXSA9IC0xOwogICBjYWNoZS0+c2F2ZWRfc3AgPSAwOwotICBj YWNoZS0+c3RhY2tfYWxpZ24gPSAwOworICBjYWNoZS0+c2F2ZWRfc3BfcmVn ID0gSTM4Nl9FU1BfUkVHTlVNOwogICBjYWNoZS0+cGNfaW5fZWF4ID0gMDsK IAogICAvKiBGcmFtZWxlc3MgdW50aWwgcHJvdmVuIG90aGVyd2lzZS4gICov CkBAIC03MDcsMzcgKzcwNywxMzQgQEAgc3RhdGljIENPUkVfQUREUgogaTM4 Nl9hbmFseXplX3N0YWNrX2FsaWduIChDT1JFX0FERFIgcGMsIENPUkVfQURE UiBjdXJyZW50X3BjLAogCQkJICBzdHJ1Y3QgaTM4Nl9mcmFtZV9jYWNoZSAq Y2FjaGUpCiB7Ci0gIC8qIFRoZSByZWdpc3RlciB1c2VkIGJ5IHRoZSBjb21w aWxlciB0byBwZXJmb3JtIHRoZSBzdGFjayByZS1hbGlnbm1lbnQgCi0gICAg IGlzLCBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLCBlaXRoZXIgJWVjeCwgJWVk eCwgb3IgJWVheC4gIEdDQyBzaG91bGQKLSAgICAgbmV2ZXIgdXNlICVlYngg YXMgaXQgYWx3YXlzIHRyZWF0cyBpdCBhcyBjYWxsZWUtc2F2ZWQsIHdoZXJl YXMKLSAgICAgdGhlIGNvbXBpbGVyIGNhbiBvbmx5IHVzZSBjYWxsZXItc2F2 ZWQgcmVnaXN0ZXJzLiAgKi8KLSAgc3RhdGljIGNvbnN0IGdkYl9ieXRlIGlu c25zX2VjeFsxMF0gPSB7IAotICAgIDB4OGQsIDB4NGMsIDB4MjQsIDB4MDQs CS8qIGxlYWwgIDQoJWVzcCksICVlY3ggKi8KLSAgICAweDgzLCAweGU0LCAw eGYwLAkJLyogYW5kbCAgJC0xNiwgJWVzcCAqLwotICAgIDB4ZmYsIDB4NzEs IDB4ZmMJCS8qIHB1c2hsIC00KCVlY3gpICovCi0gIH07Ci0gIHN0YXRpYyBj b25zdCBnZGJfYnl0ZSBpbnNuc19lZHhbMTBdID0geyAKLSAgICAweDhkLCAw eDU0LCAweDI0LCAweDA0LAkvKiBsZWFsICA0KCVlc3ApLCAlZWR4ICovCi0g ICAgMHg4MywgMHhlNCwgMHhmMCwJCS8qIGFuZGwgICQtMTYsICVlc3AgKi8K LSAgICAweGZmLCAweDcyLCAweGZjCQkvKiBwdXNobCAtNCglZWR4KSAqLwot ICB9OwotICBzdGF0aWMgY29uc3QgZ2RiX2J5dGUgaW5zbnNfZWF4WzEwXSA9 IHsgCi0gICAgMHg4ZCwgMHg0NCwgMHgyNCwgMHgwNCwJLyogbGVhbCAgNCgl ZXNwKSwgJWVheCAqLwotICAgIDB4ODMsIDB4ZTQsIDB4ZjAsCQkvKiBhbmRs ICAkLTE2LCAlZXNwICovCi0gICAgMHhmZiwgMHg3MCwgMHhmYwkJLyogcHVz aGwgLTQoJWVheCkgKi8KKyAgLyogVGhlcmUgYXJlIDMgY29kZSBzZXF1ZW5j ZXMgdG8gcmUtYWxpZ24gc3RhY2s6CisKKyAgICAgCTEuIFVzZSAlZWJwOgor CisJCXB1c2hsICVlYnAKKwkJbW92bCAgJWVzcCwgJWVicAorCQlhbmRsICAk LVhYWCwgJWVzcAorCisJMi4gVXNlIGEgY2FsbGVyLXNhdmVkIHNhdmVkIHJl Z2lzdGVyOgorCisJCWxlYWwgIDQoJWVzcCksICVyZWcKKwkJYW5kbCAgJC1Y WFgsICVlc3AKKwkJcHVzaGwgLTQoJXJlZykKKworCTMuIFVzZSBhIGNhbGxl ZS1zYXZlZCBzYXZlZCByZWdpc3RlcjoKKworCQlwdXNobCAlcmVnCisJCWxl YWwgIDgoJWVzcCksICVyZWcKKwkJYW5kbCAgJC1YWFgsICVlc3AKKwkJcHVz aGwgLTQoJXJlZykKKworICAgICAiYW5kbCAkLVhYWCwgJWVzcCIgY2FuIGJl IGVpdGhlciAzIGJ5dGVzIG9yIDYgYnl0ZXM6CisgICAgIAorICAgICAJMHg4 MyAweGU0IDB4ZjAJCQlhbmRsICQtMTYsICVlc3AKKyAgICAgCTB4ODEgMHhl NCAweDAwIDB4ZmYgMHhmZiAweGZmCWFuZGwgJC0yNTYsICVlc3AKKyAgICov CisKKyAgZ2RiX2J5dGUgYnVmWzE0XTsKKyAgaW50IHJlZzsKKyAgaW50IG9m ZnNldCwgb2Zmc2V0X2FuZDsKKyAgc3RhdGljIGludCByZWdudW1zWzhdID0g eworICAgIEkzODZfRUFYX1JFR05VTSwJCS8qICVlYXggKi8KKyAgICBJMzg2 X0VDWF9SRUdOVU0sCQkvKiAlZWN4ICovCisgICAgSTM4Nl9FRFhfUkVHTlVN LAkJLyogJWVkeCAqLworICAgIEkzODZfRUJYX1JFR05VTSwJCS8qICVlYngg Ki8KKyAgICBJMzg2X0VTUF9SRUdOVU0sCQkvKiAlZXNwICovCisgICAgSTM4 Nl9FQlBfUkVHTlVNLAkJLyogJWVicCAqLworICAgIEkzODZfRVNJX1JFR05V TSwJCS8qICVlc2kgKi8KKyAgICBJMzg2X0VESV9SRUdOVU0JCS8qICVlZGkg Ki8KICAgfTsKLSAgZ2RiX2J5dGUgYnVmWzEwXTsKIAotICBpZiAodGFyZ2V0 X3JlYWRfbWVtb3J5IChwYywgYnVmLCBzaXplb2YgYnVmKQotICAgICAgfHwg KG1lbWNtcCAoYnVmLCBpbnNuc19lY3gsIHNpemVvZiBidWYpICE9IDAKLSAg ICAgICAgICAmJiBtZW1jbXAgKGJ1ZiwgaW5zbnNfZWR4LCBzaXplb2YgYnVm KSAhPSAwCi0gICAgICAgICAgJiYgbWVtY21wIChidWYsIGluc25zX2VheCwg c2l6ZW9mIGJ1ZikgIT0gMCkpCisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkg KHBjLCBidWYsIHNpemVvZiBidWYpKQorICAgIHJldHVybiBwYzsKKworICAv KiBGaXJzdCBjaGVjayAicHVzaGwgJWVicCIuICAqLworICBpZiAoYnVmWzBd ID09IDB4NTUpCisgICAgeworICAgICAgLyogVGhlIG5leHQgaW5zdHJ1Y3Rp b24gaGFzIHRvIGJlICJtb3ZsICVlc3AsICVlYnAiLiAgKi8KKyAgICAgIGlm IChidWZbMV0gIT0gMHg4OSB8fCBidWZbMl0gIT0gMHhlNSkKKwlyZXR1cm4g cGM7CisKKyAgICAgIC8qIFRoZSBuZXh0IGluc3RydWN0aW9uIGhhcyB0byBi ZSAiYW5kbCAkLVhYWCwgJWVzcCIuICAqLworICAgICAgaWYgKGJ1Zls0XSAh PSAweGU0IHx8IChidWZbM10gIT0gMHg4MSAmJiBidWZbM10gIT0gMHg4Mykp CisJcmV0dXJuIHBjOworCisgICAgICBpZiAoY3VycmVudF9wYyA+IHBjICsg MykKKwljYWNoZS0+c2F2ZWRfc3BfcmVnID0gSTM4Nl9FQlBfUkVHTlVNOwor CisgICAgICAvKiBLZWVwIHRoZSBwcm9sb2d1ZSBmb3IgaTM4Nl9hbmFseXpl X2ZyYW1lX3NldHVwLiAgKi8KKyAgICAgIHJldHVybiBwYzsKKyAgICB9CisK KyAgLyogQ2hlY2sgY2FsbGVyLXNhdmVkIHNhdmVkIHJlZ2lzdGVyLiAgVGhl IGZpcnN0IGluc3RydWN0aW9uIGhhcworICAgICB0byBiZSAibGVhbCA0KCVl c3ApLCAlcmVnIi4gICovCisgIGlmIChidWZbMF0gPT0gMHg4ZCAmJiBidWZb Ml0gPT0gMHgyNCAmJiBidWZbM10gPT0gMHg0KQorICAgIHsKKyAgICAgIC8q IE1PRCBtdXN0IGJlIGJpbmFyeSAxMCBhbmQgUi9NIG11c3QgYmUgYmluYXJ5 IDEwMC4gICovCisgICAgICBpZiAoKGJ1ZlsxXSAmIDB4YzcpICE9IDB4NDQp CisJcmV0dXJuIHBjOworCisgICAgICAvKiBSRUcgaGFzIHJlZ2lzdGVyIG51 bWJlci4gICovCisgICAgICByZWcgPSAoYnVmWzFdID4+IDMpICYgNzsKKyAg ICAgIG9mZnNldCA9IDQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg LyogQ2hlY2sgY2FsbGVlLXNhdmVkIHNhdmVkIHJlZ2lzdGVyLiAgVGhlIGZp cnN0IGluc3RydWN0aW9uCisJIGhhcyB0byBiZSAicHVzaGwgJXJlZyIuICAq LworICAgICAgaWYgKChidWZbMF0gJiAweGY4KSAhPSAweDUwKQorCXJldHVy biBwYzsKKworICAgICAgLyogR2V0IHJlZ2lzdGVyLiAgKi8KKyAgICAgIHJl ZyA9IGJ1ZlswXSAmIDB4NzsKKworICAgICAgLyogVGhlIG5leHQgaW5zdHJ1 Y3Rpb24gaGFzIHRvIGJlICJsZWFsIDgoJWVzcCksICVyZWciLiAgKi8KKyAg ICAgIGlmIChidWZbMV0gIT0gMHg4ZCB8fCBidWZbM10gIT0gMHgyNCB8fCBi dWZbNF0gIT0gMHg4KQorCXJldHVybiBwYzsKKworICAgICAgLyogTU9EIG11 c3QgYmUgYmluYXJ5IDEwIGFuZCBSL00gbXVzdCBiZSBiaW5hcnkgMTAwLiAg Ki8KKyAgICAgIGlmICgoYnVmWzJdICYgMHhjNykgIT0gMHg0NCkKKwlyZXR1 cm4gcGM7CisgICAgICAKKyAgICAgIC8qIFJFRyBoYXMgcmVnaXN0ZXIgbnVt YmVyLiAgUmVnaXN0ZXJzIGluIHB1c2hsIGFuZCBsZWFsIGhhdmUgdG8KKwkg YmUgdGhlIHNhbWUuICAqLworICAgICAgaWYgKHJlZyAhPSAoKGJ1ZlsyXSA+ PiAzKSAmIDcpKQorCXJldHVybiBwYzsKKworICAgICAgb2Zmc2V0ID0gNTsK KyAgICB9CisKKyAgLyogUmlnaXN0ZXIgY2FuJ3QgYmUgJWVzcCBub3IgJWVi cC4gICovCisgIGlmIChyZWcgPT0gNCB8fCByZWcgPT0gNSkKKyAgICByZXR1 cm4gcGM7CisKKyAgLyogVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaGFzIHRvIGJl ICJhbmRsICQtWFhYLCAlZXNwIi4gICovCisgIGlmIChidWZbb2Zmc2V0ICsg MV0gIT0gMHhlNAorICAgICAgfHwgKGJ1ZltvZmZzZXRdICE9IDB4ODEgJiYg YnVmW29mZnNldF0gIT0gMHg4MykpCiAgICAgcmV0dXJuIHBjOwogCi0gIGlm IChjdXJyZW50X3BjID4gcGMgKyA0KQotICAgIGNhY2hlLT5zdGFja19hbGln biA9IDE7CisgIG9mZnNldF9hbmQgPSBvZmZzZXQ7CisgIG9mZnNldCArPSBi dWZbb2Zmc2V0XSA9PSAweDgxID8gNiA6IDM7CiAKLSAgcmV0dXJuIG1pbiAo cGMgKyAxMCwgY3VycmVudF9wYyk7CisgIC8qIFRoZSBuZXh0IGluc3RydWN0 aW9uIGhhcyB0byBiZSAicHVzaGwgLTQoJXJlZykiLiAgOGJpdCAtNCBpcwor ICAgICAweGZjLiAgUkVHIG11c3QgYmUgYmluYXJ5IDExMCBhbmQgTU9EIG11 c3QgYmUgYmluYXJ5IDAxLiAgKi8KKyAgaWYgKGJ1ZltvZmZzZXRdICE9IDB4 ZmYKKyAgICAgIHx8IGJ1ZltvZmZzZXQgKyAyXSAhPSAweGZjCisgICAgICB8 fCAoYnVmW29mZnNldCArIDFdICYgMHhmOCkgIT0gMHg3MCkKKyAgICByZXR1 cm4gcGM7CisKKyAgLyogUi9NIGhhcyByZWdpc3Rlci4gIFJlZ2lzdGVycyBp biBsZWFsIGFuZCBwdXNobCBoYXZlIHRvIGJlIHRoZQorICAgICBzYW1lLiAg Ki8KKyAgaWYgKHJlZyAhPSAoYnVmW29mZnNldCArIDFdICYgNykpCisgICAg cmV0dXJuIHBjOworCisgIGlmIChjdXJyZW50X3BjID4gcGMgKyBvZmZzZXRf YW5kKQorICAgIGNhY2hlLT5zYXZlZF9zcF9yZWcgPSByZWdudW1zW3JlZ107 CisKKyAgcmV0dXJuIG1pbiAocGMgKyBvZmZzZXQgKyAzLCBjdXJyZW50X3Bj KTsKIH0KIAogLyogTWF4aW11bSBpbnN0cnVjdGlvbiBsZW5ndGggd2UgbmVl ZCB0byBoYW5kbGUuICAqLwpAQCAtMTI0MSwxMyArMTMzOCw2IEBAIGkzODZf ZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGkKICAgaWYgKGNh Y2hlLT5wYyAhPSAwKQogICAgIGkzODZfYW5hbHl6ZV9wcm9sb2d1ZSAoY2Fj aGUtPnBjLCBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpLCBjYWNoZSk7CiAK LSAgaWYgKGNhY2hlLT5zdGFja19hbGlnbikKLSAgICB7Ci0gICAgICAvKiBT YXZlZCBzdGFjayBwb2ludGVyIGhhcyBiZWVuIHNhdmVkIGluICVlY3guICAq LwotICAgICAgZ2V0X2ZyYW1lX3JlZ2lzdGVyICh0aGlzX2ZyYW1lLCBJMzg2 X0VDWF9SRUdOVU0sIGJ1Zik7Ci0gICAgICBjYWNoZS0+c2F2ZWRfc3AgPSBl eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIoYnVmLCA0KTsKLSAgICB9Ci0KICAg aWYgKGNhY2hlLT5sb2NhbHMgPCAwKQogICAgIHsKICAgICAgIC8qIFdlIGRp ZG4ndCBmaW5kIGEgdmFsaWQgZnJhbWUsIHdoaWNoIG1lYW5zIHRoYXQgQ0FD SEUtPmJhc2UKQEAgLTEyNTgsOSArMTM0OCwxMiBAQCBpMzg2X2ZyYW1lX2Nh Y2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpCiAJIGZyYW1lIGJ5IGxvb2tp bmcgYXQgdGhlIHN0YWNrIHBvaW50ZXIuICBGb3IgdHJ1bHkgImZyYW1lbGVz cyIKIAkgZnVuY3Rpb25zIHRoaXMgbWlnaHQgd29yayB0b28uICAqLwogCi0g ICAgICBpZiAoY2FjaGUtPnN0YWNrX2FsaWduKQorICAgICAgaWYgKGNhY2hl LT5zYXZlZF9zcF9yZWcgIT0gSTM4Nl9FU1BfUkVHTlVNKQogCXsKLQkgIC8q IFdlJ3JlIGhhbGZ3YXkgYWxpZ25pbmcgdGhlIHN0YWNrLiAgKi8KKwkgIC8q IFdlJ3JlIGhhbGZ3YXkgYWxpZ25pbmcgdGhlIHN0YWNrLiAgU2F2ZWQgc3Rh Y2sgcG9pbnRlcgorCSAgICAgaGFzIGJlZW4gc2F2ZWQgaW4gc2F2ZWRfc3Bf cmVnLiAgKi8KKwkgIGdldF9mcmFtZV9yZWdpc3RlciAodGhpc19mcmFtZSwg Y2FjaGUtPnNhdmVkX3NwX3JlZywgYnVmKTsKKwkgIGNhY2hlLT5zYXZlZF9z cCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcihidWYsIDQpOwogCSAgY2Fj aGUtPmJhc2UgPSAoKGNhY2hlLT5zYXZlZF9zcCAtIDQpICYgMHhmZmZmZmZm MCkgLSA0OwogCSAgY2FjaGUtPnNhdmVkX3JlZ3NbSTM4Nl9FSVBfUkVHTlVN XSA9IGNhY2hlLT5zYXZlZF9zcCAtIDQ7CiAK ------=_Part_9712_7464520.1218058561226--