# Copyright (C) 2019-2023 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 . */ # Test following a vfork child that execs, when the vfork parent is a # threaded program, and it's a non-main thread that vforks. standard_testfile if {[build_executable "failed to prepare" $testfile $srcfile {debug pthreads}]} { return -1 } # DETACH indicates whether "set detach-on-fork" is enabled. It is # either "on" or "off". proc test_vfork {detach} { global binfile clean_restart $binfile if {![runto_main]} { return 0 } delete_breakpoints gdb_test_no_output "set follow-fork-mode child" gdb_test_no_output "set detach-on-fork $detach" if {$detach == "off"} { gdb_test "continue" \ [multi_line \ "Attaching after .* vfork to child .*" \ ".*New inferior 2 .*" \ ".* is executing new program: .*" \ ".*Inferior 2 .* exited normally.*"] } else { gdb_test "continue" \ [multi_line \ "Attaching after .* vfork to child .*" \ ".*New inferior 2 .*" \ ".*Detaching vfork parent process .* after child exec.*" \ ".*Inferior 1 .* detached.*" \ ".*is executing new program: .*" \ ".*Inferior 2 .*exited normally.*"] } } foreach_with_prefix detach-on-fork {"off" "on"} { test_vfork ${detach-on-fork} }