From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14965 invoked by alias); 22 Aug 2013 09:36:34 -0000 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 Received: (qmail 14915 invoked by uid 89); 22 Aug 2013 09:36:33 -0000 X-Spam-SWARE-Status: No, score=-5.0 required=5.0 tests=BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL autolearn=ham version=3.3.2 Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 22 Aug 2013 09:36:31 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1VCRJc-0000yc-Qn from Muhammad_Waqas@mentor.com ; Thu, 22 Aug 2013 02:36:28 -0700 Received: from SVR-IES-FEM-01.mgc.mentorg.com ([137.202.0.104]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Thu, 22 Aug 2013 02:36:28 -0700 Received: from EU-MBX-04.mgc.mentorg.com ([169.254.4.127]) by SVR-IES-FEM-01.mgc.mentorg.com ([137.202.0.104]) with mapi id 14.02.0247.003; Thu, 22 Aug 2013 10:36:26 +0100 From: "Waqas, Muhammad" To: Pedro Alves CC: "gdb-patches@sourceware.org" Subject: RE: [PATCH] fix PR-15501 Date: Thu, 22 Aug 2013 09:36:00 -0000 Message-ID: <53A5AC689E2AD547AE0EA5642E101306BB6120@EU-MBX-04.mgc.mentorg.com> References: <520A0453.4070309@codesourcery.com> <520A6EEB.8010808@redhat.com> <520CAE24.7050301@codesourcery.com>,<52153C74.7080708@redhat.com> In-Reply-To: <52153C74.7080708@redhat.com> Content-Type: multipart/mixed; boundary="_003_53A5AC689E2AD547AE0EA5642E101306BB6120EUMBX04mgcmentorg_" MIME-Version: 1.0 X-Virus-Found: No X-SW-Source: 2013-08/txt/msg00622.txt.bz2 --_003_53A5AC689E2AD547AE0EA5642E101306BB6120EUMBX04mgcmentorg_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 18055 Thanks for reviewing patch. ________________________________________ From: Pedro Alves [palves@redhat.com] Sent: Thursday, August 22, 2013 3:17 AM To: Waqas, Muhammad Cc: gdb-patches@sourceware.org Subject: Re: [PATCH] fix PR-15501 On 08/15/2013 11:32 AM, Muhammad Waqas wrote: > On 08/13/2013 10:37 PM, Pedro Alves wrote: >> > On 08/13/2013 11:02 AM, Muhammad Waqas wrote: >>> >> GDB enable/disable command does not work correctly as it should be. >>> >> http://sourceware.org/bugzilla/show_bug.cgi?id=3D15501 >> > Thanks! >> > >> > Note it'd be good to assign yourself the PR once >> > you start working on it, to avoid effort duplication. I >> > had just suggested this bug to someone else last week; >> > luckily he hadn't started working on it. :-) >> > > ok next time I will be careful. > >>> >> Addition to Pedro examples. >>> >> if we execute following commands these will be executed >>> >> without an error. >>> >> (gdb) info b >>> >> Num Type Disp Enb Address What >>> >> 1 breakpoint keep y 0x00000000004004b8 in main at 13929.= c:13 >>> >> 2 breakpoint keep y 0x00000000004004b8 in main at 13929.= c:13 >>> >> (gdb) disable 1 fooo.1 >>> >> (gdb) info break >>> >> Num Type Disp Enb Address What >>> >> 1 breakpoint keep y >>> >> 1.1 n 0x00000000004004b8 in main at 1392= 9.c:13 >>> >> 2 breakpoint keep y 0x00000000004004b8 in main at 13929.= c:13 >>> >> >>> >> It should disable breakpoint 1 and error on fooo but what gdb did, i= t disable 1.1 >>> >> surprisingly. >>> >> >>> >> I am prposing patch for this bug. >>> >> >>> >> Workaround: >>> >> Pars args and handle them one by one if it contain period or not and= do what it >>> >> requires(disable/enable breakpoint or location). >>> >> >>> >> gdb\Changlog >>> >> >>> >> 2013-08-13 Muhammad Waqas >>> >> >>> >> PR gdb/15501 >>> >> * breakpoint.c (enable_command): Handle multiple arguments properly. >>> >> (disable_command): Handle multiple arguments properly. >> > "Properly" is subjective, and may change over time. ;-) Say what cha= nged, >> > like so: >> > >> > * breakpoint.c (enable_command, disable_command): Iterate over >> > all specified breakpoint locations. >> > >>> >> testsuite\Changlog >> > I can't resist saying that backslashes for dir >> > separators look very alien to me. :-) >> > >>> >> 2013-07-13 Muhammad Waqas >>> >> >>> >> PR gdb/15501 >>> >> * gdb.base/ena-dis-br.exp: Add test to verify >>> >> enable\disable commands work correctly with arguments. >> > Here too. Please use forward slashes. Say: >> > >> > * gdb.base/ena-dis-br.exp: Add test to verify >> > enable/disable commands work correctly with >> > multiple arguments that include multiple locations. >> > >> > >>> >> +set b1 0 >>> >> +set b2 0 >>> >> + >>> >> +gdb_test_multiple "break main" "bp 1" { >>> >> + -re "(Breakpoint )(\[0-9\]+)( at.* file .*$srcfile, line.*)($gd= b_prompt $)" { >>> >> + set b1 $expect_out(2,string) >>> >> + pass "breakpoint main 1" >>> >> + } >>> >> +} >>> >> + >>> >> +gdb_test_multiple "break main" "bp 2" { >>> >> + -re "(Breakpoint )(\[0-9\]+)( at.* file .*$srcfile, line.*)($gd= b_prompt $)" { >>> >> + set b2 $expect_out(2,string) >>> >> + pass "breakpoint main 2" >>> >> + } >>> >> +} >> > Doesn't break_at work for this? It's defined at the top of the file. >> > >>> >> + >>> >> +gdb_test_no_output "disable $b1.1 $b2.1" "disable command" >> > Write: >> > >> > gdb_test_no_output "disable $b1.1 $b2.1" "disable \$b1.1 \$b2.1" >> > >>> >> +gdb_test "info break" \ >>> >> + "(${b1}.1)(\[^\n\r\]*)( n.*)(${b2}.1)(\[^\n\r\]*)( n.*)" \ >>> >> + "disable ${b1}.1 and ${b2}.1" >> > I think you meant "disabled". Also, this puts the real breakpoint >> > number in gdb.sum. It's usually better to avoid that, as something >> > may cause the breakpoint numbers to change, and we'd rather >> > gdb.sum output was stable(-ish). So, write: >> > >> > gdb_test "info break" \ >> > "(${b1}.1)(\[^\n\r\]*)( n.*)(${b2}.1)(\[^\n\r\]*)( n.*)" \ >> > "disabled \$b1.1 and \$b2.1" >> > >>> >> + >>> >> +gdb_test "disable $b1 fooo.1" \ >>> >> + "Bad breakpoint number 'fooo'" \ >>> >> + "handle multiple args" >> > "handle multiple args" looks like a stale string from some >> > earlier revision... The other test above was also >> > about multiple args. Just do: >> > >> > gdb_test "disable $b1 fooo.1" \ >> > "Bad breakpoint number 'fooo'" \ >> > "disable \$b1 fooo.1" >> > >> > >> > IMO, the test is incomplete. >> > >> > - The "enable" command should be tested as well. >> > - It'd be good to test a mix of breakpoints >> > and breakpoint locations. E.g., "disable $b3.1 $b4" >> > - The "info break" tests should ensure that the breakpoints >> > that were _not_ supposed to be disabled remain enabled (and >> > vice versa for counterpart "enable" tests. (this suggests >> > moving the testing code to a procedure that repeats the >> > same set of tests for either enable or disable). >> > - This part in the PR: >> > ok >>> >> In fact, everything after the first location is ignored: >>> >> >>> >> (gdb) disable 2.1 foofoobar >>> >> (gdb) info breakpoints >>> >> Num Type Disp Enb Address What >>> >> 2 breakpoint keep y >>> >> 2.1 n 0x00000000004004cf in main at main= .c:5 >>> >> 3 breakpoint keep y 0x00000000004004cf in main at main.c= :5 >>> >> (gdb) >>> >> >>> >> That should warn, just like: >>> >> >>> >> (gdb) disable 2 foofoobar >>> >> warning: bad breakpoint number at or near 'foofoobar' >> > ... is not being tested. I think it should. >> > >> > Would you like to extend the test a bit and resubmit? >> > >> > Thanks, > Thanks for reviewing my patch. > > Here are the things that you mention to correct. > > > > gdb/Changlog > > 2013-08-12 Muhammad Waqas > > PR gdb/15501 > * breakpoint.c (enable_command, disable_command): Iterate over > all specified breakpoint locations. > > testsuite/Changlog > > 2013-07-12 Muhammad Waqas > > PR gdb/15501 > * gdb.base/ena-dis-br.exp: Add test to verify > enable/disable commands work correctly with > multiple arguments that include multiple locations. > > extended testcase > > Index: ena-dis-br.exp > =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/testsuite/gdb.base/ena-dis-br.exp,v > retrieving revision 1.22 > diff -u -p -r1.22 ena-dis-br.exp > --- ena-dis-br.exp 27 Jun 2013 18:50:30 -0000 1.22 > +++ ena-dis-br.exp 15 Aug 2013 09:12:04 -0000 > @@ -301,5 +301,88 @@ gdb_test_multiple "continue 2" "$test" { > } > } > > +# Verify that GDB correctly handles the "enable/disable" command with ar= guments that > +# include multiple locations. Line too long. fixed > +# > +if ![runto_main] then { fail "enable/disable break tests suppressed" } > + > +set b1 0 > +set b2 0 > +set b3 0 > +set b4 0 > + > +set b1 [break_at main ""] > +set b2 [break_at main ""] > +set b3 [break_at main ""] > +set b4 [break_at main ""] > + > +# This proc will work correctly If args will be according to below expla= ned values # This proc will work correctly If args will be according to below explaned= values - "will work correctly" is unfortunately not a useful indication of what the function actually does. - "If" is uppercased for no reason. - Typo "explaned". - Missing period. fixed > +# > +# If "what" =3D "disable" then > +# "what_res" =3D "n" > +# "p1" =3D "pass" > +# "p2" =3D "fail". > +# > +# If "what" =3D "enable" then > +# "what_res" =3D "y" > +# "p1" =3D "fail" > +# "p2" =3D "pass". > + Should e.g., say that WHAT is a command, etc. fixed > +proc test_ena_dis_br { what what_res p1 p2 } { > + global b1 > + global b2 > + global b3 > + global b4 > + global gdb_prompt > + > + gdb_test_no_output "$what $b1.1 $b2.1" "$what \$b1.1 \$b2.1" > + set test1 "$what \$b1.1 and \$b2.1" Should be "${what}d" here too, right? fixed Please add some comments in the body of the function, with a minimal explanation of what the multiple testing steps are doing. It'll make it much easier to follow. As is, it's hard to grok. Things like, "Now disable foo. bar should remain enabled.", etc. fixed > + > + gdb_test_multiple "info break" "$test1" { > + -re "(${b1}.1)(\[^\n\r\]*)( n.*)(${b2}.1)(\[^\n\r\]*)( n.*)$gdb_pro= mpt $" { > + $p1 "$test1" > + } > + -re ".*$gdb_prompt $" { > + $p2 "$test1" > + } > + } > + > + gdb_test "$what $b1 fooo.1" \ > + "Bad breakpoint number 'fooo'" \ > + "$what \$b1 fooo.1" > + > + gdb_test "info break" \ > + "(${b1})(\[^\n\r]*)( $what_res.*)" \ > + "${what}d \$b1" > + > + gdb_test_no_output "$what $b4 $b3.1" "$what \$b4 \$b3.1" > + set test1 "${what}d \$b4 and \$b3.1,remain enabled \$b3" Suggest: set test1 "${what}d \$b4 and \$b3.1, \$b3 remains enabled" Actually, shouldn't "enabled" here be the opposite of "${what}d" ? Here's what we now get: PASS: gdb.base/ena-dis-br.exp: disabled $b4 and $b3.1,remain enabled $b3 ... PASS: gdb.base/ena-dis-br.exp: enabled $b4 and $b3.1,remain enabled $b3 Yes it should be and fixed it. > + > + gdb_test_multiple "info break" "$test1" { > + -re "(${b3})(\[^\n\r]*)( y.*)(${b3}.1)(\[^\n\r\]*)( n.*)(${b4})(\[^= \n\r\]*)( $what_res.*)$gdb_prompt $" { > + $p1 "$test1" > + } > + -re "(${b3})(\[^\n\r]*)( y.*)(${b4})(\[^\n\r\]*)( $what_res.*)$gdb_= prompt $" { > + $p2 "$test1" > + } > + } > + > + gdb_test "$what $b4.1 fooobaar" \ > + "warning: bad breakpoint number at or near 'fooobaar'" \ > + "$what \$b4.1 fooobar" > + set test1 "${what}d \$b4.1" > + > + gdb_test_multiple "info break" "$test1" { > + -re "(${b4}.1)(\[^\n\r\]*)( n.*)$gdb_prompt $" { > + $p1 "$test1" > + } > + -re ".*$gdb_prompt $" { > + $p2 "$test1" > + } > + } > +} > + > +test_ena_dis_br "disable" "n" "pass" "fail" > +test_ena_dis_br "enable" "y" "fail" "pass" > + > gdb_exit > return 0 This patch adds a series of trailing whitespace. Please fix that up. fixed -- Pedro Alves Please also find this patch in attachment. gdb/ChangeLog 2013-08-12 Muhammad Waqas PR gdb/15501 * breakpoint.c (enable_command, disable_command): Iterate over all specified breakpoint locations. Index: breakpoint.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/breakpoint.c,v retrieving revision 1.773 diff -u -p -r1.773 breakpoint.c --- breakpoint.c 24 Jul 2013 19:50:32 -0000 1.773 +++ breakpoint.c 22 Aug 2013 06:37:27 -0000 @@ -14553,25 +14553,35 @@ disable_command (char *args, int from_tt if (user_breakpoint_p (bpt)) disable_breakpoint (bpt); } - else if (strchr (args, '.')) + else { - struct bp_location *loc =3D find_location_by_number (args); - if (loc) + char *num =3D extract_arg (&args); + + while (num) { - if (loc->enabled) + if (strchr (num, '.')) { - loc->enabled =3D 0; - mark_breakpoint_location_modified (loc); + struct bp_location *loc =3D find_location_by_number (num); + + if (loc) + { + if (loc->enabled) + { + loc->enabled =3D 0; + mark_breakpoint_location_modified (loc); + } + if (target_supports_enable_disable_tracepoint () + && current_trace_status ()->running && loc->owner + && is_tracepoint (loc->owner)) + target_disable_tracepoint (loc); + } + update_global_location_list (0); } - if (target_supports_enable_disable_tracepoint () - && current_trace_status ()->running && loc->owner - && is_tracepoint (loc->owner)) - target_disable_tracepoint (loc); + else + map_breakpoint_numbers (num, do_map_disable_breakpoint, NULL); + num =3D extract_arg (&args); } - update_global_location_list (0); } - else - map_breakpoint_numbers (args, do_map_disable_breakpoint, NULL); } =20 static void @@ -14677,25 +14687,35 @@ enable_command (char *args, int from_tty if (user_breakpoint_p (bpt)) enable_breakpoint (bpt); } - else if (strchr (args, '.')) + else { - struct bp_location *loc =3D find_location_by_number (args); - if (loc) + char *num =3D extract_arg (&args); + + while (num) { - if (!loc->enabled) + if (strchr (num, '.')) { - loc->enabled =3D 1; - mark_breakpoint_location_modified (loc); + struct bp_location *loc =3D find_location_by_number (num); + + if (loc) + { + if (!loc->enabled) + { + loc->enabled =3D 1; + mark_breakpoint_location_modified (loc); + } + if (target_supports_enable_disable_tracepoint () + && current_trace_status ()->running && loc->owner + && is_tracepoint (loc->owner)) + target_enable_tracepoint (loc); + } + update_global_location_list (1); } - if (target_supports_enable_disable_tracepoint () - && current_trace_status ()->running && loc->owner - && is_tracepoint (loc->owner)) - target_enable_tracepoint (loc); + else + map_breakpoint_numbers (num, do_map_enable_breakpoint, NULL); + num =3D extract_arg (&args); } - update_global_location_list (1); } - else - map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL); } =20 /* This struct packages up disposition data for application to multiple testsuite/ChangLog 2013-07-12 Muhammad Waqas PR gdb/15501 * gdb.base/ena-dis-br.exp: Add test to verify enable/disable commands work correctly with multiple arguments that include multiple locations. Index: ena-dis-br.exp =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/testsuite/gdb.base/ena-dis-br.exp,v retrieving revision 1.22 diff -u -p -r1.22 ena-dis-br.exp --- ena-dis-br.exp 27 Jun 2013 18:50:30 -0000 1.22 +++ ena-dis-br.exp 22 Aug 2013 07:55:03 -0000 @@ -301,5 +301,116 @@ gdb_test_multiple "continue 2" "$test" { } } =20 +# Verify that GDB correctly handles the "enable/disable" command +# with arguments, that include multiple locations. +# +if ![runto_main] then { fail "enable/disable break tests suppressed" } + +set b1 0 +set b2 0 +set b3 0 +set b4 0 + +set b1 [break_at main ""] +set b2 [break_at main ""] +set b3 [break_at main ""] +set b4 [break_at main ""] + +# This proc will be able to perform test for disable/enable +# commads on multiple locations and breakpoints, +# if args will be according to below explained values. +# Here arg are +# "what" is command (disable/enable), +# "what_res" is for breakpoints should be enabled or not, +# "p1/p2" are proc(pass/fail) but must be opposite. +# +# Here arg's values +# If "what" =3D "disable" then +# "what_res" =3D "n" +# "p1" =3D "pass" +# "p2" =3D "fail". +# +# If "what" =3D "enable" then +# "what_res" =3D "y" +# "p1" =3D "fail" +# "p2" =3D "pass". + +proc test_ena_dis_br { what what_res p1 p2 } { + global b1 + global b2 + global b3 + global b4 + global gdb_prompt + + # Now enable/disable $b.1 $b2.1. + gdb_test_no_output "$what $b1.1 $b2.1" "$what \$b1.1 \$b2.1" + set test1 "${what}d \$b1.1 and \$b2.1" + + # Now $b1.1 and $b2.1 should be enabled/disabled + gdb_test_multiple "info break" "$test1" { + -re "(${b1}.1)(\[^\n\r\]*)( n.*)(${b2}.1)(\[^\n\r\]*)( n.*)$gdb_pro= mpt $" { + $p1 "$test1" + } + -re ".*$gdb_prompt $" { + $p2 "$test1" + } + } + + # Now enable/disbale $b1 fooo.1, it should give error on fooo. + gdb_test "$what $b1 fooo.1" \ + "Bad breakpoint number 'fooo'" \ + "$what \$b1 fooo.1" + + # $b1 should be enabled/disabled. + gdb_test "info break" \ + "(${b1})(\[^\n\r]*)( $what_res.*)" \ + "${what}d \$b1" + + # Here "oppos" is commmand that should be opposite of "what". + set oppos "enable" + set oppos_res "y" + + if { $what =3D=3D "enable" } { + set oppos "disable" + set oppos_res "n" + + } + + gdb_test_no_output "$oppos $b3" "$oppos \$b3" + gdb_test_no_output "$what $b4 $b3.1" "$what \$b4 \$b3.1" + set test1 "${what}d \$b4 and \$b3.1,remain ${oppos}d \$b3" + + # Now $b4 $b3.1 should be enabled/disabled and + # $b3 should remain enabled/disabled + gdb_test_multiple "info break" "$test1" { + -re "(${b3})(\[^\n\r]*)( $oppos_res.*)(${b3}.1)(\[^\n\r\]*)( n.*)($= {b4})(\[^\n\r\]*)( $what_res.*)$gdb_prompt $" { + $p1 "$test1" + } + -re "(${b3})(\[^\n\r]*)( $oppos_res.*)(${b4})(\[^\n\r\]*)( $what_re= s.*)$gdb_prompt $" { + $p2 "$test1" + } + } + + # Now enable/disable $b4.1 fooobaar and + # it should give warning on fooobaar. + gdb_test "$what $b4.1 fooobaar" \ + "warning: bad breakpoint number at or near 'fooobaar'" \ + "$what \$b4.1 fooobar" + set test1 "${what}d \$b4.1" + + # $b4.1 should be enabled/disbaled + gdb_test_multiple "info break" "$test1" { + -re "(${b4}.1)(\[^\n\r\]*)( n.*)$gdb_prompt $" { + $p1 "$test1" + } + -re ".*$gdb_prompt $" { + $p2 "$test1" + } + } +} + +test_ena_dis_br "disable" "n" "pass" "fail" +test_ena_dis_br "enable" "y" "fail" "pass" + gdb_exit return 0 --_003_53A5AC689E2AD547AE0EA5642E101306BB6120EUMBX04mgcmentorg_ Content-Type: text/x-patch; name="ena-dis-br.exp.patch" Content-Description: ena-dis-br.exp.patch Content-Disposition: attachment; filename="ena-dis-br.exp.patch"; size=3608; creation-date="Thu, 22 Aug 2013 09:33:30 GMT"; modification-date="Thu, 22 Aug 2013 09:33:30 GMT" Content-Transfer-Encoding: base64 Content-length: 4893 SW5kZXg6IGVuYS1kaXMtYnIuZXhwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2VuYS1kaXMtYnIuZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRp ZmYgLXUgLXAgLXIxLjIyIGVuYS1kaXMtYnIuZXhwCi0tLSBlbmEtZGlzLWJy LmV4cAkyNyBKdW4gMjAxMyAxODo1MDozMCAtMDAwMAkxLjIyCisrKyBlbmEt ZGlzLWJyLmV4cAkyMiBBdWcgMjAxMyAwNzo1NTowMyAtMDAwMApAQCAtMzAx LDUgKzMwMSwxMTYgQEAgZ2RiX3Rlc3RfbXVsdGlwbGUgImNvbnRpbnVlIDIi ICIkdGVzdCIgewogICAgIH0KIH0KIAorIyBWZXJpZnkgdGhhdCBHREIgY29y cmVjdGx5IGhhbmRsZXMgdGhlICJlbmFibGUvZGlzYWJsZSIgY29tbWFuZAor IyB3aXRoIGFyZ3VtZW50cywgdGhhdCBpbmNsdWRlIG11bHRpcGxlIGxvY2F0 aW9ucy4KKyMKK2lmICFbcnVudG9fbWFpbl0gdGhlbiB7IGZhaWwgImVuYWJs ZS9kaXNhYmxlIGJyZWFrIHRlc3RzIHN1cHByZXNzZWQiIH0KKworc2V0IGIx IDAKK3NldCBiMiAwCitzZXQgYjMgMAorc2V0IGI0IDAKKworc2V0IGIxIFti cmVha19hdCBtYWluICIiXQorc2V0IGIyIFticmVha19hdCBtYWluICIiXQor c2V0IGIzIFticmVha19hdCBtYWluICIiXQorc2V0IGI0IFticmVha19hdCBt YWluICIiXQorCisjIFRoaXMgcHJvYyB3aWxsIGJlIGFibGUgdG8gcGVyZm9y bSB0ZXN0IGZvciBkaXNhYmxlL2VuYWJsZQorIyBjb21tYWRzIG9uIG11bHRp cGxlIGxvY2F0aW9ucyBhbmQgYnJlYWtwb2ludHMsCisjIGlmIGFyZ3Mgd2ls bCBiZSBhY2NvcmRpbmcgdG8gYmVsb3cgZXhwbGFpbmVkIHZhbHVlcy4KKyMg SGVyZSBhcmcgYXJlCisjICJ3aGF0IiBpcyBjb21tYW5kIChkaXNhYmxlL2Vu YWJsZSksCisjICJ3aGF0X3JlcyIgaXMgZm9yIGJyZWFrcG9pbnRzIHNob3Vs ZCBiZSBlbmFibGVkIG9yIG5vdCwKKyMgInAxL3AyIiBhcmUgcHJvYyhwYXNz L2ZhaWwpIGJ1dCBtdXN0IGJlIG9wcG9zaXRlLgorIworIyBIZXJlIGFyZydz IHZhbHVlcworIyBJZiAid2hhdCIgPSAiZGlzYWJsZSIgdGhlbgorIyAid2hh dF9yZXMiID0gIm4iCisjICJwMSIgPSAicGFzcyIKKyMgInAyIiA9ICJmYWls Ii4KKyMKKyMgSWYgIndoYXQiID0gImVuYWJsZSIgdGhlbgorIyAid2hhdF9y ZXMiID0gInkiCisjICJwMSIgPSAiZmFpbCIKKyMgInAyIiA9ICJwYXNzIi4K KworcHJvYyB0ZXN0X2VuYV9kaXNfYnIgeyB3aGF0IHdoYXRfcmVzIHAxIHAy IH0geworICAgIGdsb2JhbCBiMQorICAgIGdsb2JhbCBiMgorICAgIGdsb2Jh bCBiMworICAgIGdsb2JhbCBiNAorICAgIGdsb2JhbCBnZGJfcHJvbXB0CisK KyAgICAjIE5vdyBlbmFibGUvZGlzYWJsZSAkYi4xICRiMi4xLgorICAgIGdk Yl90ZXN0X25vX291dHB1dCAiJHdoYXQgJGIxLjEgJGIyLjEiICIkd2hhdCBc JGIxLjEgXCRiMi4xIgorICAgIHNldCB0ZXN0MSAiJHt3aGF0fWQgXCRiMS4x IGFuZCBcJGIyLjEiCisKKyAgICAjIE5vdyAkYjEuMSBhbmQgJGIyLjEgc2hv dWxkIGJlIGVuYWJsZWQvZGlzYWJsZWQKKyAgICBnZGJfdGVzdF9tdWx0aXBs ZSAiaW5mbyBicmVhayIgIiR0ZXN0MSIgeworICAgICAgIC1yZSAiKCR7YjF9 LjEpKFxbXlxuXHJcXSopKCBuLiopKCR7YjJ9LjEpKFxbXlxuXHJcXSopKCBu LiopJGdkYl9wcm9tcHQgJCIgeworICAgICAgICAgICAkcDEgIiR0ZXN0MSIK KyAgICAgICB9CisgICAgICAgLXJlICIuKiRnZGJfcHJvbXB0ICQiIHsKKyAg ICAgICAgICAgJHAyICIkdGVzdDEiCisgICAgICAgfQorICAgIH0KKworICAg ICMgTm93IGVuYWJsZS9kaXNiYWxlICRiMSBmb29vLjEsIGl0IHNob3VsZCBn aXZlIGVycm9yIG9uIGZvb28uCisgICAgZ2RiX3Rlc3QgIiR3aGF0ICRiMSBm b29vLjEiIFwKKyAgICAgICAiQmFkIGJyZWFrcG9pbnQgbnVtYmVyICdmb29v JyIgXAorICAgICAgICIkd2hhdCBcJGIxIGZvb28uMSIKKworICAgICMgJGIx IHNob3VsZCBiZSBlbmFibGVkL2Rpc2FibGVkLgorICAgIGdkYl90ZXN0ICJp bmZvIGJyZWFrIiBcCisgICAgICAgIigke2IxfSkoXFteXG5ccl0qKSggJHdo YXRfcmVzLiopIiBcCisgICAgICAgIiR7d2hhdH1kIFwkYjEiCisKKyAgICAj IEhlcmUgIm9wcG9zIiBpcyBjb21tbWFuZCB0aGF0IHNob3VsZCBiZSBvcHBv c2l0ZSBvZiAid2hhdCIuCisgICAgc2V0IG9wcG9zICJlbmFibGUiCisgICAg c2V0IG9wcG9zX3JlcyAieSIKKworICAgIGlmIHsgJHdoYXQgPT0gImVuYWJs ZSIgfSB7CisgICAgICAgIHNldCBvcHBvcyAiZGlzYWJsZSIKKwlzZXQgb3Bw b3NfcmVzICJuIgorCisgICAgfQorCisgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0 ICIkb3Bwb3MgJGIzIiAiJG9wcG9zIFwkYjMiCisgICAgZ2RiX3Rlc3Rfbm9f b3V0cHV0ICIkd2hhdCAkYjQgJGIzLjEiICIkd2hhdCBcJGI0IFwkYjMuMSIK KyAgICBzZXQgdGVzdDEgIiR7d2hhdH1kIFwkYjQgYW5kIFwkYjMuMSxyZW1h aW4gJHtvcHBvc31kIFwkYjMiCisKKyAgICAjIE5vdyAkYjQgJGIzLjEgc2hv dWxkIGJlIGVuYWJsZWQvZGlzYWJsZWQgYW5kCisgICAgIyAkYjMgc2hvdWxk IHJlbWFpbiBlbmFibGVkL2Rpc2FibGVkCisgICAgZ2RiX3Rlc3RfbXVsdGlw bGUgImluZm8gYnJlYWsiICIkdGVzdDEiIHsKKyAgICAgICAtcmUgIigke2Iz fSkoXFteXG5ccl0qKSggJG9wcG9zX3Jlcy4qKSgke2IzfS4xKShcW15cblxy XF0qKSggbi4qKSgke2I0fSkoXFteXG5cclxdKikoICR3aGF0X3Jlcy4qKSRn ZGJfcHJvbXB0ICQiIHsKKyAgICAgICAgICAgJHAxICIkdGVzdDEiCisgICAg ICAgfQorICAgICAgIC1yZSAiKCR7YjN9KShcW15cblxyXSopKCAkb3Bwb3Nf cmVzLiopKCR7YjR9KShcW15cblxyXF0qKSggJHdoYXRfcmVzLiopJGdkYl9w cm9tcHQgJCIgeworICAgICAgICAgICAkcDIgIiR0ZXN0MSIKKyAgICAgICB9 CisgICAgfQorCisgICAgIyBOb3cgZW5hYmxlL2Rpc2FibGUgJGI0LjEgZm9v b2JhYXIgYW5kCisgICAgIyBpdCBzaG91bGQgZ2l2ZSB3YXJuaW5nIG9uIGZv b29iYWFyLgorICAgIGdkYl90ZXN0ICIkd2hhdCAkYjQuMSBmb29vYmFhciIg XAorICAgICAgICJ3YXJuaW5nOiBiYWQgYnJlYWtwb2ludCBudW1iZXIgYXQg b3IgbmVhciAnZm9vb2JhYXInIiBcCisgICAgICAgIiR3aGF0IFwkYjQuMSBm b29vYmFyIgorICAgIHNldCB0ZXN0MSAiJHt3aGF0fWQgXCRiNC4xIgorCisg ICAgIyAkYjQuMSBzaG91bGQgYmUgZW5hYmxlZC9kaXNiYWxlZAorICAgIGdk Yl90ZXN0X211bHRpcGxlICJpbmZvIGJyZWFrIiAiJHRlc3QxIiB7CisgICAg ICAgIC1yZSAiKCR7YjR9LjEpKFxbXlxuXHJcXSopKCBuLiopJGdkYl9wcm9t cHQgJCIgeworICAgICAgICAgICAkcDEgIiR0ZXN0MSIKKyAgICAgICB9Cisg ICAgICAgLXJlICIuKiRnZGJfcHJvbXB0ICQiIHsKKyAgICAgICAgICAgJHAy ICIkdGVzdDEiCisgICAgICAgfQorICAgIH0KK30KKwordGVzdF9lbmFfZGlz X2JyICJkaXNhYmxlIiAibiIgInBhc3MiICJmYWlsIgordGVzdF9lbmFfZGlz X2JyICJlbmFibGUiICJ5IiAiZmFpbCIgInBhc3MiCisKIGdkYl9leGl0CiBy ZXR1cm4gMAo= --_003_53A5AC689E2AD547AE0EA5642E101306BB6120EUMBX04mgcmentorg_ Content-Type: text/x-patch; name="breakpoint.c.patch" Content-Description: breakpoint.c.patch Content-Disposition: attachment; filename="breakpoint.c.patch"; size=3055; creation-date="Thu, 22 Aug 2013 09:33:30 GMT"; modification-date="Thu, 22 Aug 2013 09:33:30 GMT" Content-Transfer-Encoding: base64 Content-length: 4144 SW5kZXg6IGJyZWFrcG9pbnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2JyZWFrcG9pbnQuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS43NzMKZGlmZiAtdSAtcCAtcjEuNzczIGJyZWFr cG9pbnQuYwotLS0gYnJlYWtwb2ludC5jCTI0IEp1bCAyMDEzIDE5OjUwOjMy IC0wMDAwCTEuNzczCisrKyBicmVha3BvaW50LmMJMjIgQXVnIDIwMTMgMDY6 Mzc6MjcgLTAwMDAKQEAgLTE0NTUzLDI1ICsxNDU1MywzNSBAQCBkaXNhYmxl X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0CiAJaWYgKHVzZXJf YnJlYWtwb2ludF9wIChicHQpKQogCSAgZGlzYWJsZV9icmVha3BvaW50IChi cHQpOwogICAgIH0KLSAgZWxzZSBpZiAoc3RyY2hyIChhcmdzLCAnLicpKQor ICBlbHNlCiAgICAgewotICAgICAgc3RydWN0IGJwX2xvY2F0aW9uICpsb2Mg PSBmaW5kX2xvY2F0aW9uX2J5X251bWJlciAoYXJncyk7Ci0gICAgICBpZiAo bG9jKQorICAgICAgY2hhciAqbnVtID0gZXh0cmFjdF9hcmcgKCZhcmdzKTsK KworICAgICAgd2hpbGUgKG51bSkKIAl7Ci0JICBpZiAobG9jLT5lbmFibGVk KQorCSAgaWYgKHN0cmNociAobnVtLCAnLicpKQogCSAgICB7Ci0JICAgICAg bG9jLT5lbmFibGVkID0gMDsKLQkgICAgICBtYXJrX2JyZWFrcG9pbnRfbG9j YXRpb25fbW9kaWZpZWQgKGxvYyk7CisJICAgICAgc3RydWN0IGJwX2xvY2F0 aW9uICpsb2MgPSBmaW5kX2xvY2F0aW9uX2J5X251bWJlciAobnVtKTsKKwor CSAgICAgIGlmIChsb2MpCisJCXsKKwkJICBpZiAobG9jLT5lbmFibGVkKQor CQkgICAgeworCQkgICAgICBsb2MtPmVuYWJsZWQgPSAwOworCQkgICAgICBt YXJrX2JyZWFrcG9pbnRfbG9jYXRpb25fbW9kaWZpZWQgKGxvYyk7CisJCSAg ICB9CisJCSAgaWYgKHRhcmdldF9zdXBwb3J0c19lbmFibGVfZGlzYWJsZV90 cmFjZXBvaW50ICgpCisJCSAgICAgICYmIGN1cnJlbnRfdHJhY2Vfc3RhdHVz ICgpLT5ydW5uaW5nICYmIGxvYy0+b3duZXIKKwkJICAgICAgJiYgaXNfdHJh Y2Vwb2ludCAobG9jLT5vd25lcikpCisJCSAgICB0YXJnZXRfZGlzYWJsZV90 cmFjZXBvaW50IChsb2MpOworCQl9CisJICAgICAgdXBkYXRlX2dsb2JhbF9s b2NhdGlvbl9saXN0ICgwKTsKIAkgICAgfQotCSAgaWYgKHRhcmdldF9zdXBw b3J0c19lbmFibGVfZGlzYWJsZV90cmFjZXBvaW50ICgpCi0JICAgICAgJiYg Y3VycmVudF90cmFjZV9zdGF0dXMgKCktPnJ1bm5pbmcgJiYgbG9jLT5vd25l cgotCSAgICAgICYmIGlzX3RyYWNlcG9pbnQgKGxvYy0+b3duZXIpKQotCSAg ICB0YXJnZXRfZGlzYWJsZV90cmFjZXBvaW50IChsb2MpOworCSAgZWxzZQor CSAgICBtYXBfYnJlYWtwb2ludF9udW1iZXJzIChudW0sIGRvX21hcF9kaXNh YmxlX2JyZWFrcG9pbnQsIE5VTEwpOworCSAgbnVtID0gZXh0cmFjdF9hcmcg KCZhcmdzKTsKIAl9Ci0gICAgICB1cGRhdGVfZ2xvYmFsX2xvY2F0aW9uX2xp c3QgKDApOwogICAgIH0KLSAgZWxzZQotICAgIG1hcF9icmVha3BvaW50X251 bWJlcnMgKGFyZ3MsIGRvX21hcF9kaXNhYmxlX2JyZWFrcG9pbnQsIE5VTEwp OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ2NzcsMjUgKzE0Njg3LDM1IEBA IGVuYWJsZV9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkKIAlp ZiAodXNlcl9icmVha3BvaW50X3AgKGJwdCkpCiAJICBlbmFibGVfYnJlYWtw b2ludCAoYnB0KTsKICAgICB9Ci0gIGVsc2UgaWYgKHN0cmNociAoYXJncywg Jy4nKSkKKyAgZWxzZQogICAgIHsKLSAgICAgIHN0cnVjdCBicF9sb2NhdGlv biAqbG9jID0gZmluZF9sb2NhdGlvbl9ieV9udW1iZXIgKGFyZ3MpOwotICAg ICAgaWYgKGxvYykKKyAgICAgIGNoYXIgKm51bSA9IGV4dHJhY3RfYXJnICgm YXJncyk7CisKKyAgICAgIHdoaWxlIChudW0pCiAJewotCSAgaWYgKCFsb2Mt PmVuYWJsZWQpCisJICBpZiAoc3RyY2hyIChudW0sICcuJykpCiAJICAgIHsK LQkgICAgICBsb2MtPmVuYWJsZWQgPSAxOwotCSAgICAgIG1hcmtfYnJlYWtw b2ludF9sb2NhdGlvbl9tb2RpZmllZCAobG9jKTsKKwkgICAgICBzdHJ1Y3Qg YnBfbG9jYXRpb24gKmxvYyA9IGZpbmRfbG9jYXRpb25fYnlfbnVtYmVyIChu dW0pOworCisJICAgICAgaWYgKGxvYykKKwkJeworCQkgIGlmICghbG9jLT5l bmFibGVkKQorCQkgICAgeworCQkgICAgICBsb2MtPmVuYWJsZWQgPSAxOwor CQkgICAgICBtYXJrX2JyZWFrcG9pbnRfbG9jYXRpb25fbW9kaWZpZWQgKGxv Yyk7CisJCSAgICB9CisJCSAgaWYgKHRhcmdldF9zdXBwb3J0c19lbmFibGVf ZGlzYWJsZV90cmFjZXBvaW50ICgpCisJCSAgICAgICYmIGN1cnJlbnRfdHJh Y2Vfc3RhdHVzICgpLT5ydW5uaW5nICYmIGxvYy0+b3duZXIKKwkJICAgICAg JiYgaXNfdHJhY2Vwb2ludCAobG9jLT5vd25lcikpCisJCSAgICB0YXJnZXRf ZW5hYmxlX3RyYWNlcG9pbnQgKGxvYyk7CisJCX0KKwkgICAgICB1cGRhdGVf Z2xvYmFsX2xvY2F0aW9uX2xpc3QgKDEpOwogCSAgICB9Ci0JICBpZiAodGFy Z2V0X3N1cHBvcnRzX2VuYWJsZV9kaXNhYmxlX3RyYWNlcG9pbnQgKCkKLQkg ICAgICAmJiBjdXJyZW50X3RyYWNlX3N0YXR1cyAoKS0+cnVubmluZyAmJiBs b2MtPm93bmVyCi0JICAgICAgJiYgaXNfdHJhY2Vwb2ludCAobG9jLT5vd25l cikpCi0JICAgIHRhcmdldF9lbmFibGVfdHJhY2Vwb2ludCAobG9jKTsKKwkg IGVsc2UKKwkgICAgbWFwX2JyZWFrcG9pbnRfbnVtYmVycyAobnVtLCBkb19t YXBfZW5hYmxlX2JyZWFrcG9pbnQsIE5VTEwpOworCSAgbnVtID0gZXh0cmFj dF9hcmcgKCZhcmdzKTsKIAl9Ci0gICAgICB1cGRhdGVfZ2xvYmFsX2xvY2F0 aW9uX2xpc3QgKDEpOwogICAgIH0KLSAgZWxzZQotICAgIG1hcF9icmVha3Bv aW50X251bWJlcnMgKGFyZ3MsIGRvX21hcF9lbmFibGVfYnJlYWtwb2ludCwg TlVMTCk7CiB9CiAKIC8qIFRoaXMgc3RydWN0IHBhY2thZ2VzIHVwIGRpc3Bv c2l0aW9uIGRhdGEgZm9yIGFwcGxpY2F0aW9uIHRvIG11bHRpcGxlCg== --_003_53A5AC689E2AD547AE0EA5642E101306BB6120EUMBX04mgcmentorg_--