OLD | NEW |
1 # Copyright 2008-2012 Free Software Foundation, Inc. | 1 # Copyright 2008-2012 Free Software Foundation, Inc. |
2 | 2 |
3 # This program is free software; you can redistribute it and/or modify | 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 | 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 | 5 # the Free Software Foundation; either version 3 of the License, or |
6 # (at your option) any later version. | 6 # (at your option) any later version. |
7 # | 7 # |
8 # This program is distributed in the hope that it will be useful, | 8 # This program is distributed in the hope that it will be useful, |
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 # GNU General Public License for more details. | 11 # GNU General Public License for more details. |
12 # | 12 # |
13 # You should have received a copy of the GNU General Public License | 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/>. | 14 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
15 | 15 |
16 # This test was created by modifying attach.exp. | 16 # This test was created by modifying attach.exp. |
17 # This file was created by Jeff Johnston <jjohnstn@redhat.com>. | 17 # This file was created by Jeff Johnston <jjohnstn@redhat.com>. |
18 # This file was updated by Jan Kratochvil <jan.kratochvil@redhat.com>. | 18 # This file was updated by Jan Kratochvil <jan.kratochvil@redhat.com>. |
19 | 19 |
20 # This test only works on Linux | 20 # This test only works on Linux |
21 if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub] | 21 if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub] |
22 || ![istarget *-linux*] } { | 22 || ![istarget *-linux*] } { |
23 continue | 23 continue |
24 } | 24 } |
25 | 25 |
26 set testfile "attach-stopped" | 26 standard_testfile |
27 set srcfile ${testfile}.c | 27 set escapedbinfile [string_to_regexp $binfile] |
28 set binfile ${objdir}/${subdir}/${testfile} | |
29 set escapedbinfile [string_to_regexp ${objdir}/${subdir}/${testfile}] | |
30 | 28 |
31 #execute_anywhere "rm -f ${binfile}" | 29 #execute_anywhere "rm -f ${binfile}" |
32 remote_exec build "rm -f ${binfile}" | 30 remote_exec build "rm -f ${binfile}" |
33 # For debugging this test | 31 # For debugging this test |
34 # | 32 # |
35 #log_user 1 | 33 #log_user 1 |
36 | 34 |
37 proc corefunc { threadtype } { | 35 proc corefunc { threadtype } { |
38 global srcfile | 36 global srcfile |
39 global binfile | 37 global binfile |
40 global escapedbinfile | 38 global escapedbinfile |
41 global srcdir | 39 global srcdir |
42 global subdir | 40 global subdir |
43 global gdb_prompt | 41 global gdb_prompt |
44 | 42 |
45 if [get_compiler_info ${binfile}] { | 43 if [get_compiler_info] { |
46 return -1 | 44 return -1 |
47 } | 45 } |
48 | 46 |
49 # Start the program running and then wait for a bit, to be sure | 47 # Start the program running and then wait for a bit, to be sure |
50 # that it can be attached to. | 48 # that it can be attached to. |
51 | 49 |
52 set testpid [eval exec $binfile &] | 50 set testpid [eval exec $binfile &] |
53 | 51 |
54 # Avoid some race: | 52 # Avoid some race: |
55 sleep 2 | 53 sleep 2 |
(...skipping 15 matching lines...) Expand all Loading... |
71 pass "$test" | 69 pass "$test" |
72 } | 70 } |
73 } | 71 } |
74 | 72 |
75 # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. | 73 # ".*sleep.*clone.*" would fail on s390x as bt stops at START_THREAD there. |
76 if {[string equal $threadtype threaded]} { | 74 if {[string equal $threadtype threaded]} { |
77 gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: a
ttach2 to stopped bt" | 75 gdb_test "thread apply all bt" ".*sleep.*start_thread.*" "$threadtype: a
ttach2 to stopped bt" |
78 } else { | 76 } else { |
79 gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach2 to stopped bt" | 77 gdb_test "bt" ".*sleep.*main.*" "$threadtype: attach2 to stopped bt" |
80 } | 78 } |
81 # This breakpoint is there for old/non-x86 kernels not restarting syscalls. | |
82 gdb_breakpoint $srcfile:[gdb_get_line_number "Second sleep"] | |
83 set test "$threadtype: attach2 continue" | |
84 gdb_test_multiple "continue" "continue ($test)" { | |
85 -re "Continuing" { | |
86 pass "continue ($test)" | |
87 } | |
88 } | |
89 | |
90 # For this to work we must be sure to consume the "Continuing." | |
91 # message first, or GDB's signal handler may not be in place. | |
92 after 1000 {send_gdb "\003"} | |
93 set test "$threadtype: attach2 stop interrupt" | |
94 gdb_expect 10 { | |
95 -re "Program received signal SIGINT.*$gdb_prompt $" | |
96 { | |
97 pass $test | |
98 } | |
99 -re "Breakpoint \[0-9\].*$srcfile.*$gdb_prompt $" | |
100 { | |
101 pass $test | |
102 } | |
103 timeout | |
104 { | |
105 fail $test | |
106 } | |
107 } | |
108 | 79 |
109 gdb_exit | 80 gdb_exit |
110 | 81 |
111 # Avoid some race: | 82 # Avoid some race: |
112 sleep 2 | 83 sleep 2 |
113 | 84 |
114 # At this point, the process should be sleeping | 85 # At this point, the process may be sleeping or T (Stopped) depending on |
| 86 # the Linux kernel version. The behavior is not tested as it is not |
| 87 # dependent on GDB. |
115 | 88 |
116 if [catch {open /proc/${testpid}/status r} fileid2] { | |
117 set line2 "NOTFOUND" | |
118 } else { | |
119 gets $fileid2 line1; | |
120 gets $fileid2 line2; | |
121 close $fileid2; | |
122 } | |
123 | |
124 set test "$threadtype: attach2, exit leaves process sleeping" | |
125 if {[string match "*(sleeping)*" $line2]} { | |
126 pass $test | |
127 } else { | |
128 fail $test | |
129 } | |
130 | |
131 # Make sure we don't leave a process around to confuse | |
132 # the next test run (and prevent the compile by keeping | |
133 # the text file busy), in case the "set should_exit" didn't | |
134 # work. | |
135 | |
136 remote_exec build "kill -9 ${testpid}" | 89 remote_exec build "kill -9 ${testpid}" |
137 } | 90 } |
138 | 91 |
139 # build the test case first without threads | 92 # build the test case first without threads |
140 # | 93 # |
141 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
ug}] != "" } { | 94 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
ug}] != "" } { |
142 untested "attach-stopped.exp (unthreaded)" | 95 untested "attach-stopped.exp (unthreaded)" |
143 return -1 | 96 return -1 |
144 } | 97 } |
145 | 98 |
146 corefunc nonthreaded | 99 corefunc nonthreaded |
147 | 100 |
148 # build the test case first without threads | 101 # build the test case first without threads |
149 # | 102 # |
150 if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" execut
able {debug additional_flags=-DUSE_THREADS}] != "" } { | 103 if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" execut
able {debug additional_flags=-DUSE_THREADS}] != "" } { |
151 untested "attach-stopped.exp (threaded)" | 104 untested "attach-stopped.exp (threaded)" |
152 return -1 | 105 return -1 |
153 } | 106 } |
154 | 107 |
155 corefunc threaded | 108 corefunc threaded |
156 | 109 |
157 return 0 | 110 return 0 |
OLD | NEW |