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.
This commit is contained in:
Jan Kratochvil 2010-09-30 10:24:40 +00:00
parent f81bc8b5f1
commit cd2effb255
4 changed files with 58 additions and 8 deletions

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.