1# Copyright 2008-2023 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# This test was created by modifying attach.exp. 17# This file was created by Jeff Johnston <jjohnstn@redhat.com>. 18# This file was updated by Jan Kratochvil <jan.kratochvil@redhat.com>. 19 20# This test only works on Linux 21if { ![isnative] || [is_remote host] || [use_gdb_stub] 22 || ![istarget *-linux*] } { 23 return 24} 25 26standard_testfile 27set escapedbinfile [string_to_regexp $binfile] 28 29#execute_anywhere "rm -f ${binfile}" 30remote_exec build "rm -f ${binfile}" 31# For debugging this test 32# 33#log_user 1 34 35proc corefunc { threadtype } { 36 global srcfile 37 global binfile 38 global escapedbinfile 39 global srcdir 40 global subdir 41 global gdb_prompt 42 43 set test_spawn_id [spawn_wait_for_attach $binfile] 44 set testpid [spawn_id_get_pid $test_spawn_id] 45 46 # Stop the program 47 remote_exec build "kill -s STOP ${testpid}" 48 49 # Start with clean gdb 50 gdb_exit 51 gdb_start 52 gdb_reinitialize_dir $srcdir/$subdir 53 gdb_load ${binfile} 54 55 # Verify that we can attach to the stopped process. 56 57 set test "$threadtype: attach2 to stopped, after setting file" 58 gdb_test_multiple "attach $testpid" "$test" { 59 -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { 60 pass "$test" 61 } 62 } 63 64 # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. 65 if {[string equal $threadtype threaded]} { 66 gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach2 to stopped bt" 67 } else { 68 gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach2 to stopped bt" 69 } 70 71 gdb_exit 72 73 # Avoid some race: 74 sleep 2 75 76 # At this point, the process may be sleeping or T (Stopped) depending on 77 # the Linux kernel version. The behavior is not tested as it is not 78 # dependent on GDB. 79 80 kill_wait_spawned_process $test_spawn_id 81} 82 83# build the test case first without threads 84# 85if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { 86 untested "attach-stopped.exp (unthreaded)" 87 return -1 88} 89 90corefunc nonthreaded 91 92# build the test case first without threads 93# 94if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DUSE_THREADS}] != "" } { 95 untested "attach-stopped.exp (threaded)" 96 return -1 97} 98 99corefunc threaded 100 101return 0 102