1# Copyright 2008-2019 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 continue 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 if [get_compiler_info] { 44 return -1 45 } 46 47 set test_spawn_id [spawn_wait_for_attach $binfile] 48 set testpid [spawn_id_get_pid $test_spawn_id] 49 50 # Stop the program 51 remote_exec build "kill -s STOP ${testpid}" 52 53 # Start with clean gdb 54 gdb_exit 55 gdb_start 56 gdb_reinitialize_dir $srcdir/$subdir 57 gdb_load ${binfile} 58 59 # Verify that we can attach to the stopped process. 60 61 set test "$threadtype: attach2 to stopped, after setting file" 62 gdb_test_multiple "attach $testpid" "$test" { 63 -re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" { 64 pass "$test" 65 } 66 } 67 68 # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. 69 if {[string equal $threadtype threaded]} { 70 gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: attach2 to stopped bt" 71 } else { 72 gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach2 to stopped bt" 73 } 74 75 gdb_exit 76 77 # Avoid some race: 78 sleep 2 79 80 # At this point, the process may be sleeping or T (Stopped) depending on 81 # the Linux kernel version. The behavior is not tested as it is not 82 # dependent on GDB. 83 84 kill_wait_spawned_process $test_spawn_id 85} 86 87# build the test case first without threads 88# 89if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { 90 untested "attach-stopped.exp (unthreaded)" 91 return -1 92} 93 94corefunc nonthreaded 95 96# build the test case first without threads 97# 98if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DUSE_THREADS}] != "" } { 99 untested "attach-stopped.exp (threaded)" 100 return -1 101} 102 103corefunc threaded 104 105return 0 106