From abf1152ad77baabd40d8c62324e5de922db246a5 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sat, 3 Mar 2012 14:21:04 +0000 Subject: [PATCH] gdb/ * breakpoint.c (set_condition_evaluation_mode): Set CONDITION_EVALUATION_MODE unconditionally. gdb/testsuite/ Implement testsuite workaround for PR breakpoints/13781. * gdb.cp/mb-templates.exp: New loop with variable $workaround. (set breakpoint condition-evaluation host): New conditional command. --- gdb/ChangeLog | 5 ++++ gdb/breakpoint.c | 7 ++--- gdb/testsuite/ChangeLog | 6 +++++ gdb/testsuite/gdb.cp/mb-templates.exp | 37 +++++++++++++++++---------- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 87b7bda453b..c74db5b7263 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-03-03 Jan Kratochvil + + * breakpoint.c (set_condition_evaluation_mode): Set + CONDITION_EVALUATION_MODE unconditionally. + 2012-03-03 Yao Qi * common/agent.c (agent_look_up_symbols): Add one parameter 'arg'. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 3decd920527..5388a4e2b54 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -761,6 +761,10 @@ set_condition_evaluation_mode (char *args, int from_tty, new_mode = translate_condition_evaluation_mode (condition_evaluation_mode_1); old_mode = translate_condition_evaluation_mode (condition_evaluation_mode); + /* Flip the switch. Flip it even if OLD_MODE == NEW_MODE as one of the + settings was "auto". */ + condition_evaluation_mode = condition_evaluation_mode_1; + /* Only update the mode if the user picked a different one. */ if (new_mode != old_mode) { @@ -772,9 +776,6 @@ set_condition_evaluation_mode (char *args, int from_tty, "target" -> "host": Remove all the conditions from the target. */ - /* Flip the switch. */ - condition_evaluation_mode = condition_evaluation_mode_1; - if (new_mode == condition_evaluation_target) { /* Mark everything modified and synch conditions with the diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index cc39a9a88bf..9df06dd5baf 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-03-03 Jan Kratochvil + + Implement testsuite workaround for PR breakpoints/13781. + * gdb.cp/mb-templates.exp: New loop with variable $workaround. + (set breakpoint condition-evaluation host): New conditional command. + 2012-03-03 Jan Kratochvil Code cleanup. diff --git a/gdb/testsuite/gdb.cp/mb-templates.exp b/gdb/testsuite/gdb.cp/mb-templates.exp index d386c029098..e909543d363 100644 --- a/gdb/testsuite/gdb.cp/mb-templates.exp +++ b/gdb/testsuite/gdb.cp/mb-templates.exp @@ -38,24 +38,35 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb return -1 } -clean_restart ${executable} +# If GDB crashes try it again workarounding PR breakpoints/13781. -set bp_location [gdb_get_line_number "set breakpoint here"] +foreach workaround [list "" " (workaround)"] { + clean_restart ${executable} -# Set a breakpoint with multiple locations -# and a condition. + if {${workaround} != ""} { + gdb_test_no_output "set breakpoint condition-evaluation host" + } -gdb_test "break $srcfile:$bp_location if i==1" \ - "Breakpoint.*at.*: $srcfile:$bp_location. \\(2 locations\\).*" \ - "initial condition: set breakpoint" + set bp_location [gdb_get_line_number "set breakpoint here"] -gdb_run_cmd + # Set a breakpoint with multiple locations + # and a condition. -set test "initial condition: run to breakpoint" -gdb_test_multiple "" $test { - -re "Breakpoint \[0-9\]+,.*foo \\(i=1\\).*$gdb_prompt $" { - pass $test - break + gdb_test "break $srcfile:$bp_location if i==1" \ + "Breakpoint.*at.*: $srcfile:$bp_location. \\(2 locations\\).*" \ + "initial condition: set breakpoint$workaround" + + gdb_run_cmd + + if {${workaround} == "" && [is_remote target]} { + setup_kfail breakpoints/13781 "*-*-*" + } + set test "initial condition: run to breakpoint$workaround" + gdb_test_multiple "" $test { + -re "Breakpoint \[0-9\]+,.*foo \\(i=1\\).*$gdb_prompt $" { + pass $test + break + } } } -- 2.30.2