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