Commit | Line | Data |
---|---|---|
9b254dd1 | 1 | # Copyright (C) 1998, 2007, 2008 Free Software Foundation, Inc. |
7be570e7 JM |
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 | |
e22f8b7c | 5 | # the Free Software Foundation; either version 3 of the License, or |
7be570e7 JM |
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 | |
e22f8b7c | 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
7be570e7 JM |
15 | |
16 | # Please email any bugs, comments, and/or additions to this file to: | |
17 | # bug-gdb@prep.ai.mit.edu | |
18 | ||
19 | ||
20 | if $tracelevel then { | |
21 | strace $tracelevel | |
22 | } | |
23 | ||
24 | if { [skip_hp_tests] } then { continue } | |
25 | ||
26 | set testfile1 "average" | |
27 | set testfile2 "sum" | |
28 | set testfile "xdb-test" | |
29 | set binfile1 ${objdir}/${subdir}/${testfile1} | |
30 | set binfile2 ${objdir}/${subdir}/${testfile2} | |
31 | set binfile ${objdir}/${subdir}/${testfile} | |
32 | ||
33 | if { [gdb_compile "${srcdir}/${subdir}/average.c" "${binfile1}.o" object {debug}] != "" } { | |
b60f0898 JB |
34 | untested xdb3.exp |
35 | return -1 | |
7be570e7 JM |
36 | } |
37 | ||
38 | if { [gdb_compile "${srcdir}/${subdir}/sum.c" "${binfile2}.o" object {debug}] != "" } { | |
b60f0898 JB |
39 | untested xdb3.exp |
40 | return -1 | |
7be570e7 JM |
41 | } |
42 | ||
43 | if { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] != "" } { | |
b60f0898 JB |
44 | untested xdb3.exp |
45 | return -1 | |
7be570e7 JM |
46 | } |
47 | ||
48 | if [get_compiler_info ${binfile}] { | |
49 | return -1; | |
50 | } | |
51 | if { $gcc_compiled } then { continue } | |
52 | ||
53 | ||
54 | proc xdb_reinitialize_dir { subdir } { | |
55 | global gdb_prompt | |
56 | ||
57 | send_gdb "D\n" | |
58 | gdb_expect { | |
59 | -re "Reinitialize source path to empty.*y or n. " { | |
60 | send_gdb "y\n" | |
61 | gdb_expect { | |
62 | -re "Source directories searched.*$gdb_prompt $" { | |
63 | send_gdb "D $subdir\n" | |
64 | gdb_expect { | |
65 | -re "Source directories searched.*$gdb_prompt $" { | |
66 | verbose "Dir set to $subdir" | |
67 | } | |
68 | -re ".*$gdb_prompt $" { | |
69 | perror "Dir \"$subdir\" failed." | |
70 | } | |
71 | } | |
72 | } | |
73 | -re ".*$gdb_prompt $" { | |
74 | perror "Dir \"$subdir\" failed." | |
75 | } | |
76 | } | |
77 | } | |
78 | -re ".*$gdb_prompt $" { | |
79 | perror "Dir \"$subdir\" failed." | |
80 | } | |
81 | } | |
82 | } | |
83 | ||
84 | # | |
85 | #test_search | |
86 | # | |
87 | proc test_search { } { | |
88 | gdb_test "set listsize 4" "" | |
89 | gdb_test "list average.c:1" "1\[ \t\]+/. This is a sample .*" | |
90 | gdb_test "/ print_average" "17\[ \t\]+void print_average\\(int \\*list.*" | |
91 | gdb_test "/ print_average" "19\[ \t\]+void print_average\\(list, low, high\\)" | |
92 | gdb_test "/ print_average" "42\[ \t\]+print_average \\(my_list, first, last\\);" | |
93 | gdb_test "? print_average" "19\[ \t\]+void print_average\\(list, low, high\\)" | |
94 | gdb_test "? sum" "9\[ \t]+extern int sum\\(\\);" | |
95 | } | |
96 | ||
97 | # | |
98 | #test_viewing_loc | |
99 | # | |
100 | proc test_viewing_loc { } { | |
101 | gdb_test "L" "No stack." | |
102 | gdb_test "break main" "" | |
103 | gdb_test "R" "" | |
104 | gdb_test "L" "#0\[ \t\]+main \\(\\) at.*average.c:38\r\n38\[ \t\]+int first = 0, last = 0;" | |
105 | } | |
106 | ||
107 | # | |
108 | #test_dir_list | |
109 | # | |
110 | proc test_dir_list { } { | |
111 | gdb_test "ld" "Source directories searched: .*" | |
112 | } | |
113 | ||
114 | # | |
115 | #test_list_sources | |
116 | # | |
117 | proc test_list_sources { } { | |
ca344dff | 118 | if [istarget "hppa64-*-*"] { |
7be570e7 JM |
119 | gdb_test "lf" "Source files for which symbols have been read in:\r\n\r\n.*average\\.c.*Source files for which symbols will be read in on demand:\r\n\r\nglobals,.*\[se\]\[un\]\[md\]\\.c.*\[se\]\[un\]\[md\]\\.c" |
120 | } else { | |
121 | gdb_test "lf" "Source files for which symbols have been read in:\r\n\r\n.*average\\.c.*\r\n\r\nSource files for which symbols will be read in on demand:\r\n\r\nglobals, end\\.c,.*sum\\.c" | |
122 | } | |
123 | } | |
124 | # | |
125 | #test_vlist | |
126 | # | |
127 | proc test_vlist { } { | |
128 | gdb_test "v main" "34\[ \t\]+main \\(\\)\r\n35\[ \t\]+#endif\r\n36\[ \t\]+.\r\n37\[ \t\]+char c;" | |
129 | } | |
130 | ||
131 | # | |
132 | #test_va | |
133 | # | |
134 | proc test_va { } { | |
ca344dff | 135 | if [istarget "hppa64-*-*"] { |
7be570e7 JM |
136 | gdb_test "va main" "Dump of assembler code for function main:\r\n.*0x.* <main>:\[ \t\]+std %rp,-0x10\\(%sp\\)\r\n0x.* <main\\+4>:\[ \t\]+std,ma %r3,0xd0\\(%sp\\)\r\n.*0x.* <main\\+8>:\[ \t\]+std %r4,-0xc8\\(%sp\\)\r\n.*0x.* <main\\+12>:\[ \t\]+copy %ret1,%r3\r\n.*" |
137 | } else { | |
138 | gdb_test "va main" "Dump of assembler code for function main:\r\n.*0x.* <main>:\[ \t\]+stw %rp,-0x14\\(%sr0,%sp\\)\r\n0x.* <main\\+4>:\[ \t\]+ldo 0x\[48\]0\\(%sp\\),%sp\r\n.*0x.* <main\\+8>:\[ \t\]+stw %r0,-0x.*\\(%sr0,%sp\\)\r\n.*0x.* <main\\+12>:\[ \t\]+stw %r0,-0x.*\\(%sr0,%sp\\)\r\n.*" | |
139 | } | |
140 | } | |
141 | ||
142 | # | |
143 | #test_list_globals | |
144 | # | |
145 | proc test_list_globals { } { | |
146 | gdb_test "lg" "All defined variables:\r\n\r\nFile globals:.*" | |
147 | # gdb_test "lg" "All defined variables:\r\n\r\nFile globals:\r\nchar __buffer.512.;\r\nint __d_eh_catch_catch;\r\nint __d_eh_catch_throw;.*" | |
148 | } | |
149 | ||
150 | # | |
151 | #test_list_registers | |
152 | # | |
153 | proc test_list_registers { } { | |
ca344dff | 154 | if [istarget "hppa64-*-*"] { |
7be570e7 JM |
155 | gdb_test "lr" "\[ \t\]+flags:.*r17:.*pcsqh:.*cr0:.*\r\n\[ \t\]+r1:.*r18:.*pcoqt:.*cr8:.*" |
156 | } else { | |
157 | gdb_test "lr" "\[ \t\]+flags:.*r18:.*pcsqt:.*ccr:.*\r\n\[ \t\]+r1:.*r19:.*eiem:.*cr12:.*" | |
158 | } | |
159 | gdb_test "lr r1" "r1 .*" | |
160 | } | |
161 | ||
162 | # | |
163 | #test_backtrace | |
164 | # | |
165 | proc test_backtrace { } { | |
166 | gdb_test "t" "#0 main \\(\\) at.*average.c:39" | |
167 | gdb_test "T" "#0 main \\(\\) at.*average.c:39\r\n\[ \t\]+c = *.*\r\n\[ \t\]+first = 0\r\n\[ \t\]+last = 0" | |
168 | ||
169 | gdb_test "break sum" "" | |
170 | gdb_test "cont" "" | |
171 | gdb_test "next" | |
172 | ||
173 | gdb_test "t" "#0 sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n#1 0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n#2 0x.* in main \\(\\) at.*average\.c:42" | |
174 | gdb_test "t 1" "#0 sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\(More stack frames follow\.\.\.\\)" | |
175 | gdb_test "T" "#0 sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\[ \t\]+i = 0\r\n\[ \t\]+s = 0\r\n#1 0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n\[ \t\]+total = 0\r\n\[ \t\]+num_elements = 0\r\n\[ \t\]+average = 0\r\n#2 0x.* in main \\(\\) at.*average\.c:42\r\n\[ \t\]+c = *.*\r\n\[ \t\]+first = 0\r\n\[ \t\]+last = 9" | |
176 | gdb_test "T 1" "#0 sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\[ \t\]+i = 0\r\n\[ \t\]+s = 0\r\n\\(More stack frames follow\.\.\.\\)" | |
177 | ||
178 | gdb_test "V" "#0 sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\12\[ \t\]+for \\(i = low;.*\\)" | |
179 | gdb_test "V 1" "#1 0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n24\[ \t\]+total = sum\\(list, low, high\\);" | |
180 | } | |
181 | ||
182 | # | |
183 | # test_go | |
184 | # | |
185 | proc test_go { } { | |
186 | gdb_test "break main" "" | |
187 | gdb_test "R" "" | |
188 | ||
189 | gdb_test "g +1" "Breakpoint.*at 0x.*: file.*average\.c, line 39\.\r\nContinuing at 0x.*\.\r\nmain \\(\\) at.*average\.c:39\r\n39\[ \t\]+last = num-1;" | |
190 | gdb_test "g 42" "Breakpoint.*at 0x.*: file.*average\.c, line 42\.\r\nContinuing at 0x.*\.\r\nmain \\(\\) at.*average\.c:42\r\n42\[ \t\]+print_average \\(my_list, first, last\\);" | |
191 | ||
192 | } | |
193 | ||
194 | # | |
195 | #test_breakpoints | |
196 | # | |
197 | proc test_breakpoints { } { | |
198 | global gdb_prompt | |
199 | ||
200 | gdb_test "sb" "" | |
201 | gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep n.*in main at.*average\.c:38.*" | |
202 | gdb_test "ab" "" | |
203 | gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:38.*" | |
204 | gdb_test "ba sum" "Breakpoint.*at.*: file.*sum\.c, line 11\." | |
205 | gdb_test "cont" "" | |
206 | gdb_test "bx" "Breakpoint.*at.*: file.*sum.c, line 15\." | |
207 | #gdb_test "bx if (1)" "Breakpoint.*at.*: file.*sum.c, line 15\." | |
208 | gdb_test "bx 1" "Breakpoint.*at.*: file.*average.c, line 29\." | |
209 | gdb_test "bx 1 if (1)" "Breakpoint.*at.*: file.*average.c, line 29\." | |
210 | gdb_test "bc 1 2" "Will ignore next 2 crossings of breakpoint 1\." | |
211 | gdb_test "lb 1" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:38\r\n.*breakpoint already hit 1 time\r\n.*ignore next 2 hits.*" | |
212 | ||
213 | send_gdb "db\n" | |
214 | gdb_expect { | |
215 | -re "Delete all breakpoints.*y or n. $" { | |
216 | send_gdb "y\n" | |
217 | exp_continue | |
218 | } | |
219 | -re "y\r\n$gdb_prompt $" {} | |
220 | -re ".*$gdb_prompt $" { # This happens if there were no breakpoints | |
221 | } | |
222 | timeout { perror "Delete all breakpoints (timeout)" ; return } | |
223 | } | |
224 | send_gdb "lb\n" | |
225 | gdb_expect { | |
226 | -re "No breakpoints or watchpoints..*$gdb_prompt $" {} | |
227 | -re ".*$gdb_prompt $" { perror "breakpoints not deleted" ; return } | |
228 | timeout { perror "info breakpoints (timeout)" ; return } | |
229 | } | |
230 | gdb_test "xbreak" "Breakpoint.*at.*file.*sum.c, line 15." | |
231 | gdb_test "xbreak print_average" "Breakpoint.*at.*file.*average.c, line 29." | |
232 | gdb_test "xbreak if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*sum.c, line 15." | |
233 | gdb_test "xbreak print_average if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*average.c, line 29." | |
234 | ||
235 | send_gdb "lb\n" | |
236 | gdb_expect { | |
237 | -re "Num Type Disp Enb Address What.*breakpoint keep y.*sum.c:15.*breakpoint keep y.*average.c:29.*breakpoint keep y.*sum.c:15.*stop only if 1.*breakpoint keep y.*average.c:29.*stop only if 1.*$gdb_prompt $" {pass "lb on xbreaks"} | |
238 | -re ".*$gdb_prompt $" { fail "breakpoints not deleted"} | |
239 | timeout { fail "info breakpoints (timeout)" } | |
240 | } | |
241 | ||
242 | } | |
243 | ||
244 | # | |
245 | # test_signals | |
246 | # | |
247 | proc test_signals { } { | |
248 | gdb_test "handle SIGTERM nostop noprint" "" | |
249 | gdb_test "z 15 s" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*Yes.*Yes.*Yes.*Terminated" | |
250 | gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*Yes.*Terminated" | |
251 | gdb_test "z 15 i" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated" | |
252 | gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*Yes.*No.*Terminated" | |
253 | gdb_test "z 15 Q" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated" | |
254 | gdb_test "lz" "Signal.*Stop.*Print.*Pass to program.*Description\r\n\r\nSIGHUP.*Yes.*" | |
255 | } | |
256 | ||
257 | ||
258 | ||
259 | # Start with a fresh gdb. | |
260 | global GDBFLAGS | |
261 | set saved_gdbflags $GDBFLAGS | |
262 | ||
263 | set GDBFLAGS "$GDBFLAGS --xdb" | |
264 | ||
265 | gdb_exit | |
266 | gdb_start | |
267 | ||
268 | xdb_reinitialize_dir $srcdir/$subdir | |
269 | ||
270 | gdb_load ${binfile} | |
271 | send_gdb "set width 0\n" | |
272 | gdb_expect -re "$gdb_prompt $" | |
273 | test_search | |
274 | test_viewing_loc | |
275 | test_dir_list | |
276 | test_list_sources | |
277 | test_vlist | |
278 | test_va | |
279 | gdb_test "next" | |
280 | gdb_test "l" "No arguments.\r\nc = *.*\r\nfirst = 0\r\nlast = 0" | |
281 | #test_list_globals | |
282 | test_list_registers | |
283 | test_backtrace | |
284 | ||
285 | # Start with a fresh gdb. | |
286 | ||
287 | gdb_exit | |
288 | gdb_start | |
289 | xdb_reinitialize_dir $srcdir/$subdir | |
290 | ||
291 | gdb_load ${binfile} | |
292 | send_gdb "set width 0\n" | |
293 | gdb_expect -re "$gdb_prompt $" | |
294 | test_go | |
295 | ||
296 | ||
297 | gdb_exit | |
298 | gdb_start | |
299 | xdb_reinitialize_dir $srcdir/$subdir | |
300 | ||
301 | gdb_load ${binfile} | |
302 | send_gdb "set width 0\n" | |
303 | gdb_expect -re "$gdb_prompt $" | |
304 | gdb_test "break main" "" | |
305 | gdb_test "R" "" | |
306 | gdb_test "S" "39\[ \t\]+last = num-1;" | |
307 | test_breakpoints | |
308 | test_signals | |
309 | gdb_test "sm" "" | |
310 | gdb_test "info set" ".*pagination: State of pagination is off.*" | |
311 | gdb_test "am" "" | |
312 | gdb_test "info set" ".*pagination: State of pagination is on.*" | |
313 | gdb_exit | |
314 | ||
315 | set GDBFLAGS $saved_gdbflags | |
316 | ||
317 | return 0 | |
318 | ||
319 | ||
320 | ||
321 | ||
322 | ||
323 |