1# Copyright (C) 2019-2020 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. */ 15 16# Test following a vfork child that exits, when the vfork parent is a 17# threaded program, and it's a non-main thread that vforks. 18 19standard_testfile 20 21if {[build_executable "failed to prepare" $testfile $srcfile {debug pthreads}]} { 22 return -1 23} 24 25# DETACH indicates whether "set detach-on-fork" is enabled. It is 26# either "on" or "off". 27 28proc test_vfork {detach} { 29 global binfile 30 31 clean_restart $binfile 32 33 if ![runto_main] then { 34 fail "can't run to main" 35 return 0 36 } 37 38 gdb_test_no_output "set follow-fork-mode child" 39 gdb_test_no_output "set detach-on-fork $detach" 40 41 if {$detach == "off"} { 42 gdb_test "continue" \ 43 [multi_line \ 44 "Attaching after .* vfork to child .*" \ 45 ".*New inferior 2 .*" \ 46 ".*Inferior 2 .*exited normally.*"] 47 } else { 48 gdb_test "continue" \ 49 [multi_line \ 50 "Attaching after .* vfork to child .*" \ 51 ".*New inferior 2 .*" \ 52 ".*Detaching vfork parent process .* after child exit.*" \ 53 ".*Inferior 1 .* detached.*" \ 54 ".*Inferior 2 .*exited normally.*"] 55 } 56} 57 58foreach_with_prefix detach-on-fork {"off" "on"} { 59 test_vfork ${detach-on-fork} 60} 61