From 548740d6bdd115da2c9c17b194016c2c4c0a4c69 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 1 Jul 2014 11:43:00 -0600 Subject: [PATCH] fix record "run" regression This fixes the record "run" regression pointed out by Marc Khouzam: https://sourceware.org/ml/gdb/2014-06/msg00096.html The bug is that target_require_runnable must agree with the handling of the "run" target, but currently it is out of sync. This patch fixes the problem by changing target_require_runnable to also ignore the record_stratum. Built and regtested on x86-64 Fedora 20. New test case included. 2014-07-14 Tom Tromey * target.c (target_require_runnable): Also check record_stratum. Update comment. 2014-07-14 Tom Tromey * gdb.reverse/rerun-prec.c: New file. * gdb.reverse/rerun-prec.exp: New file. --- gdb/ChangeLog | 5 ++++ gdb/target.c | 3 +- gdb/testsuite/ChangeLog | 5 ++++ gdb/testsuite/gdb.reverse/rerun-prec.c | 21 ++++++++++++++ gdb/testsuite/gdb.reverse/rerun-prec.exp | 35 ++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 gdb/testsuite/gdb.reverse/rerun-prec.c create mode 100644 gdb/testsuite/gdb.reverse/rerun-prec.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1ccacd34da2..c9177183b8b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-07-14 Tom Tromey + + * target.c (target_require_runnable): Also check record_stratum. + Update comment. + 2014-07-11 Yao Qi * arm-tdep.c (thumb_analyze_prologue): Break the loop if diff --git a/gdb/target.c b/gdb/target.c index c9c5e4b83e0..07d029a2f44 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -2425,10 +2425,11 @@ target_require_runnable (void) if (t->to_create_inferior != NULL) return; - /* Do not worry about thread_stratum targets that can not + /* Do not worry about targets at certain strata that can not create inferiors. Assume they will be pushed again if necessary, and continue to the process_stratum. */ if (t->to_stratum == thread_stratum + || t->to_stratum == record_stratum || t->to_stratum == arch_stratum) continue; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 06522303aac..71987a7eb3a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-07-14 Tom Tromey + + * gdb.reverse/rerun-prec.c: New file. + * gdb.reverse/rerun-prec.exp: New file. + 2014-07-12 Maciej W. Rozycki Maciej W. Rozycki diff --git a/gdb/testsuite/gdb.reverse/rerun-prec.c b/gdb/testsuite/gdb.reverse/rerun-prec.c new file mode 100644 index 00000000000..c0f90cb5190 --- /dev/null +++ b/gdb/testsuite/gdb.reverse/rerun-prec.c @@ -0,0 +1,21 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +int main (int argc, char **argv) +{ + return 0; +} diff --git a/gdb/testsuite/gdb.reverse/rerun-prec.exp b/gdb/testsuite/gdb.reverse/rerun-prec.exp new file mode 100644 index 00000000000..995577e9b0e --- /dev/null +++ b/gdb/testsuite/gdb.reverse/rerun-prec.exp @@ -0,0 +1,35 @@ +# Copyright 2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . */ + +if {![supports_reverse] || ![supports_process_record]} { + return +} + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile [list $srcfile]]} { + return -1 +} + +# The bug is a regression in the sequence "run; record; run". +runto main +gdb_test_no_output "record" "Turn on process record" + +gdb_run_cmd +gdb_test_multiple "" "restarting inferior" { + -re "Breakpoint .*${gdb_prompt} " { + pass "restarting inferior" + } +} -- 2.39.2