gdb/
2012-11-05 Pedro Alves <palves@redhat.com> * inferior.c (exit_inferior_1): Clear 'vfork_parent' in the vfork child. Clear 'pending_detach'. * infrun.c (handle_vfork_child_exec_or_exit): Clear 'pending_detach' in the vfork parent. gdb/testsuite/ 2012-11-05 Pedro Alves <palves@redhat.com> * gdb.base/foll-vfork.exp (vfork_relations_in_info_inferiors): New procedure. (do_vfork_and_follow_child_tests_exec) (do_vfork_and_follow_child_tests_exit): Call it.
This commit is contained in:
parent
a7c8c9312a
commit
68c9da300b
@ -1,3 +1,10 @@
|
||||
2012-11-05 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* inferior.c (exit_inferior_1): Clear 'vfork_parent' in the vfork
|
||||
child. Clear 'pending_detach'.
|
||||
* infrun.c (handle_vfork_child_exec_or_exit): Clear
|
||||
'pending_detach' in the vfork parent.
|
||||
|
||||
2012-11-05 Doug Evans <dje@google.com>
|
||||
|
||||
Add support for DWP files. http://gcc.gnu.org/wiki/DebugFissionDWP
|
||||
|
@ -266,9 +266,15 @@ exit_inferior_1 (struct inferior *inftoex, int silent)
|
||||
inf->vfork_parent->vfork_child = NULL;
|
||||
inf->vfork_parent = NULL;
|
||||
}
|
||||
if (inf->vfork_child != NULL)
|
||||
{
|
||||
inf->vfork_child->vfork_parent = NULL;
|
||||
inf->vfork_child = NULL;
|
||||
}
|
||||
|
||||
inf->has_exit_code = 0;
|
||||
inf->exit_code = 0;
|
||||
inf->pending_detach = 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -663,6 +663,8 @@ handle_vfork_child_exec_or_exit (int exec)
|
||||
|
||||
/* follow-fork child, detach-on-fork on. */
|
||||
|
||||
inf->vfork_parent->pending_detach = 0;
|
||||
|
||||
if (!exec)
|
||||
{
|
||||
/* If we're handling a child exit, then inferior_ptid
|
||||
|
@ -1,3 +1,10 @@
|
||||
2012-11-05 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.base/foll-vfork.exp (vfork_relations_in_info_inferiors): New
|
||||
procedure.
|
||||
(do_vfork_and_follow_child_tests_exec)
|
||||
(do_vfork_and_follow_child_tests_exit): Call it.
|
||||
|
||||
2012-11-05 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.base/foll-vfork.c (main): Call perror and _exit if execlp()
|
||||
|
@ -388,6 +388,58 @@ proc tcatch_vfork_then_child_follow_exit {} {
|
||||
exec sleep 1
|
||||
}}
|
||||
|
||||
proc vfork_relations_in_info_inferiors { variant } {
|
||||
with_test_prefix "vfork relations in info inferiors" {
|
||||
global gdb_prompt
|
||||
|
||||
setup_gdb
|
||||
|
||||
gdb_test_no_output "set follow-fork child"
|
||||
|
||||
set test "step over vfork"
|
||||
gdb_test_multiple "next" $test {
|
||||
-re "Attaching after .* vfork to child.*if \\(pid == 0\\).*$gdb_prompt " {
|
||||
pass "$test"
|
||||
}
|
||||
}
|
||||
|
||||
gdb_test "info inferiors" \
|
||||
".*is vfork child of inferior 1.*is vfork parent of inferior 2" \
|
||||
"info inferiors shows vfork parent/child relation"
|
||||
|
||||
if { $variant == "exec" } {
|
||||
global srcfile2
|
||||
|
||||
set linenum [gdb_get_line_number "printf(\"Hello from vforked-prog" ${srcfile2}]
|
||||
set test "continue to bp"
|
||||
gdb_test_multiple "continue" $test {
|
||||
-re ".*xecuting new program.*Breakpoint.*vforked-prog.c:${linenum}.*$gdb_prompt " {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
} else {
|
||||
set test "continue to child exit"
|
||||
gdb_test_multiple "continue" $test {
|
||||
-re "exited normally.*$gdb_prompt " {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set test "vfork relation no longer appears in info inferiors"
|
||||
gdb_test_multiple "info inferiors" $test {
|
||||
-re "is vfork child of inferior 1.*$gdb_prompt $" {
|
||||
fail $test
|
||||
}
|
||||
-re "is vfork parent of inferior 2.*$gdb_prompt $" {
|
||||
fail $test
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
pass $test
|
||||
}
|
||||
}
|
||||
}}
|
||||
|
||||
proc do_vfork_and_follow_parent_tests {} {
|
||||
global gdb_prompt
|
||||
|
||||
@ -435,6 +487,13 @@ proc do_vfork_and_follow_child_tests_exec {} {
|
||||
# catchpoints.
|
||||
# ??rehrauer: NYI. Will add testpoints here when implemented.
|
||||
#
|
||||
|
||||
# Step over a vfork in the child, do "info inferiors" and check the
|
||||
# parent/child relation is displayed. Run the child over the exec,
|
||||
# and confirm the relation is no longer displayed in "info
|
||||
# inferiors".
|
||||
#
|
||||
vfork_relations_in_info_inferiors "exec"
|
||||
}
|
||||
|
||||
proc do_vfork_and_follow_child_tests_exit {} {
|
||||
@ -446,6 +505,13 @@ proc do_vfork_and_follow_child_tests_exit {} {
|
||||
# Try catching a vfork, and stepping out to the child.
|
||||
#
|
||||
tcatch_vfork_then_child_follow_exit
|
||||
|
||||
# Step over a vfork in the child, do "info inferiors" and check the
|
||||
# parent/child relation is displayed. Run the child to completion,
|
||||
# and confirm the relation is no longer displayed in "info
|
||||
# inferiors".
|
||||
#
|
||||
vfork_relations_in_info_inferiors "exit"
|
||||
}
|
||||
|
||||
with_test_prefix "check vfork support" {
|
||||
|
Loading…
Reference in New Issue
Block a user