From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16513 invoked by alias); 16 Jul 2009 07:45:01 -0000 Received: (qmail 16499 invoked by uid 22791); 16 Jul 2009 07:44:59 -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 wf-out-1314.google.com (HELO wf-out-1314.google.com) (209.85.200.174) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 16 Jul 2009 07:44:47 +0000 Received: by wf-out-1314.google.com with SMTP id 23so1469499wfg.24 for ; Thu, 16 Jul 2009 00:44:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.234.16 with SMTP id g16mr2151697wfh.310.1247730285071; Thu, 16 Jul 2009 00:44:45 -0700 (PDT) In-Reply-To: References: <4A4EA339.90109@vmware.com> <4A5A20F1.5080208@vmware.com> <4A5D2C02.7090201@vmware.com> From: Hui Zhu Date: Thu, 16 Jul 2009 11:37:00 -0000 Message-ID: Subject: Re: [RFA] improved handling of shared lib calls (reverse 2/2) To: Michael Snyder , "drow@false.org" Cc: "gdb-patches@sourceware.org" Content-Type: multipart/mixed; boundary=000e0cd242626acd09046ecdd87f 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-07/txt/msg00406.txt.bz2 --000e0cd242626acd09046ecdd87f Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 10827 On Wed, Jul 15, 2009 at 16:33, Hui Zhu wrote: > I try this patch with cvs-head and program: > void foo() { > =A0 =A0return; > } > > int main() { > > =A0 =A0 =A0 =A0foo(); // 1 > =A0 =A0 =A0 =A0foo(); // 2 > =A0 =A0 =A0 =A0foo(); // 3 > > =A0 =A0 =A0 =A0return 0; > } > in ubuntu i386. > And test with reverse testsuite. > Everything is OK. > > Thanks, > Hui > > > On Wed, Jul 15, 2009 at 09:08, Michael Snyder wrote: >> And now this one? >> >> Michael Snyder wrote: >>> >>> Now how about this one? >>> >>> Michael Snyder wrote: >>>> >>>> This change depends on the previous one (epilogue unwinder for i386, >>>> http://sourceware.org/ml/gdb-patches/2009-07/msg00099.html). >>>> >>>> With the frame unwinder working properly, we can remove the >>>> special case code in the test for "check for subroutine call" >>>> in handle_inferior_event. >>>> >>>> Of course that reveals some hidden problems with shared library >>>> calls, so this patch also addresses those. >>>> >>>> Michael >>>> >>>> >>>> >>>> ----------------------------------------------------------------------= -- >>>> >>>> 2009-07-03 =A0Michael Snyder =A0 >>>> >>>> =A0 =A0 =A0 =A0* infrun.c (handle_inferior_event): Remove an execution= _direction >>>> =A0 =A0 =A0 =A0check in the "check for subroutine calls" test, and add= some >>>> =A0additional handling for reverse-stepping through shared libraries. >>>> >>>> Index: infrun.c >>>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >>>> RCS file: /cvs/src/src/gdb/infrun.c,v >>>> retrieving revision 1.400 >>>> diff -u -p -r1.400 infrun.c >>>> --- infrun.c =A0 =A02 Jul 2009 17:21:06 -0000 =A0 =A0 =A0 1.400 >>>> +++ infrun.c =A0 =A04 Jul 2009 00:27:53 -0000 >>>> @@ -3776,9 +3776,8 @@ infrun: not switching back to stepped th >>>> =A0 =A0 =A0previous frame must have valid frame IDs. =A0*/ >>>> =A0 if (!frame_id_eq (get_stack_frame_id (frame), >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ecs->event_thread->step_stack_f= rame_id) >>>> - =A0 =A0 =A0&& (frame_id_eq (frame_unwind_caller_id (frame), >>>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ecs->event_thread->step_s= tack_frame_id) >>>> - =A0 =A0 =A0 =A0 || execution_direction =3D=3D EXEC_REVERSE)) >>>> + =A0 =A0 =A0&& frame_id_eq (frame_unwind_caller_id (frame), >>>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ecs->event_thread->step_stac= k_frame_id)) >>>> =A0 =A0 { >>>> =A0 =A0 =A0 CORE_ADDR real_stop_pc; >>>> =A0@@ -3806,6 +3805,7 @@ infrun: not switching back to stepped th >>>> =A0 =A0 =A0 /* Reverse stepping through solib trampolines. =A0*/ >>>> =A0 =A0 =A0 =A0 if (execution_direction =3D=3D EXEC_REVERSE >>>> + =A0 =A0 =A0 =A0 && ecs->event_thread->step_over_calls !=3D STEP_OVER= _NONE >>>> =A0 =A0 =A0 =A0 =A0&& (gdbarch_skip_trampoline_code (gdbarch, frame, s= top_pc) >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0|| (ecs->stop_func_start =3D=3D 0 >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0&& in_solib_dynsym_resolve_code (st= op_pc)))) >>>> @@ -3923,6 +3923,38 @@ infrun: not switching back to stepped th >>>> =A0 =A0 =A0 return; >>>> =A0 =A0 } >>>> =A0+ =A0/* Reverse stepping through solib trampolines. =A0*/ >>>> + >>>> + =A0if (execution_direction =3D=3D EXEC_REVERSE >>>> + =A0 =A0 =A0&& ecs->event_thread->step_over_calls !=3D STEP_OVER_NONE) >>>> + =A0 =A0{ >>>> + =A0 =A0 =A0if (gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc) >>>> + =A0 =A0 =A0 =A0 || (ecs->stop_func_start =3D=3D 0 >>>> + =A0 =A0 =A0 =A0 =A0 =A0 && in_solib_dynsym_resolve_code (stop_pc))) >>>> + =A0 =A0 =A0 { >>>> + =A0 =A0 =A0 =A0 /* Any solib trampoline code can be handled in rever= se >>>> + =A0 =A0 =A0 =A0 =A0 =A0by simply continuing to single-step. =A0We ha= ve already >>>> + =A0 =A0 =A0 =A0 =A0 =A0executed the solib function (backwards), and = a few + >>>> =A0 =A0steps will take us back through the trampoline to the >>>> + =A0 =A0 =A0 =A0 =A0 =A0caller. =A0*/ >>>> + =A0 =A0 =A0 =A0 keep_going (ecs); >>>> + =A0 =A0 =A0 =A0 return; >>>> + =A0 =A0 =A0 } >>>> + =A0 =A0 =A0else if (in_solib_dynsym_resolve_code (stop_pc)) >>>> + =A0 =A0 =A0 { >>>> + =A0 =A0 =A0 =A0 /* Stepped backward into the solib dynsym resolver. >>>> + =A0 =A0 =A0 =A0 =A0 =A0Set a breakpoint at its start and continue, t= hen >>>> + =A0 =A0 =A0 =A0 =A0 =A0one more step will take us out. =A0*/ >>>> + =A0 =A0 =A0 =A0 struct symtab_and_line sr_sal; >>>> + =A0 =A0 =A0 =A0 init_sal (&sr_sal); >>>> + =A0 =A0 =A0 =A0 sr_sal.pc =3D ecs->stop_func_start; >>>> + =A0 =A0 =A0 =A0 insert_step_resume_breakpoint_at_sal (gdbarch, + >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 sr_sal= , null_frame_id); >>>> + =A0 =A0 =A0 =A0 keep_going (ecs); >>>> + =A0 =A0 =A0 =A0 return; >>>> + =A0 =A0 =A0 } >>>> + =A0 =A0} >>>> + >>>> =A0 /* If we're in the return path from a shared library trampoline, >>>> =A0 =A0 =A0we want to proceed through the trampoline when stepping. = =A0*/ >>>> =A0 if (gdbarch_in_solib_return_trampoline (gdbarch, >>> >>> >> >> > In AMD64, This patch cannot pass the "solib-reverse.exp" even if with the "set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);" patch. And cannot pass the: void foo() { return; } int main() { foo(); // 1 foo(); // 2 foo(); // 3 return 0; } I told that we can make " Add step_stack_prev_frame_id" patch together with this patch. I make update the patch. It can handle the solib-reverse.exp and foo. I think it let us don't worry about the arch code. What do you think about it? Thanks, Hui 2009-07-16 Michael Snyder Hui Zhu * gdbthread.h (thread_info): Add step_stack_prev_frame_id to save the prev_frame_id when we can get the prev_frame. * infrun.c (inferior_status): Ditto. (save_inferior_status): Ditto. (restore_inferior_status): Ditto. (set_step_info): Get the step_stack_prev_frame_id. (handle_inferior_event): Use the step_stack_prev_frame_id make sure inferior stepped into subroutine or not. Add some additional handling for reverse-stepping through shared libraries. --- gdbthread.h | 3 +++ infrun.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) --- a/gdbthread.h +++ b/gdbthread.h @@ -88,6 +88,9 @@ struct thread_info any inlined frames). */ struct frame_id step_stack_frame_id; + /* The prev frame id of step_stack_frame_id. */ + struct frame_id step_stack_prev_frame_id; + int current_line; struct symtab *current_symtab; --- a/infrun.c +++ b/infrun.c @@ -2153,10 +2153,17 @@ void set_step_info (struct frame_info *frame, struct symtab_and_line sal) { struct thread_info *tp =3D inferior_thread (); + struct frame_info *prev_frame; tp->step_frame_id =3D get_frame_id (frame); tp->step_stack_frame_id =3D get_stack_frame_id (frame); + prev_frame =3D get_prev_frame (frame); + if (prev_frame) + tp->step_stack_prev_frame_id =3D get_stack_frame_id (prev_frame); + else + tp->step_stack_prev_frame_id =3D null_frame_id; + tp->current_symtab =3D sal.symtab; tp->current_line =3D sal.line; } @@ -3777,8 +3784,10 @@ infrun: not switching back to stepped th if (!frame_id_eq (get_stack_frame_id (frame), ecs->event_thread->step_stack_frame_id) && (frame_id_eq (frame_unwind_caller_id (frame), - ecs->event_thread->step_stack_frame_id) - || execution_direction =3D=3D EXEC_REVERSE)) + ecs->event_thread->step_stack_frame_id) + || (execution_direction =3D=3D EXEC_REVERSE + && !frame_id_eq (get_stack_frame_id (frame), + ecs->event_thread->step_stack_prev_frame_i= d)))) { CORE_ADDR real_stop_pc; @@ -3806,6 +3815,7 @@ infrun: not switching back to stepped th /* Reverse stepping through solib trampolines. */ if (execution_direction =3D=3D EXEC_REVERSE + && ecs->event_thread->step_over_calls !=3D STEP_OVER_NONE && (gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc) || (ecs->stop_func_start =3D=3D 0 && in_solib_dynsym_resolve_code (stop_pc)))) @@ -3923,6 +3933,38 @@ infrun: not switching back to stepped th return; } + /* Reverse stepping through solib trampolines. */ + + if (execution_direction =3D=3D EXEC_REVERSE + && ecs->event_thread->step_over_calls !=3D STEP_OVER_NONE) + { + if (gdbarch_skip_trampoline_code (gdbarch, frame, stop_pc) + || (ecs->stop_func_start =3D=3D 0 + && in_solib_dynsym_resolve_code (stop_pc))) + { + /* Any solib trampoline code can be handled in reverse + by simply continuing to single-step. We have already + executed the solib function (backwards), and a few + steps will take us back through the trampoline to the + caller. */ + keep_going (ecs); + return; + } + else if (in_solib_dynsym_resolve_code (stop_pc)) + { + /* Stepped backward into the solib dynsym resolver. + Set a breakpoint at its start and continue, then + one more step will take us out. */ + struct symtab_and_line sr_sal; + init_sal (&sr_sal); + sr_sal.pc =3D ecs->stop_func_start; + insert_step_resume_breakpoint_at_sal (gdbarch, + sr_sal, null_frame_id); + keep_going (ecs); + return; + } + } + /* If we're in the return path from a shared library trampoline, we want to proceed through the trampoline when stepping. */ if (gdbarch_in_solib_return_trampoline (gdbarch, @@ -5388,6 +5430,7 @@ struct inferior_status CORE_ADDR step_range_end; struct frame_id step_frame_id; struct frame_id step_stack_frame_id; + struct frame_id step_stack_prev_frame_id; enum step_over_calls_kind step_over_calls; CORE_ADDR step_resume_break_address; int stop_after_trap; @@ -5418,6 +5461,7 @@ save_inferior_status (void) inf_status->step_range_end =3D tp->step_range_end; inf_status->step_frame_id =3D tp->step_frame_id; inf_status->step_stack_frame_id =3D tp->step_stack_frame_id; + inf_status->step_stack_prev_frame_id =3D tp->step_stack_prev_frame_id; inf_status->step_over_calls =3D tp->step_over_calls; inf_status->stop_after_trap =3D stop_after_trap; inf_status->stop_soon =3D inf->stop_soon; @@ -5472,6 +5516,7 @@ restore_inferior_status (struct inferior tp->step_range_end =3D inf_status->step_range_end; tp->step_frame_id =3D inf_status->step_frame_id; tp->step_stack_frame_id =3D inf_status->step_stack_frame_id; + tp->step_stack_prev_frame_id =3D inf_status->step_stack_prev_frame_id; tp->step_over_calls =3D inf_status->step_over_calls; stop_after_trap =3D inf_status->stop_after_trap; inf->stop_soon =3D inf_status->stop_soon; --000e0cd242626acd09046ecdd87f Content-Type: text/plain; charset=US-ASCII; name="solib.txt" Content-Disposition: attachment; filename="solib.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fx76hk850 Content-length: 6129 LS0tCiBnZGJ0aHJlYWQuaCB8ICAgIDMgKysrCiBpbmZydW4uYyAgICB8ICAg NDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQoKLS0tIGEvZ2RidGhyZWFkLmgKKysrIGIvZ2RidGhy ZWFkLmgKQEAgLTg4LDYgKzg4LDkgQEAgc3RydWN0IHRocmVhZF9pbmZvCiAg ICAgIGFueSBpbmxpbmVkIGZyYW1lcykuICAqLwogICBzdHJ1Y3QgZnJhbWVf aWQgc3RlcF9zdGFja19mcmFtZV9pZDsKIAorICAvKiBUaGUgcHJldiBmcmFt ZSBpZCBvZiBzdGVwX3N0YWNrX2ZyYW1lX2lkLiAgKi8KKyAgc3RydWN0IGZy YW1lX2lkIHN0ZXBfc3RhY2tfcHJldl9mcmFtZV9pZDsKKwogICBpbnQgY3Vy cmVudF9saW5lOwogICBzdHJ1Y3Qgc3ltdGFiICpjdXJyZW50X3N5bXRhYjsK IAotLS0gYS9pbmZydW4uYworKysgYi9pbmZydW4uYwpAQCAtMjE1MywxMCAr MjE1MywxNyBAQCB2b2lkCiBzZXRfc3RlcF9pbmZvIChzdHJ1Y3QgZnJhbWVf aW5mbyAqZnJhbWUsIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2FsKQogewog ICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gaW5mZXJpb3JfdGhyZWFkICgp OworICBzdHJ1Y3QgZnJhbWVfaW5mbyAqcHJldl9mcmFtZTsKIAogICB0cC0+ c3RlcF9mcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZnJhbWUpOwogICB0cC0+ c3RlcF9zdGFja19mcmFtZV9pZCA9IGdldF9zdGFja19mcmFtZV9pZCAoZnJh bWUpOwogCisgIHByZXZfZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUp OworICBpZiAocHJldl9mcmFtZSkKKyAgICB0cC0+c3RlcF9zdGFja19wcmV2 X2ZyYW1lX2lkID0gZ2V0X3N0YWNrX2ZyYW1lX2lkIChwcmV2X2ZyYW1lKTsK KyAgZWxzZQorICAgIHRwLT5zdGVwX3N0YWNrX3ByZXZfZnJhbWVfaWQgPSBu dWxsX2ZyYW1lX2lkOworCiAgIHRwLT5jdXJyZW50X3N5bXRhYiA9IHNhbC5z eW10YWI7CiAgIHRwLT5jdXJyZW50X2xpbmUgPSBzYWwubGluZTsKIH0KQEAg LTM3NzcsOCArMzc4NCwxMCBAQCBpbmZydW46IG5vdCBzd2l0Y2hpbmcgYmFj ayB0byBzdGVwcGVkIHRoCiAgIGlmICghZnJhbWVfaWRfZXEgKGdldF9zdGFj a19mcmFtZV9pZCAoZnJhbWUpLAogCQkgICAgZWNzLT5ldmVudF90aHJlYWQt PnN0ZXBfc3RhY2tfZnJhbWVfaWQpCiAgICAgICAmJiAoZnJhbWVfaWRfZXEg KGZyYW1lX3Vud2luZF9jYWxsZXJfaWQgKGZyYW1lKSwKLQkJICAgICAgIGVj cy0+ZXZlbnRfdGhyZWFkLT5zdGVwX3N0YWNrX2ZyYW1lX2lkKQotCSAgfHwg ZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpKQorCQkgICAg ICBlY3MtPmV2ZW50X3RocmVhZC0+c3RlcF9zdGFja19mcmFtZV9pZCkKKwkg IHx8IChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQorICAg ICAgICAgICAgICAgJiYgIWZyYW1lX2lkX2VxIChnZXRfc3RhY2tfZnJhbWVf aWQgKGZyYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZWNzLT5ldmVudF90aHJlYWQtPnN0ZXBfc3RhY2tfcHJldl9mcmFtZV9pZCkp KSkKICAgICB7CiAgICAgICBDT1JFX0FERFIgcmVhbF9zdG9wX3BjOwogCkBA IC0zODA2LDYgKzM4MTUsNyBAQCBpbmZydW46IG5vdCBzd2l0Y2hpbmcgYmFj ayB0byBzdGVwcGVkIHRoCiAgICAgICAvKiBSZXZlcnNlIHN0ZXBwaW5nIHRo cm91Z2ggc29saWIgdHJhbXBvbGluZXMuICAqLwogCiAgICAgICBpZiAoZXhl Y3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UKKwkgICYmIGVjcy0+ ZXZlbnRfdGhyZWFkLT5zdGVwX292ZXJfY2FsbHMgIT0gU1RFUF9PVkVSX05P TkUKIAkgICYmIChnZGJhcmNoX3NraXBfdHJhbXBvbGluZV9jb2RlIChnZGJh cmNoLCBmcmFtZSwgc3RvcF9wYykKIAkgICAgICB8fCAoZWNzLT5zdG9wX2Z1 bmNfc3RhcnQgPT0gMAogCQkgICYmIGluX3NvbGliX2R5bnN5bV9yZXNvbHZl X2NvZGUgKHN0b3BfcGMpKSkpCkBAIC0zOTIzLDYgKzM5MzMsMzggQEAgaW5m cnVuOiBub3Qgc3dpdGNoaW5nIGJhY2sgdG8gc3RlcHBlZCB0aAogICAgICAg cmV0dXJuOwogICAgIH0KIAorICAvKiBSZXZlcnNlIHN0ZXBwaW5nIHRocm91 Z2ggc29saWIgdHJhbXBvbGluZXMuICAqLworCisgIGlmIChleGVjdXRpb25f ZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQorICAgICAgJiYgZWNzLT5ldmVu dF90aHJlYWQtPnN0ZXBfb3Zlcl9jYWxscyAhPSBTVEVQX09WRVJfTk9ORSkK KyAgICB7CisgICAgICBpZiAoZ2RiYXJjaF9za2lwX3RyYW1wb2xpbmVfY29k ZSAoZ2RiYXJjaCwgZnJhbWUsIHN0b3BfcGMpCisJICB8fCAoZWNzLT5zdG9w X2Z1bmNfc3RhcnQgPT0gMAorCSAgICAgICYmIGluX3NvbGliX2R5bnN5bV9y ZXNvbHZlX2NvZGUgKHN0b3BfcGMpKSkKKwl7CisJICAvKiBBbnkgc29saWIg dHJhbXBvbGluZSBjb2RlIGNhbiBiZSBoYW5kbGVkIGluIHJldmVyc2UKKwkg ICAgIGJ5IHNpbXBseSBjb250aW51aW5nIHRvIHNpbmdsZS1zdGVwLiAgV2Ug aGF2ZSBhbHJlYWR5CisJICAgICBleGVjdXRlZCB0aGUgc29saWIgZnVuY3Rp b24gKGJhY2t3YXJkcyksIGFuZCBhIGZldworCSAgICAgc3RlcHMgd2lsbCB0 YWtlIHVzIGJhY2sgdGhyb3VnaCB0aGUgdHJhbXBvbGluZSB0byB0aGUKKwkg ICAgIGNhbGxlci4gICovCisJICBrZWVwX2dvaW5nIChlY3MpOworCSAgcmV0 dXJuOworCX0KKyAgICAgIGVsc2UgaWYgKGluX3NvbGliX2R5bnN5bV9yZXNv bHZlX2NvZGUgKHN0b3BfcGMpKQorCXsKKwkgIC8qIFN0ZXBwZWQgYmFja3dh cmQgaW50byB0aGUgc29saWIgZHluc3ltIHJlc29sdmVyLgorCSAgICAgU2V0 IGEgYnJlYWtwb2ludCBhdCBpdHMgc3RhcnQgYW5kIGNvbnRpbnVlLCB0aGVu CisJICAgICBvbmUgbW9yZSBzdGVwIHdpbGwgdGFrZSB1cyBvdXQuICAqLwor CSAgc3RydWN0IHN5bXRhYl9hbmRfbGluZSBzcl9zYWw7CisJICBpbml0X3Nh bCAoJnNyX3NhbCk7CisJICBzcl9zYWwucGMgPSBlY3MtPnN0b3BfZnVuY19z dGFydDsKKwkgIGluc2VydF9zdGVwX3Jlc3VtZV9icmVha3BvaW50X2F0X3Nh bCAoZ2RiYXJjaCwKKwkJCQkJCXNyX3NhbCwgbnVsbF9mcmFtZV9pZCk7CisJ ICBrZWVwX2dvaW5nIChlY3MpOworCSAgcmV0dXJuOworCX0KKyAgICB9CisK ICAgLyogSWYgd2UncmUgaW4gdGhlIHJldHVybiBwYXRoIGZyb20gYSBzaGFy ZWQgbGlicmFyeSB0cmFtcG9saW5lLAogICAgICB3ZSB3YW50IHRvIHByb2Nl ZWQgdGhyb3VnaCB0aGUgdHJhbXBvbGluZSB3aGVuIHN0ZXBwaW5nLiAgKi8K ICAgaWYgKGdkYmFyY2hfaW5fc29saWJfcmV0dXJuX3RyYW1wb2xpbmUgKGdk YmFyY2gsCkBAIC01Mzg4LDYgKzU0MzAsNyBAQCBzdHJ1Y3QgaW5mZXJpb3Jf c3RhdHVzCiAgIENPUkVfQUREUiBzdGVwX3JhbmdlX2VuZDsKICAgc3RydWN0 IGZyYW1lX2lkIHN0ZXBfZnJhbWVfaWQ7CiAgIHN0cnVjdCBmcmFtZV9pZCBz dGVwX3N0YWNrX2ZyYW1lX2lkOworICBzdHJ1Y3QgZnJhbWVfaWQgc3RlcF9z dGFja19wcmV2X2ZyYW1lX2lkOwogICBlbnVtIHN0ZXBfb3Zlcl9jYWxsc19r aW5kIHN0ZXBfb3Zlcl9jYWxsczsKICAgQ09SRV9BRERSIHN0ZXBfcmVzdW1l X2JyZWFrX2FkZHJlc3M7CiAgIGludCBzdG9wX2FmdGVyX3RyYXA7CkBAIC01 NDE4LDYgKzU0NjEsNyBAQCBzYXZlX2luZmVyaW9yX3N0YXR1cyAodm9pZCkK ICAgaW5mX3N0YXR1cy0+c3RlcF9yYW5nZV9lbmQgPSB0cC0+c3RlcF9yYW5n ZV9lbmQ7CiAgIGluZl9zdGF0dXMtPnN0ZXBfZnJhbWVfaWQgPSB0cC0+c3Rl cF9mcmFtZV9pZDsKICAgaW5mX3N0YXR1cy0+c3RlcF9zdGFja19mcmFtZV9p ZCA9IHRwLT5zdGVwX3N0YWNrX2ZyYW1lX2lkOworICBpbmZfc3RhdHVzLT5z dGVwX3N0YWNrX3ByZXZfZnJhbWVfaWQgPSB0cC0+c3RlcF9zdGFja19wcmV2 X2ZyYW1lX2lkOwogICBpbmZfc3RhdHVzLT5zdGVwX292ZXJfY2FsbHMgPSB0 cC0+c3RlcF9vdmVyX2NhbGxzOwogICBpbmZfc3RhdHVzLT5zdG9wX2FmdGVy X3RyYXAgPSBzdG9wX2FmdGVyX3RyYXA7CiAgIGluZl9zdGF0dXMtPnN0b3Bf c29vbiA9IGluZi0+c3RvcF9zb29uOwpAQCAtNTQ3Miw2ICs1NTE2LDcgQEAg cmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZlcmlvcgogICB0 cC0+c3RlcF9yYW5nZV9lbmQgPSBpbmZfc3RhdHVzLT5zdGVwX3JhbmdlX2Vu ZDsKICAgdHAtPnN0ZXBfZnJhbWVfaWQgPSBpbmZfc3RhdHVzLT5zdGVwX2Zy YW1lX2lkOwogICB0cC0+c3RlcF9zdGFja19mcmFtZV9pZCA9IGluZl9zdGF0 dXMtPnN0ZXBfc3RhY2tfZnJhbWVfaWQ7CisgIHRwLT5zdGVwX3N0YWNrX3By ZXZfZnJhbWVfaWQgPSBpbmZfc3RhdHVzLT5zdGVwX3N0YWNrX3ByZXZfZnJh bWVfaWQ7CiAgIHRwLT5zdGVwX292ZXJfY2FsbHMgPSBpbmZfc3RhdHVzLT5z dGVwX292ZXJfY2FsbHM7CiAgIHN0b3BfYWZ0ZXJfdHJhcCA9IGluZl9zdGF0 dXMtPnN0b3BfYWZ0ZXJfdHJhcDsKICAgaW5mLT5zdG9wX3Nvb24gPSBpbmZf c3RhdHVzLT5zdG9wX3Nvb247Cg== --000e0cd242626acd09046ecdd87f--