From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30696 invoked by alias); 10 Sep 2009 01:57:52 -0000 Received: (qmail 30455 invoked by uid 22791); 10 Sep 2009 01:57:45 -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-f195.google.com (HELO mail-pz0-f195.google.com) (209.85.222.195) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Sep 2009 01:57:37 +0000 Received: by pzk33 with SMTP id 33so1578169pzk.24 for ; Wed, 09 Sep 2009 18:57:36 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.209.20 with SMTP id h20mr136096wfg.167.1252547856125; Wed, 09 Sep 2009 18:57:36 -0700 (PDT) In-Reply-To: <200909091352.n89Dq7FG003824@brahms.sibelius.xs4all.nl> References: <200909091352.n89Dq7FG003824@brahms.sibelius.xs4all.nl> From: Hui Zhu Date: Thu, 10 Sep 2009 01:57:00 -0000 Message-ID: Subject: Re: [RFA] Make the prec support signal better[4/4] -- amd64-linux To: Mark Kettenis Cc: gdb-patches@sourceware.org, msnyder@vmware.com Content-Type: multipart/mixed; boundary=000e0cd32e2e074f9b04732f8669 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-09/txt/msg00270.txt.bz2 --000e0cd32e2e074f9b04732f8669 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 8243 On Wed, Sep 9, 2009 at 21:52, Mark Kettenis wrote: >> From: Hui Zhu >> Date: Wed, 9 Sep 2009 21:29:20 +0800 >> >> This patch make amd64-linux support signal record. >> When signal happen, amd64_linux_record_signal will record the change. >> When the signal handler want return, new code in >> "amd64_linux_syscall_record" will record the change. >> >> 2009-09-09 =A0Michael Snyder =A0 >> =A0 =A0 =A0 =A0 =A0 Hui Zhu =A0 >> >> =A0 =A0 =A0 * amd64-linux-tdep.c (amd64_all_but_ip_registers_record): New >> =A0 =A0 =A0 function. >> =A0 =A0 =A0 (amd64_linux_syscall_record): Call >> =A0 =A0 =A0 amd64_all_but_ip_registers_record if syscall is >> =A0 =A0 =A0 sys_rt_sigreturn. >> =A0 =A0 =A0 (amd64_linux_signal_stack): New enum. >> =A0 =A0 =A0 (amd64_linux_record_signal): New function. >> =A0 =A0 =A0 (amd64_linux_init_abi): Call set_gdbarch_process_record_sign= al. > > Same comments, questions as the i386 counterpart. =A0In addition to > that: > >> - record_regs: >> +record_regs: > > Not sure if it is spelled out in the coding standards, but emacs' GNU > mode seems to insist on the space you're removing. > > Also, looking at this diff it seems there are lots of Linux-specific > constants and functions that have an amd64_ prefix instead of an > amd64_linux_ prefix. =A0In particular the system call numbers. =A0Please > fix that (in a seperate diff). > Thanks Mark. I make a new patch for it. Please help me with it. Hui 2009-09-10 Michael Snyder Hui Zhu * amd64-linux-tdep.c (amd64_all_but_ip_registers_record): New function. (amd64_linux_syscall_record): Call amd64_all_but_ip_registers_record if syscall is sys_rt_sigreturn. (AMD64_LINUX_redzone, AMD64_LINUX_xstate, AMD64_LINUX_frame_size): New macros. (amd64_linux_record_signal): New function. (amd64_linux_init_abi): Call set_gdbarch_process_record_signal. --- amd64-linux-tdep.c | 142 ++++++++++++++++++++++++++++++++++++++++++++----= ----- 1 file changed, 118 insertions(+), 24 deletions(-) --- a/amd64-linux-tdep.c +++ b/amd64-linux-tdep.c @@ -263,16 +263,48 @@ amd64_linux_write_pc (struct regcache *r regcache_cooked_write_unsigned (regcache, AMD64_LINUX_ORIG_RAX_REGNUM, -= 1); } -/* Parse the arguments of current system call instruction and record - the values of the registers and memory that will be changed into - "record_arch_list". This instruction is "syscall". - - Return -1 if something wrong. */ +/* Record all registers but IP register for process-record. */ -static struct linux_record_tdep amd64_linux_record_tdep; +static int +amd64_all_but_ip_registers_record (struct regcache *regcache) +{ + if (record_arch_list_add_reg (regcache, AMD64_RAX_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RCX_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RDX_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RBX_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RSP_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RBP_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RSI_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_RDI_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R8_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R9_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R10_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R12_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R13_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R14_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_R15_REGNUM)) + return -1; + if (record_arch_list_add_reg (regcache, AMD64_EFLAGS_REGNUM)) + return -1; -#define RECORD_ARCH_GET_FS 0x1003 -#define RECORD_ARCH_GET_GS 0x1004 + return 0; +} /* amd64_canonicalize_syscall maps from the native amd64 Linux set of syscall ids into a canonical set of syscall ids used by @@ -1085,6 +1117,17 @@ amd64_canonicalize_syscall (enum amd64_s } } +/* Parse the arguments of current system call instruction and record + the values of the registers and memory that will be changed into + "record_arch_list". This instruction is "syscall". + + Return -1 if something wrong. */ + +static struct linux_record_tdep amd64_linux_record_tdep; + +#define RECORD_ARCH_GET_FS 0x1003 +#define RECORD_ARCH_GET_GS 0x1004 + static int amd64_linux_syscall_record (struct regcache *regcache) { @@ -1094,27 +1137,39 @@ amd64_linux_syscall_record (struct regca regcache_raw_read_unsigned (regcache, AMD64_RAX_REGNUM, &syscall_native); - syscall_gdb =3D amd64_canonicalize_syscall (syscall_native); - - if (syscall_native =3D=3D amd64_sys_arch_prctl) + switch (syscall_native) { - ULONGEST arg3; + case amd64_sys_rt_sigreturn: + if (amd64_all_but_ip_registers_record (regcache)) + return -1; + return 0; + break; - regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg3, - &arg3); - if (arg3 =3D=3D RECORD_ARCH_GET_FS || arg3 =3D=3D RECORD_ARCH_GET_GS) - { - CORE_ADDR addr; + case amd64_sys_arch_prctl: + if (syscall_native =3D=3D amd64_sys_arch_prctl) + { + ULONGEST arg3; - regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.arg2, - &addr); - if (record_arch_list_add_mem (addr, - amd64_linux_record_tdep.size_ulong)) - return -1; - } - goto record_regs; + regcache_raw_read_unsigned (regcache, amd64_linux_record_tdep.ar= g3, + &arg3); + if (arg3 =3D=3D RECORD_ARCH_GET_FS || arg3 =3D=3D RECORD_ARCH_GE= T_GS) + { + CORE_ADDR addr; + + regcache_raw_read_unsigned (regcache, + amd64_linux_record_tdep.arg2, + &addr); + if (record_arch_list_add_mem (addr, + amd64_linux_record_tdep.size_ulong)) + return -1; + } + goto record_regs; + } + break; } + syscall_gdb =3D amd64_canonicalize_syscall (syscall_native); + if (syscall_gdb < 0) { printf_unfiltered (_("Process record and replay target doesn't " @@ -1137,6 +1192,44 @@ amd64_linux_syscall_record (struct regca if (record_arch_list_add_reg (regcache, AMD64_R11_REGNUM)) return -1; + return 0; +} + +#define AMD64_LINUX_redzone 128 +#define AMD64_LINUX_xstate 512 +#define AMD64_LINUX_frame_size 560 + +int +amd64_linux_record_signal (struct gdbarch *gdbarch, + struct regcache *regcache, + enum target_signal signal) +{ + ULONGEST rsp; + + if (amd64_all_but_ip_registers_record (regcache)) + return -1; + + if (record_arch_list_add_reg (regcache, AMD64_RIP_REGNUM)) + return -1; + + /* Record the change in the stack. */ + regcache_raw_read_unsigned (regcache, AMD64_RSP_REGNUM, &rsp); + /* redzone + sp -=3D 128; */ + rsp -=3D AMD64_LINUX_redzone; + /* This is for xstate. + sp -=3D sizeof (struct _fpstate); */ + rsp -=3D AMD64_LINUX_xstate; + /* This is for frame_size. + sp -=3D sizeof (struct rt_sigframe); */ + rsp -=3D AMD64_LINUX_frame_size; + if (record_arch_list_add_mem (rsp, AMD64_LINUX_redzone + + AMD64_LINUX_xstate + + AMD64_LINUX_frame_size)) + return -1; + + if (record_arch_list_add_end ()) + return -1; return 0; } @@ -1187,6 +1280,7 @@ amd64_linux_init_abi (struct gdbarch_inf set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type); set_gdbarch_process_record (gdbarch, i386_process_record); + set_gdbarch_process_record_signal (gdbarch, amd64_linux_record_signal); /* Initialize the amd64_linux_record_tdep. */ /* These values are the size of the type that will be used in a system --000e0cd32e2e074f9b04732f8669 Content-Type: text/plain; charset=US-ASCII; name="prec-support-signal-amd64-linux.txt" Content-Disposition: attachment; filename="prec-support-signal-amd64-linux.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzeuta1o0 Content-length: 8524 LS0tCiBhbWQ2NC1saW51eC10ZGVwLmMgfCAgMTQyICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygt KQoKLS0tIGEvYW1kNjQtbGludXgtdGRlcC5jCisrKyBiL2FtZDY0LWxpbnV4 LXRkZXAuYwpAQCAtMjYzLDE2ICsyNjMsNDggQEAgYW1kNjRfbGludXhfd3Jp dGVfcGMgKHN0cnVjdCByZWdjYWNoZSAqcgogICByZWdjYWNoZV9jb29rZWRf d3JpdGVfdW5zaWduZWQgKHJlZ2NhY2hlLCBBTUQ2NF9MSU5VWF9PUklHX1JB WF9SRUdOVU0sIC0xKTsKIH0KIAotLyogUGFyc2UgdGhlIGFyZ3VtZW50cyBv ZiBjdXJyZW50IHN5c3RlbSBjYWxsIGluc3RydWN0aW9uIGFuZCByZWNvcmQK LSAgIHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBhbmQgbWVtb3J5IHRo YXQgd2lsbCBiZSBjaGFuZ2VkIGludG8KLSAgICJyZWNvcmRfYXJjaF9saXN0 Ii4gIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgInN5c2NhbGwiLgotCi0gICBSZXR1 cm4gLTEgaWYgc29tZXRoaW5nIHdyb25nLiAgKi8KKy8qIFJlY29yZCBhbGwg cmVnaXN0ZXJzIGJ1dCBJUCByZWdpc3RlciBmb3IgcHJvY2Vzcy1yZWNvcmQu ICAqLwogCi1zdGF0aWMgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwIGFtZDY0 X2xpbnV4X3JlY29yZF90ZGVwOworc3RhdGljIGludAorYW1kNjRfYWxsX2J1 dF9pcF9yZWdpc3RlcnNfcmVjb3JkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlKQoreworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdj YWNoZSwgQU1ENjRfUkFYX1JFR05VTSkpCisgICAgcmV0dXJuIC0xOworICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgQU1ENjRf UkNYX1JFR05VTSkpCisgICAgcmV0dXJuIC0xOworICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgQU1ENjRfUkRYX1JFR05VTSkp CisgICAgcmV0dXJuIC0xOworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChyZWdjYWNoZSwgQU1ENjRfUkJYX1JFR05VTSkpCisgICAgcmV0dXJu IC0xOworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNo ZSwgQU1ENjRfUlNQX1JFR05VTSkpCisgICAgcmV0dXJuIC0xOworICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgQU1ENjRfUkJQ X1JFR05VTSkpCisgICAgcmV0dXJuIC0xOworICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChyZWdjYWNoZSwgQU1ENjRfUlNJX1JFR05VTSkpCisg ICAgcmV0dXJuIC0xOworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChyZWdjYWNoZSwgQU1ENjRfUkRJX1JFR05VTSkpCisgICAgcmV0dXJuIC0x OworICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdjYWNoZSwg QU1ENjRfUjhfUkVHTlVNKSkKKyAgICByZXR1cm4gLTE7CisgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBBTUQ2NF9SOV9SRUdO VU0pKQorICAgIHJldHVybiAtMTsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAocmVnY2FjaGUsIEFNRDY0X1IxMF9SRUdOVU0pKQorICAgIHJl dHVybiAtMTsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVn Y2FjaGUsIEFNRDY0X1IxMV9SRUdOVU0pKQorICAgIHJldHVybiAtMTsKKyAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIEFNRDY0 X1IxMl9SRUdOVU0pKQorICAgIHJldHVybiAtMTsKKyAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIEFNRDY0X1IxM19SRUdOVU0p KQorICAgIHJldHVybiAtMTsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAocmVnY2FjaGUsIEFNRDY0X1IxNF9SRUdOVU0pKQorICAgIHJldHVy biAtMTsKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2Fj aGUsIEFNRDY0X1IxNV9SRUdOVU0pKQorICAgIHJldHVybiAtMTsKKyAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnY2FjaGUsIEFNRDY0X0VG TEFHU19SRUdOVU0pKQorICAgIHJldHVybiAtMTsKIAotI2RlZmluZSBSRUNP UkRfQVJDSF9HRVRfRlMJMHgxMDAzCi0jZGVmaW5lIFJFQ09SRF9BUkNIX0dF VF9HUwkweDEwMDQKKyAgcmV0dXJuIDA7Cit9CiAKIC8qIGFtZDY0X2Nhbm9u aWNhbGl6ZV9zeXNjYWxsIG1hcHMgZnJvbSB0aGUgbmF0aXZlIGFtZDY0IExp bnV4IHNldCAKICAgIG9mIHN5c2NhbGwgaWRzIGludG8gYSBjYW5vbmljYWwg c2V0IG9mIHN5c2NhbGwgaWRzIHVzZWQgYnkgCkBAIC0xMDg1LDYgKzExMTcs MTcgQEAgYW1kNjRfY2Fub25pY2FsaXplX3N5c2NhbGwgKGVudW0gYW1kNjRf cwogICB9CiB9CiAKKy8qIFBhcnNlIHRoZSBhcmd1bWVudHMgb2YgY3VycmVu dCBzeXN0ZW0gY2FsbCBpbnN0cnVjdGlvbiBhbmQgcmVjb3JkCisgICB0aGUg dmFsdWVzIG9mIHRoZSByZWdpc3RlcnMgYW5kIG1lbW9yeSB0aGF0IHdpbGwg YmUgY2hhbmdlZCBpbnRvCisgICAicmVjb3JkX2FyY2hfbGlzdCIuICBUaGlz IGluc3RydWN0aW9uIGlzICJzeXNjYWxsIi4KKworICAgUmV0dXJuIC0xIGlm IHNvbWV0aGluZyB3cm9uZy4gICovCisKK3N0YXRpYyBzdHJ1Y3QgbGludXhf cmVjb3JkX3RkZXAgYW1kNjRfbGludXhfcmVjb3JkX3RkZXA7CisKKyNkZWZp bmUgUkVDT1JEX0FSQ0hfR0VUX0ZTCTB4MTAwMworI2RlZmluZSBSRUNPUkRf QVJDSF9HRVRfR1MJMHgxMDA0CisKIHN0YXRpYyBpbnQKIGFtZDY0X2xpbnV4 X3N5c2NhbGxfcmVjb3JkIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlKQog ewpAQCAtMTA5NCwyNyArMTEzNywzOSBAQCBhbWQ2NF9saW51eF9zeXNjYWxs X3JlY29yZCAoc3RydWN0IHJlZ2NhCiAKICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCBBTUQ2NF9SQVhfUkVHTlVNLCAmc3lzY2Fs bF9uYXRpdmUpOwogCi0gIHN5c2NhbGxfZ2RiID0gYW1kNjRfY2Fub25pY2Fs aXplX3N5c2NhbGwgKHN5c2NhbGxfbmF0aXZlKTsKLQotICBpZiAoc3lzY2Fs bF9uYXRpdmUgPT0gYW1kNjRfc3lzX2FyY2hfcHJjdGwpIAorICBzd2l0Y2gg KHN5c2NhbGxfbmF0aXZlKQogICAgIHsKLSAgICAgIFVMT05HRVNUIGFyZzM7 CisgICAgY2FzZSBhbWQ2NF9zeXNfcnRfc2lncmV0dXJuOgorICAgICAgaWYg KGFtZDY0X2FsbF9idXRfaXBfcmVnaXN0ZXJzX3JlY29yZCAocmVnY2FjaGUp KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZXR1cm4gMDsKKyAgICAg IGJyZWFrOwogCi0gICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIGFtZDY0X2xpbnV4X3JlY29yZF90ZGVwLmFyZzMsCi0JCQkJ ICAmYXJnMyk7Ci0gICAgICBpZiAoYXJnMyA9PSBSRUNPUkRfQVJDSF9HRVRf RlMgfHwgYXJnMyA9PSBSRUNPUkRfQVJDSF9HRVRfR1MpCi0gICAgICB7Ci0J Q09SRV9BRERSIGFkZHI7CisgICAgY2FzZSBhbWQ2NF9zeXNfYXJjaF9wcmN0 bDoKKyAgICAgIGlmIChzeXNjYWxsX25hdGl2ZSA9PSBhbWQ2NF9zeXNfYXJj aF9wcmN0bCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIGFyZzM7 CiAKLQlyZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIGFt ZDY0X2xpbnV4X3JlY29yZF90ZGVwLmFyZzIsCi0JCQkJICAgICZhZGRyKTsK LQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCAKLQkJCQkg ICAgICBhbWQ2NF9saW51eF9yZWNvcmRfdGRlcC5zaXplX3Vsb25nKSkKLQkg IHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIGdvdG8gcmVjb3JkX3JlZ3M7 CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCBhbWQ2NF9saW51eF9yZWNvcmRfdGRlcC5hcmczLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJnMyk7CisgICAgICAg ICAgaWYgKGFyZzMgPT0gUkVDT1JEX0FSQ0hfR0VUX0ZTIHx8IGFyZzMgPT0g UkVDT1JEX0FSQ0hfR0VUX0dTKQorICAgICAgICAgICAgeworCSAgICAgIENP UkVfQUREUiBhZGRyOworCisJICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYW1kNjRfbGludXhfcmVjb3JkX3RkZXAuYXJnMiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZh ZGRyKTsKKwkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChh ZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhbWQ2NF9saW51eF9yZWNvcmRfdGRlcC5zaXplX3Vsb25nKSkKKyAg ICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAg ICAgICAgZ290byByZWNvcmRfcmVnczsKKyAgICAgICAgfQorICAgICAgYnJl YWs7CiAgICAgfQogCisgIHN5c2NhbGxfZ2RiID0gYW1kNjRfY2Fub25pY2Fs aXplX3N5c2NhbGwgKHN5c2NhbGxfbmF0aXZlKTsKKwogICBpZiAoc3lzY2Fs bF9nZGIgPCAwKQogICAgIHsKICAgICAgIHByaW50Zl91bmZpbHRlcmVkIChf KCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIK QEAgLTExMzcsNiArMTE5Miw0NCBAQCBhbWQ2NF9saW51eF9zeXNjYWxsX3Jl Y29yZCAoc3RydWN0IHJlZ2NhCiAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZ2NhY2hlLCBBTUQ2NF9SMTFfUkVHTlVNKSkKICAgICByZXR1 cm4gLTE7CiAKKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQU1ENjRfTElO VVhfcmVkem9uZQkxMjgKKyNkZWZpbmUgQU1ENjRfTElOVVhfeHN0YXRlCTUx MgorI2RlZmluZSBBTUQ2NF9MSU5VWF9mcmFtZV9zaXplCTU2MAorCitpbnQK K2FtZDY0X2xpbnV4X3JlY29yZF9zaWduYWwgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGVudW0gdGFyZ2V0X3NpZ25hbCBzaWduYWwpCit7CisgIFVMT05HRVNUIHJz cDsKKworICBpZiAoYW1kNjRfYWxsX2J1dF9pcF9yZWdpc3RlcnNfcmVjb3Jk IChyZWdjYWNoZSkpCisgICAgcmV0dXJuIC0xOworCisgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKHJlZ2NhY2hlLCBBTUQ2NF9SSVBfUkVHTlVN KSkKKyAgICByZXR1cm4gLTE7CisKKyAgLyogUmVjb3JkIHRoZSBjaGFuZ2Ug aW4gdGhlIHN0YWNrLiAgKi8KKyAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCBBTUQ2NF9SU1BfUkVHTlVNLCAmcnNwKTsKKyAgLyog cmVkem9uZQorICAgICBzcCAtPSAxMjg7ICovCisgIHJzcCAtPSBBTUQ2NF9M SU5VWF9yZWR6b25lOworICAvKiBUaGlzIGlzIGZvciB4c3RhdGUuCisgICAg IHNwIC09IHNpemVvZiAoc3RydWN0IF9mcHN0YXRlKTsgICovCisgIHJzcCAt PSBBTUQ2NF9MSU5VWF94c3RhdGU7CisgIC8qIFRoaXMgaXMgZm9yIGZyYW1l X3NpemUuCisgICAgIHNwIC09IHNpemVvZiAoc3RydWN0IHJ0X3NpZ2ZyYW1l KTsgICovCisgIHJzcCAtPSBBTUQ2NF9MSU5VWF9mcmFtZV9zaXplOworICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChyc3AsIEFNRDY0X0xJTlVY X3JlZHpvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArIEFNRDY0X0xJTlVYX3hzdGF0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsgQU1ENjRfTElOVVhfZnJhbWVfc2l6ZSkpCisg ICAgcmV0dXJuIC0xOworCisgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9l bmQgKCkpCisgICAgcmV0dXJuIC0xOwogCiAgIHJldHVybiAwOwogfQpAQCAt MTE4Nyw2ICsxMjgwLDcgQEAgYW1kNjRfbGludXhfaW5pdF9hYmkgKHN0cnVj dCBnZGJhcmNoX2luZgogICBzZXRfZ2RiYXJjaF9nZXRfc2lnaW5mb190eXBl IChnZGJhcmNoLCBsaW51eF9nZXRfc2lnaW5mb190eXBlKTsKIAogICBzZXRf Z2RiYXJjaF9wcm9jZXNzX3JlY29yZCAoZ2RiYXJjaCwgaTM4Nl9wcm9jZXNz X3JlY29yZCk7CisgIHNldF9nZGJhcmNoX3Byb2Nlc3NfcmVjb3JkX3NpZ25h bCAoZ2RiYXJjaCwgYW1kNjRfbGludXhfcmVjb3JkX3NpZ25hbCk7CiAKICAg LyogSW5pdGlhbGl6ZSB0aGUgYW1kNjRfbGludXhfcmVjb3JkX3RkZXAuICAq LwogICAvKiBUaGVzZSB2YWx1ZXMgYXJlIHRoZSBzaXplIG9mIHRoZSB0eXBl IHRoYXQgd2lsbCBiZSB1c2VkIGluIGEgc3lzdGVtCg== --000e0cd32e2e074f9b04732f8669--