From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16084 invoked by alias); 25 Nov 2009 08:06:25 -0000 Received: (qmail 16071 invoked by uid 22791); 25 Nov 2009 08:06:23 -0000 X-SWARE-Spam-Status: No, hits=-1.7 required=5.0 tests=AWL,BAYES_00,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-pz0-f189.google.com (HELO mail-pz0-f189.google.com) (209.85.222.189) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 25 Nov 2009 08:06:18 +0000 Received: by mail-pz0-f189.google.com with SMTP id 27so5464658pzk.12 for ; Wed, 25 Nov 2009 00:06:18 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.207.19 with SMTP id e19mr738391wfg.34.1259136378314; Wed, 25 Nov 2009 00:06:18 -0800 (PST) From: Hui Zhu Date: Wed, 25 Nov 2009 08:06:00 -0000 Message-ID: Subject: [RFA/RFC] Prec multi-thread support [2/4] arch support To: gdb-patches ml Cc: Michael Snyder Content-Type: multipart/mixed; boundary=000e0cd32f708da13004792d88bf 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: 2009-11/txt/msg00543.txt.bz2 --000e0cd32f708da13004792d88bf Content-Type: text/plain; charset=ISO-8859-1 Content-length: 9316 1. In record_linux_system_call gdb_sys_clone, I set record_step to 0. Then the record target will let inferior continue until to a breakpoint. Most of time, record just let inferior step. But sys_clone is very special. It cannot work OK with PTRACE_SINGLESTEP.(It make me hang this patch a log of months.) 2. Add new argument "addr" that point to the next code that need to be analyzed to linux syscall record function "record_linux_system_call". 2009-11-25 Hui Zhu * amd64-linux-tdep.c (amd64_linux_syscall_record): Add new argument "addr". * i386-linux-tdep.c (i386_linux_intx80_sysenter_record): Ditto. * i386-tdep.c (i386_record_lea_modrm): Add "if (record_debug)" to segment register warning. (i386_process_record): Ditto. Add new argument "addr" when call i386_intx80_record, i386_sysenter_record and i386_syscall_record. * i386-tdep.h (gdbarch_tdep): Add new argument "addr" when call i386_intx80_record, i386_sysenter_record and i386_syscall_record. * linux-record.c (inferior.h): New include. (record_linux_system_call): Add new argument "addr". Update code for gdb_sys_clone. * linux-record.h (record_linux_system_call): Add new argument "addr". --- amd64-linux-tdep.c | 4 ++-- i386-linux-tdep.c | 4 ++-- i386-tdep.c | 52 +++++++++++++++++++++++++++++----------------------- i386-tdep.h | 6 +++--- linux-record.c | 13 +++++++++---- linux-record.h | 2 +- 6 files changed, 46 insertions(+), 35 deletions(-) --- a/amd64-linux-tdep.c +++ b/amd64-linux-tdep.c @@ -1155,7 +1155,7 @@ static struct linux_record_tdep amd64_li #define RECORD_ARCH_GET_GS 0x1004 static int -amd64_linux_syscall_record (struct regcache *regcache) +amd64_linux_syscall_record (struct regcache *regcache, CORE_ADDR addr) { int ret; ULONGEST syscall_native; @@ -1205,7 +1205,7 @@ amd64_linux_syscall_record (struct regca } else { - ret = record_linux_system_call (syscall_gdb, regcache, + ret = record_linux_system_call (syscall_gdb, addr, regcache, &amd64_linux_record_tdep); if (ret) return ret; --- a/i386-linux-tdep.c +++ b/i386-linux-tdep.c @@ -411,7 +411,7 @@ i386_canonicalize_syscall (int syscall) static struct linux_record_tdep i386_linux_record_tdep; static int -i386_linux_intx80_sysenter_record (struct regcache *regcache) +i386_linux_intx80_sysenter_record (struct regcache *regcache, CORE_ADDR addr) { int ret; LONGEST syscall_native; @@ -437,7 +437,7 @@ i386_linux_intx80_sysenter_record (struc return 0; } - ret = record_linux_system_call (syscall_gdb, regcache, + ret = record_linux_system_call (syscall_gdb, addr, regcache, &i386_linux_record_tdep); if (ret) return ret; --- a/i386-tdep.c +++ b/i386-tdep.c @@ -3160,10 +3160,11 @@ i386_record_lea_modrm (struct i386_recor if (irp->override >= 0) { - warning (_("Process record ignores the memory change " - "of instruction at address %s because it " - "can't get the value of the segment register."), - paddress (gdbarch, irp->orig_addr)); + if (record_debug) + warning (_("Process record ignores the memory change " + "of instruction at address %s because it " + "can't get the value of the segment register."), + paddress (gdbarch, irp->orig_addr)); return 0; } @@ -4042,11 +4043,12 @@ reswitch: case 0xa3: if (ir.override >= 0) { - warning (_("Process record ignores the memory change " - "of instruction at address %s because " - "it can't get the value of the segment " - "register."), - paddress (gdbarch, ir.orig_addr)); + if (record_debug) + warning (_("Process record ignores the memory change " + "of instruction at address %s because " + "it can't get the value of the segment " + "register."), + paddress (gdbarch, ir.orig_addr)); } else { @@ -4467,11 +4469,12 @@ reswitch: if (ir.aflag && (es != ds)) { /* addr += ((uint32_t) read_register (I386_ES_REGNUM)) << 4; */ - warning (_("Process record ignores the memory " - "change of instruction at address %s " - "because it can't get the value of the " - "ES segment register."), - paddress (gdbarch, ir.orig_addr)); + if (record_debug) + warning (_("Process record ignores the memory " + "change of instruction at address %s " + "because it can't get the value of the " + "ES segment register."), + paddress (gdbarch, ir.orig_addr)); } else { @@ -4872,7 +4875,7 @@ reswitch: ir.addr -= 2; goto no_support; } - ret = gdbarch_tdep (gdbarch)->i386_intx80_record (ir.regcache); + ret = gdbarch_tdep (gdbarch)->i386_intx80_record (ir.regcache, ir.addr); if (ret) return ret; } @@ -4974,7 +4977,8 @@ reswitch: ir.addr -= 2; goto no_support; } - ret = gdbarch_tdep (gdbarch)->i386_sysenter_record (ir.regcache); + ret = gdbarch_tdep (gdbarch)->i386_sysenter_record (ir.regcache, + ir.addr); if (ret) return ret; } @@ -4999,7 +5003,8 @@ reswitch: ir.addr -= 2; goto no_support; } - ret = gdbarch_tdep (gdbarch)->i386_syscall_record (ir.regcache); + ret = gdbarch_tdep (gdbarch)->i386_syscall_record (ir.regcache, + ir.addr); if (ret) return ret; } @@ -5135,12 +5140,13 @@ reswitch: /* sidt */ if (ir.override >= 0) { - warning (_("Process record ignores the memory " - "change of instruction at " - "address %s because it can't get " - "the value of the segment " - "register."), - paddress (gdbarch, ir.orig_addr)); + if (record_debug) + warning (_("Process record ignores the memory " + "change of instruction at " + "address %s because it can't get " + "the value of the segment " + "register."), + paddress (gdbarch, ir.orig_addr)); } else { --- a/i386-tdep.h +++ b/i386-tdep.h @@ -115,11 +115,11 @@ struct gdbarch_tdep in GDB is not same as I386 instructions. */ const int *record_regmap; /* Parse intx80 args. */ - int (*i386_intx80_record) (struct regcache *regcache); + int (*i386_intx80_record) (struct regcache *regcache, CORE_ADDR addr); /* Parse sysenter args. */ - int (*i386_sysenter_record) (struct regcache *regcache); + int (*i386_sysenter_record) (struct regcache *regcache, CORE_ADDR addr); /* Parse syscall args. */ - int (*i386_syscall_record) (struct regcache *regcache); + int (*i386_syscall_record) (struct regcache *regcache, CORE_ADDR addr); }; /* Floating-point registers. */ --- a/linux-record.c +++ b/linux-record.c @@ -21,6 +21,7 @@ #include "target.h" #include "gdbtypes.h" #include "regcache.h" +#include "inferior.h" #include "record.h" #include "linux-record.h" @@ -222,7 +223,7 @@ record_linux_msghdr (struct regcache *re Return -1 if something wrong. */ int -record_linux_system_call (enum gdb_syscall syscall, +record_linux_system_call (enum gdb_syscall syscall, CORE_ADDR addr, struct regcache *regcache, struct linux_record_tdep *tdep) { @@ -242,8 +243,9 @@ record_linux_system_call (enum gdb_sysca int q; target_terminal_ours (); q = yquery (_("The next instruction is syscall exit. " - "It will make the program exit. " - "Do you want to stop the program?")); + "It will make the thread %s exit. " + "Do you want to stop the program?"), + target_pid_to_str (inferior_ptid)); target_terminal_inferior (); if (q) return 1; @@ -1209,10 +1211,13 @@ record_linux_system_call (enum gdb_sysca case gdb_sys_fsync: case gdb_sys_sigreturn: - case gdb_sys_clone: case gdb_sys_setdomainname: break; + case gdb_sys_clone: + record_step = 0; + break; + case gdb_sys_newuname: regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); if (record_arch_list_add_mem ((CORE_ADDR) tmpulongest, --- a/linux-record.h +++ b/linux-record.h @@ -534,7 +534,7 @@ enum gdb_syscall { /* Record a linux syscall. */ -extern int record_linux_system_call (enum gdb_syscall num, +extern int record_linux_system_call (enum gdb_syscall num, CORE_ADDR addr, struct regcache *regcache, struct linux_record_tdep *tdep); #endif /* _LINUX_RECORD_H_ */ --000e0cd32f708da13004792d88bf Content-Type: text/plain; charset=US-ASCII; name="prec-thread-arch.txt" Content-Disposition: attachment; filename="prec-thread-arch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2ftdd3h0 Content-length: 11017 LS0tCiBhbWQ2NC1saW51eC10ZGVwLmMgfCAgICA0ICsrLS0KIGkzODYtbGlu dXgtdGRlcC5jICB8ICAgIDQgKystLQogaTM4Ni10ZGVwLmMgICAgICAgIHwg ICA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiBpMzg2LXRkZXAuaCAgICAgICAgfCAgICA2ICsrKy0t LQogbGludXgtcmVjb3JkLmMgICAgIHwgICAxMyArKysrKysrKystLS0tCiBs aW51eC1yZWNvcmQuaCAgICAgfCAgICAyICstCiA2IGZpbGVzIGNoYW5nZWQs IDQ2IGluc2VydGlvbnMoKyksIDM1IGRlbGV0aW9ucygtKQoKLS0tIGEvYW1k NjQtbGludXgtdGRlcC5jCisrKyBiL2FtZDY0LWxpbnV4LXRkZXAuYwpAQCAt MTE1NSw3ICsxMTU1LDcgQEAgc3RhdGljIHN0cnVjdCBsaW51eF9yZWNvcmRf dGRlcCBhbWQ2NF9saQogI2RlZmluZSBSRUNPUkRfQVJDSF9HRVRfR1MJMHgx MDA0CiAKIHN0YXRpYyBpbnQKLWFtZDY0X2xpbnV4X3N5c2NhbGxfcmVjb3Jk IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlKQorYW1kNjRfbGludXhfc3lz Y2FsbF9yZWNvcmQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVf QUREUiBhZGRyKQogewogICBpbnQgcmV0OwogICBVTE9OR0VTVCBzeXNjYWxs X25hdGl2ZTsKQEAgLTEyMDUsNyArMTIwNSw3IEBAIGFtZDY0X2xpbnV4X3N5 c2NhbGxfcmVjb3JkIChzdHJ1Y3QgcmVnY2EKICAgICB9CiAgIGVsc2UKICAg ICB7Ci0gICAgICByZXQgPSByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKHN5 c2NhbGxfZ2RiLCByZWdjYWNoZSwKKyAgICAgIHJldCA9IHJlY29yZF9saW51 eF9zeXN0ZW1fY2FsbCAoc3lzY2FsbF9nZGIsIGFkZHIsIHJlZ2NhY2hlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1kNjRf bGludXhfcmVjb3JkX3RkZXApOwogICAgICAgaWYgKHJldCkKICAgICAgICAg cmV0dXJuIHJldDsKLS0tIGEvaTM4Ni1saW51eC10ZGVwLmMKKysrIGIvaTM4 Ni1saW51eC10ZGVwLmMKQEAgLTQxMSw3ICs0MTEsNyBAQCBpMzg2X2Nhbm9u aWNhbGl6ZV9zeXNjYWxsIChpbnQgc3lzY2FsbCkKIHN0YXRpYyBzdHJ1Y3Qg bGludXhfcmVjb3JkX3RkZXAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcDsKIAog c3RhdGljIGludAotaTM4Nl9saW51eF9pbnR4ODBfc3lzZW50ZXJfcmVjb3Jk IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlKQoraTM4Nl9saW51eF9pbnR4 ODBfc3lzZW50ZXJfcmVjb3JkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LCBDT1JFX0FERFIgYWRkcikKIHsKICAgaW50IHJldDsKICAgTE9OR0VTVCBz eXNjYWxsX25hdGl2ZTsKQEAgLTQzNyw3ICs0MzcsNyBAQCBpMzg2X2xpbnV4 X2ludHg4MF9zeXNlbnRlcl9yZWNvcmQgKHN0cnVjCiAgICAgIHJldHVybiAw OwogICAgfQogCi0gIHJldCA9IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo c3lzY2FsbF9nZGIsIHJlZ2NhY2hlLAorICByZXQgPSByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKHN5c2NhbGxfZ2RiLCBhZGRyLCByZWdjYWNoZSwKIAkJ CQkgICZpMzg2X2xpbnV4X3JlY29yZF90ZGVwKTsKICAgaWYgKHJldCkKICAg ICByZXR1cm4gcmV0OwotLS0gYS9pMzg2LXRkZXAuYworKysgYi9pMzg2LXRk ZXAuYwpAQCAtMzE2MCwxMCArMzE2MCwxMSBAQCBpMzg2X3JlY29yZF9sZWFf bW9kcm0gKHN0cnVjdCBpMzg2X3JlY29yCiAKICAgaWYgKGlycC0+b3ZlcnJp ZGUgPj0gMCkKICAgICB7Ci0gICAgICB3YXJuaW5nIChfKCJQcm9jZXNzIHJl Y29yZCBpZ25vcmVzIHRoZSBtZW1vcnkgY2hhbmdlICIKLSAgICAgICAgICAg ICAgICAgIm9mIGluc3RydWN0aW9uIGF0IGFkZHJlc3MgJXMgYmVjYXVzZSBp dCAiCi0gICAgICAgICAgICAgICAgICJjYW4ndCBnZXQgdGhlIHZhbHVlIG9m IHRoZSBzZWdtZW50IHJlZ2lzdGVyLiIpLAotICAgICAgICAgICAgICAgcGFk ZHJlc3MgKGdkYmFyY2gsIGlycC0+b3JpZ19hZGRyKSk7CisgICAgICBpZiAo cmVjb3JkX2RlYnVnKQorICAgICAgICB3YXJuaW5nIChfKCJQcm9jZXNzIHJl Y29yZCBpZ25vcmVzIHRoZSBtZW1vcnkgY2hhbmdlICIKKyAgICAgICAgICAg ICAgICAgICAib2YgaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAlcyBiZWNhdXNl IGl0ICIKKyAgICAgICAgICAgICAgICAgICAiY2FuJ3QgZ2V0IHRoZSB2YWx1 ZSBvZiB0aGUgc2VnbWVudCByZWdpc3Rlci4iKSwKKyAgICAgICAgICAgICAg ICAgcGFkZHJlc3MgKGdkYmFyY2gsIGlycC0+b3JpZ19hZGRyKSk7CiAgICAg ICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQwNDIsMTEgKzQwNDMsMTIgQEAg cmVzd2l0Y2g6CiAgICAgY2FzZSAweGEzOgogICAgICAgaWYgKGlyLm92ZXJy aWRlID49IDApCiAgICAgICAgIHsKLQkgIHdhcm5pbmcgKF8oIlByb2Nlc3Mg cmVjb3JkIGlnbm9yZXMgdGhlIG1lbW9yeSBjaGFuZ2UgIgotICAgICAgICAg ICAgICAgICAgICAgIm9mIGluc3RydWN0aW9uIGF0IGFkZHJlc3MgJXMgYmVj YXVzZSAiCi0gICAgICAgICAgICAgICAgICAgICAiaXQgY2FuJ3QgZ2V0IHRo ZSB2YWx1ZSBvZiB0aGUgc2VnbWVudCAiCi0gICAgICAgICAgICAgICAgICAg ICAicmVnaXN0ZXIuIiksCi0gICAgICAgICAgICAgICAgICAgcGFkZHJlc3Mg KGdkYmFyY2gsIGlyLm9yaWdfYWRkcikpOworICAgICAgICAgIGlmIChyZWNv cmRfZGVidWcpCisJICAgIHdhcm5pbmcgKF8oIlByb2Nlc3MgcmVjb3JkIGln bm9yZXMgdGhlIG1lbW9yeSBjaGFuZ2UgIgorICAgICAgICAgICAgICAgICAg ICAgICAib2YgaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAlcyBiZWNhdXNlICIK KyAgICAgICAgICAgICAgICAgICAgICAgIml0IGNhbid0IGdldCB0aGUgdmFs dWUgb2YgdGhlIHNlZ21lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAi cmVnaXN0ZXIuIiksCisgICAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAo Z2RiYXJjaCwgaXIub3JpZ19hZGRyKSk7CiAJfQogICAgICAgZWxzZQogCXsK QEAgLTQ0NjcsMTEgKzQ0NjksMTIgQEAgcmVzd2l0Y2g6CiAgICAgICAgICAg aWYgKGlyLmFmbGFnICYmIChlcyAhPSBkcykpCiAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgIC8qIGFkZHIgKz0gKCh1aW50MzJfdCkgcmVhZF9yZWdp c3RlciAoSTM4Nl9FU19SRUdOVU0pKSA8PCA0OyAqLwotICAgICAgICAgICAg ICB3YXJuaW5nIChfKCJQcm9jZXNzIHJlY29yZCBpZ25vcmVzIHRoZSBtZW1v cnkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFuZ2Ugb2YgaW5z dHJ1Y3Rpb24gYXQgYWRkcmVzcyAlcyAiCi0gICAgICAgICAgICAgICAgICAg ICAgICAgImJlY2F1c2UgaXQgY2FuJ3QgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUg IgotICAgICAgICAgICAgICAgICAgICAgICAgICJFUyBzZWdtZW50IHJlZ2lz dGVyLiIpLAotICAgICAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2Ri YXJjaCwgaXIub3JpZ19hZGRyKSk7CisgICAgICAgICAgICAgIGlmIChyZWNv cmRfZGVidWcpCisgICAgICAgICAgICAgICAgd2FybmluZyAoXygiUHJvY2Vz cyByZWNvcmQgaWdub3JlcyB0aGUgbWVtb3J5ICIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJjaGFuZ2Ugb2YgaW5zdHJ1Y3Rpb24gYXQgYWRkcmVz cyAlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVjYXVzZSBp dCBjYW4ndCBnZXQgdGhlIHZhbHVlIG9mIHRoZSAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAiRVMgc2VnbWVudCByZWdpc3Rlci4iKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgaXIub3Jp Z19hZGRyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgewpAQCAtNDg3Miw3ICs0ODc1LDcgQEAgcmVzd2l0Y2g6CiAJ ICAgIGlyLmFkZHIgLT0gMjsKIAkgICAgZ290byBub19zdXBwb3J0OwogCSAg fQotCXJldCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCktPmkzODZfaW50eDgw X3JlY29yZCAoaXIucmVnY2FjaGUpOworCXJldCA9IGdkYmFyY2hfdGRlcCAo Z2RiYXJjaCktPmkzODZfaW50eDgwX3JlY29yZCAoaXIucmVnY2FjaGUsIGly LmFkZHIpOwogCWlmIChyZXQpCiAJICByZXR1cm4gcmV0OwogICAgICAgfQpA QCAtNDk3NCw3ICs0OTc3LDggQEAgcmVzd2l0Y2g6CiAJICAgIGlyLmFkZHIg LT0gMjsKIAkgICAgZ290byBub19zdXBwb3J0OwogCSAgfQotCXJldCA9IGdk YmFyY2hfdGRlcCAoZ2RiYXJjaCktPmkzODZfc3lzZW50ZXJfcmVjb3JkIChp ci5yZWdjYWNoZSk7CisJcmV0ID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKS0+ aTM4Nl9zeXNlbnRlcl9yZWNvcmQgKGlyLnJlZ2NhY2hlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaXIuYWRkcik7CiAJaWYgKHJldCkKIAkgIHJldHVybiByZXQ7CiAg ICAgICB9CkBAIC00OTk5LDcgKzUwMDMsOCBAQCByZXN3aXRjaDoKIAkgICAg aXIuYWRkciAtPSAyOwogCSAgICBnb3RvIG5vX3N1cHBvcnQ7CiAJICB9Ci0J cmV0ID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKS0+aTM4Nl9zeXNjYWxsX3Jl Y29yZCAoaXIucmVnY2FjaGUpOworCXJldCA9IGdkYmFyY2hfdGRlcCAoZ2Ri YXJjaCktPmkzODZfc3lzY2FsbF9yZWNvcmQgKGlyLnJlZ2NhY2hlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpci5hZGRyKTsKIAlpZiAocmV0KQogCSAgcmV0dXJuIHJl dDsKICAgICAgIH0KQEAgLTUxMzUsMTIgKzUxNDAsMTMgQEAgcmVzd2l0Y2g6 CiAJICAgICAgLyogc2lkdCAqLwogCSAgICAgIGlmIChpci5vdmVycmlkZSA+ PSAwKQogCQl7Ci0JCSAgd2FybmluZyAoXygiUHJvY2VzcyByZWNvcmQgaWdu b3JlcyB0aGUgbWVtb3J5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImNoYW5nZSBvZiBpbnN0cnVjdGlvbiBhdCAiCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJhZGRyZXNzICVzIGJlY2F1c2UgaXQgY2FuJ3Qg Z2V0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB2YWx1 ZSBvZiB0aGUgc2VnbWVudCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJyZWdpc3Rlci4iKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhZGRyZXNzIChnZGJhcmNoLCBpci5vcmlnX2FkZHIpKTsKKyAgICAgICAg ICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJCSAgICB3YXJuaW5nIChf KCJQcm9jZXNzIHJlY29yZCBpZ25vcmVzIHRoZSBtZW1vcnkgIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFuZ2Ugb2YgaW5zdHJ1Y3Rp b24gYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGRy ZXNzICVzIGJlY2F1c2UgaXQgY2FuJ3QgZ2V0ICIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAidGhlIHZhbHVlIG9mIHRoZSBzZWdtZW50ICIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXIuIiks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRyZXNzIChnZGJh cmNoLCBpci5vcmlnX2FkZHIpKTsKIAkJfQogCSAgICAgIGVsc2UKIAkJewot LS0gYS9pMzg2LXRkZXAuaAorKysgYi9pMzg2LXRkZXAuaApAQCAtMTE1LDEx ICsxMTUsMTEgQEAgc3RydWN0IGdkYmFyY2hfdGRlcAogICAgICBpbiBHREIg aXMgbm90IHNhbWUgYXMgSTM4NiBpbnN0cnVjdGlvbnMuICAqLwogICBjb25z dCBpbnQgKnJlY29yZF9yZWdtYXA7CiAgIC8qIFBhcnNlIGludHg4MCBhcmdz LiAgKi8KLSAgaW50ICgqaTM4Nl9pbnR4ODBfcmVjb3JkKSAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSk7CisgIGludCAoKmkzODZfaW50eDgwX3JlY29y ZCkgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIENPUkVfQUREUiBhZGRy KTsKICAgLyogUGFyc2Ugc3lzZW50ZXIgYXJncy4gICovCi0gIGludCAoKmkz ODZfc3lzZW50ZXJfcmVjb3JkKSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNo ZSk7CisgIGludCAoKmkzODZfc3lzZW50ZXJfcmVjb3JkKSAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgQ09SRV9BRERSIGFkZHIpOwogICAvKiBQYXJz ZSBzeXNjYWxsIGFyZ3MuICAqLwotICBpbnQgKCppMzg2X3N5c2NhbGxfcmVj b3JkKSAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSk7CisgIGludCAoKmkz ODZfc3lzY2FsbF9yZWNvcmQpIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hl LCBDT1JFX0FERFIgYWRkcik7CiB9OwogCiAvKiBGbG9hdGluZy1wb2ludCBy ZWdpc3RlcnMuICAqLwotLS0gYS9saW51eC1yZWNvcmQuYworKysgYi9saW51 eC1yZWNvcmQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgInRhcmdl dC5oIgogI2luY2x1ZGUgImdkYnR5cGVzLmgiCiAjaW5jbHVkZSAicmVnY2Fj aGUuaCIKKyNpbmNsdWRlICJpbmZlcmlvci5oIgogI2luY2x1ZGUgInJlY29y ZC5oIgogI2luY2x1ZGUgImxpbnV4LXJlY29yZC5oIgogCkBAIC0yMjIsNyAr MjIzLDcgQEAgcmVjb3JkX2xpbnV4X21zZ2hkciAoc3RydWN0IHJlZ2NhY2hl ICpyZQogICAgUmV0dXJuIC0xIGlmIHNvbWV0aGluZyB3cm9uZy4gICovCiAK IGludAotcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChlbnVtIGdkYl9zeXNj YWxsIHN5c2NhbGwsIAorcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChlbnVt IGdkYl9zeXNjYWxsIHN5c2NhbGwsIENPUkVfQUREUiBhZGRyLAogCQkJICBz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAgKnRkZXApCiB7CkBA IC0yNDIsOCArMjQzLDkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChl bnVtIGdkYl9zeXNjYQogICAgICAgICBpbnQgcTsKICAgICAgICAgdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7CiAgICAgICAgIHEgPSB5cXVlcnkgKF8oIlRo ZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdC4gICIKLSAgICAg ICAgICAgICAgICAgICAgICAiSXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4 aXQuICAiCi0gICAgICAgICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRv IHN0b3AgdGhlIHByb2dyYW0/IikpOworICAgICAgICAgICAgICAgICAgICAg ICJJdCB3aWxsIG1ha2UgdGhlIHRocmVhZCAlcyBleGl0LiAgIgorICAgICAg ICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9n cmFtPyIpLAorICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGlkX3RvX3N0 ciAoaW5mZXJpb3JfcHRpZCkpOwogICAgICAgICB0YXJnZXRfdGVybWluYWxf aW5mZXJpb3IgKCk7CiAgICAgICAgIGlmIChxKQogICAgICAgICAgIHJldHVy biAxOwpAQCAtMTIwOSwxMCArMTIxMSwxMyBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGVudW0gZ2RiX3N5c2NhCiAKICAgICBjYXNlIGdkYl9zeXNf ZnN5bmM6CiAgICAgY2FzZSBnZGJfc3lzX3NpZ3JldHVybjoKLSAgICBjYXNl IGdkYl9zeXNfY2xvbmU6CiAgICAgY2FzZSBnZGJfc3lzX3NldGRvbWFpbm5h bWU6CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgZ2RiX3N5c19jbG9uZToK KyAgICAgIHJlY29yZF9zdGVwID0gMDsKKyAgICAgIGJyZWFrOworCiAgICAg Y2FzZSBnZGJfc3lzX25ld3VuYW1lOgogICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOwogICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUikgdG1wdWxvbmdlc3QsCi0tLSBhL2xpbnV4LXJlY29yZC5oCisr KyBiL2xpbnV4LXJlY29yZC5oCkBAIC01MzQsNyArNTM0LDcgQEAgZW51bSBn ZGJfc3lzY2FsbCB7CiAKIC8qIFJlY29yZCBhIGxpbnV4IHN5c2NhbGwuICAq LwogCi1leHRlcm4gaW50IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoZW51 bSBnZGJfc3lzY2FsbCBudW0sIAorZXh0ZXJuIGludCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGVudW0gZ2RiX3N5c2NhbGwgbnVtLCBDT1JFX0FERFIg YWRkciwKIAkJCQkgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCiAJ CQkJICAgICBzdHJ1Y3QgbGludXhfcmVjb3JkX3RkZXAgKnRkZXApOwogI2Vu ZGlmIC8qIF9MSU5VWF9SRUNPUkRfSF8gKi8K --000e0cd32f708da13004792d88bf--