diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-09-30 10:24:40 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-09-30 10:24:40 +0000 |
commit | cd2effb255e6018687256a2d10072a1e4da0c6c5 (patch) | |
tree | ac6d0a134f37ca0759e8f10558093af355aea302 | |
parent | f81bc8b5f1973d3b89d1504adf2fe216e86968c2 (diff) | |
download | gdb-cd2effb255e6018687256a2d10072a1e4da0c6c5.zip gdb-cd2effb255e6018687256a2d10072a1e4da0c6c5.tar.gz gdb-cd2effb255e6018687256a2d10072a1e4da0c6c5.tar.bz2 |
gdb/
PR corefiles/12071.
* inferior.c (have_live_inferiors): New variables old_chain, inf and
tp. Iterate INFERIOR_LIST and call target_has_execution.
gdb/testsuite/
PR corefiles/12071.
* gdb.base/corefile.exp (quit with a process, no question: load core)
(quit with a core file): New tests.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/inferior.c | 29 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/corefile.exp | 25 |
4 files changed, 58 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index fc02717..f7cd9cf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-09-30 Jan Kratochvil <jan.kratochvil@redhat.com> + + PR corefiles/12071. + * inferior.c (have_live_inferiors): New variables old_chain, inf and + tp. Iterate INFERIOR_LIST and call target_has_execution. + 2010-09-29 Jan Kratochvil <jan.kratochvil@redhat.com> Fix GDB crash on inferior calls with self-referencing classes. diff --git a/gdb/inferior.c b/gdb/inferior.c index 28c5867..0f94f18 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -461,16 +461,29 @@ have_inferiors (void) int have_live_inferiors (void) { - struct target_ops *t; + struct cleanup *old_chain; + struct inferior *inf; - /* The check on stratum suffices, as GDB doesn't currently support - multiple target interfaces. */ - if (have_inferiors ()) - for (t = current_target.beneath; t != NULL; t = t->beneath) - if (t->to_stratum == process_stratum) - return 1; + old_chain = make_cleanup_restore_current_thread (); - return 0; + for (inf = inferior_list; inf; inf = inf->next) + if (inf->pid != 0) + { + struct thread_info *tp; + + tp = any_thread_of_process (inf->pid); + if (tp) + { + switch_to_thread (tp->ptid); + + if (target_has_execution) + break; + } + } + + do_cleanups (old_chain); + + return inf != NULL; } /* Prune away automatically added program spaces that aren't required diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index a8a27fb5..ba20ffe 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-09-30 Jan Kratochvil <jan.kratochvil@redhat.com> + + PR corefiles/12071. + * gdb.base/corefile.exp (quit with a process, no question: load core) + (quit with a core file): New tests. + 2010-09-29 Jan Kratochvil <jan.kratochvil@redhat.com> Fix GDB crash on inferior calls with self-referencing classes. diff --git a/gdb/testsuite/gdb.base/corefile.exp b/gdb/testsuite/gdb.base/corefile.exp index 09204e85..eb1c957 100644 --- a/gdb/testsuite/gdb.base/corefile.exp +++ b/gdb/testsuite/gdb.base/corefile.exp @@ -201,8 +201,33 @@ gdb_test_multiple "info files" $test { } } +set test "quit with a process" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + pass $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } +} + gdb_exit +# Verify there is no question if only a core file is loaded. + +gdb_start +gdb_test "core-file $corefile" "Core was generated by .*" "no question: load core" + +set test "quit with a core file" +gdb_test_multiple "quit" $test { + -re "A debugging session is active.\r\n.*\r\nQuit anyway\\? \\(y or n\\) $" { + fail $test + gdb_test "n" {Not confirmed\.} "quit with processes: n" + } + eof { + pass $test + } +} + +gdb_exit # Test an attach command will clear any loaded core file. |