1*b725ae77Skettenis# Copyright (C) 1998 Free Software Foundation, Inc.
2*b725ae77Skettenis
3*b725ae77Skettenis# This program is free software; you can redistribute it and/or modify
4*b725ae77Skettenis# it under the terms of the GNU General Public License as published by
5*b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or
6*b725ae77Skettenis# (at your option) any later version.
7*b725ae77Skettenis#
8*b725ae77Skettenis# This program is distributed in the hope that it will be useful,
9*b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of
10*b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11*b725ae77Skettenis# GNU General Public License for more details.
12*b725ae77Skettenis#
13*b725ae77Skettenis# You should have received a copy of the GNU General Public License
14*b725ae77Skettenis# along with this program; if not, write to the Free Software
15*b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
16*b725ae77Skettenis
17*b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to:
18*b725ae77Skettenis# bug-gdb@prep.ai.mit.edu
19*b725ae77Skettenis
20*b725ae77Skettenis
21*b725ae77Skettenisif $tracelevel then {
22*b725ae77Skettenis        strace $tracelevel
23*b725ae77Skettenis}
24*b725ae77Skettenis
25*b725ae77Skettenisif { [skip_hp_tests] } then { continue }
26*b725ae77Skettenis
27*b725ae77Skettenisset testfile1 "average"
28*b725ae77Skettenisset testfile2 "sum"
29*b725ae77Skettenisset testfile "xdb-test"
30*b725ae77Skettenisset binfile1 ${objdir}/${subdir}/${testfile1}
31*b725ae77Skettenisset binfile2 ${objdir}/${subdir}/${testfile2}
32*b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile}
33*b725ae77Skettenis
34*b725ae77Skettenisif  { [gdb_compile "${srcdir}/${subdir}/average.c" "${binfile1}.o" object {debug}] != "" } {
35*b725ae77Skettenis     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
36*b725ae77Skettenis}
37*b725ae77Skettenis
38*b725ae77Skettenisif  { [gdb_compile "${srcdir}/${subdir}/sum.c" "${binfile2}.o" object {debug}] != "" } {
39*b725ae77Skettenis     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
40*b725ae77Skettenis}
41*b725ae77Skettenis
42*b725ae77Skettenisif  { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] != "" } {
43*b725ae77Skettenis     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
44*b725ae77Skettenis}
45*b725ae77Skettenis
46*b725ae77Skettenisif [get_compiler_info ${binfile}] {
47*b725ae77Skettenis    return -1;
48*b725ae77Skettenis}
49*b725ae77Skettenisif { $gcc_compiled } then { continue }
50*b725ae77Skettenis
51*b725ae77Skettenis
52*b725ae77Skettenisproc xdb_reinitialize_dir { subdir } {
53*b725ae77Skettenis    global gdb_prompt
54*b725ae77Skettenis
55*b725ae77Skettenis   send_gdb "D\n"
56*b725ae77Skettenis    gdb_expect {
57*b725ae77Skettenis        -re "Reinitialize source path to empty.*y or n. " {
58*b725ae77Skettenis            send_gdb "y\n"
59*b725ae77Skettenis            gdb_expect {
60*b725ae77Skettenis                -re "Source directories searched.*$gdb_prompt $" {
61*b725ae77Skettenis                    send_gdb "D $subdir\n"
62*b725ae77Skettenis                    gdb_expect {
63*b725ae77Skettenis                        -re "Source directories searched.*$gdb_prompt $" {
64*b725ae77Skettenis                            verbose "Dir set to $subdir"
65*b725ae77Skettenis                        }
66*b725ae77Skettenis                        -re ".*$gdb_prompt $" {
67*b725ae77Skettenis                            perror "Dir \"$subdir\" failed."
68*b725ae77Skettenis                        }
69*b725ae77Skettenis                    }
70*b725ae77Skettenis                }
71*b725ae77Skettenis                -re ".*$gdb_prompt $" {
72*b725ae77Skettenis                    perror "Dir \"$subdir\" failed."
73*b725ae77Skettenis                }
74*b725ae77Skettenis            }
75*b725ae77Skettenis        }
76*b725ae77Skettenis        -re ".*$gdb_prompt $" {
77*b725ae77Skettenis            perror "Dir \"$subdir\" failed."
78*b725ae77Skettenis        }
79*b725ae77Skettenis    }
80*b725ae77Skettenis}
81*b725ae77Skettenis
82*b725ae77Skettenis#
83*b725ae77Skettenis#test_search
84*b725ae77Skettenis#
85*b725ae77Skettenisproc test_search { } {
86*b725ae77Skettenis    gdb_test "set listsize 4" ""
87*b725ae77Skettenis    gdb_test "list average.c:1" "1\[ \t\]+/. This is a sample .*"
88*b725ae77Skettenis    gdb_test "/ print_average" "17\[ \t\]+void print_average\\(int \\*list.*"
89*b725ae77Skettenis    gdb_test "/ print_average" "19\[ \t\]+void print_average\\(list, low, high\\)"
90*b725ae77Skettenis    gdb_test "/ print_average" "42\[ \t\]+print_average \\(my_list, first, last\\);"
91*b725ae77Skettenis    gdb_test "? print_average" "19\[ \t\]+void print_average\\(list, low, high\\)"
92*b725ae77Skettenis    gdb_test "? sum" "9\[ \t]+extern int sum\\(\\);"
93*b725ae77Skettenis}
94*b725ae77Skettenis
95*b725ae77Skettenis#
96*b725ae77Skettenis#test_viewing_loc
97*b725ae77Skettenis#
98*b725ae77Skettenisproc test_viewing_loc { } {
99*b725ae77Skettenis    gdb_test "L" "No stack."
100*b725ae77Skettenis    gdb_test "break main" ""
101*b725ae77Skettenis    gdb_test "R" ""
102*b725ae77Skettenis    gdb_test "L" "#0\[ \t\]+main \\(\\) at.*average.c:38\r\n38\[ \t\]+int first = 0, last = 0;"
103*b725ae77Skettenis}
104*b725ae77Skettenis
105*b725ae77Skettenis#
106*b725ae77Skettenis#test_dir_list
107*b725ae77Skettenis#
108*b725ae77Skettenisproc test_dir_list { } {
109*b725ae77Skettenis    gdb_test "ld" "Source directories searched: .*"
110*b725ae77Skettenis}
111*b725ae77Skettenis
112*b725ae77Skettenis#
113*b725ae77Skettenis#test_list_sources
114*b725ae77Skettenis#
115*b725ae77Skettenisproc test_list_sources { } {
116*b725ae77Skettenis    if [istarget "hppa64-*-*"] {
117*b725ae77Skettenis	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"
118*b725ae77Skettenis    } else {
119*b725ae77Skettenis	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"
120*b725ae77Skettenis    }
121*b725ae77Skettenis}
122*b725ae77Skettenis#
123*b725ae77Skettenis#test_vlist
124*b725ae77Skettenis#
125*b725ae77Skettenisproc test_vlist { } {
126*b725ae77Skettenis    gdb_test "v main" "34\[ \t\]+main \\(\\)\r\n35\[ \t\]+#endif\r\n36\[ \t\]+.\r\n37\[ \t\]+char c;"
127*b725ae77Skettenis}
128*b725ae77Skettenis
129*b725ae77Skettenis#
130*b725ae77Skettenis#test_va
131*b725ae77Skettenis#
132*b725ae77Skettenisproc test_va { } {
133*b725ae77Skettenis    if [istarget "hppa64-*-*"] {
134*b725ae77Skettenis	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.*"
135*b725ae77Skettenis    } else {
136*b725ae77Skettenis	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.*"
137*b725ae77Skettenis    }
138*b725ae77Skettenis}
139*b725ae77Skettenis
140*b725ae77Skettenis#
141*b725ae77Skettenis#test_list_globals
142*b725ae77Skettenis#
143*b725ae77Skettenisproc test_list_globals { } {
144*b725ae77Skettenis    gdb_test "lg" "All defined variables:\r\n\r\nFile globals:.*"
145*b725ae77Skettenis#    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;.*"
146*b725ae77Skettenis}
147*b725ae77Skettenis
148*b725ae77Skettenis#
149*b725ae77Skettenis#test_list_registers
150*b725ae77Skettenis#
151*b725ae77Skettenisproc test_list_registers { } {
152*b725ae77Skettenis    if [istarget "hppa64-*-*"] {
153*b725ae77Skettenis	gdb_test "lr" "\[ \t\]+flags:.*r17:.*pcsqh:.*cr0:.*\r\n\[ \t\]+r1:.*r18:.*pcoqt:.*cr8:.*"
154*b725ae77Skettenis    } else {
155*b725ae77Skettenis	gdb_test "lr" "\[ \t\]+flags:.*r18:.*pcsqt:.*ccr:.*\r\n\[ \t\]+r1:.*r19:.*eiem:.*cr12:.*"
156*b725ae77Skettenis    }
157*b725ae77Skettenis    gdb_test "lr r1" "r1 .*"
158*b725ae77Skettenis}
159*b725ae77Skettenis
160*b725ae77Skettenis#
161*b725ae77Skettenis#test_backtrace
162*b725ae77Skettenis#
163*b725ae77Skettenisproc test_backtrace { } {
164*b725ae77Skettenis    gdb_test "t" "#0  main \\(\\) at.*average.c:39"
165*b725ae77Skettenis    gdb_test "T" "#0  main \\(\\) at.*average.c:39\r\n\[ \t\]+c = *.*\r\n\[ \t\]+first = 0\r\n\[ \t\]+last = 0"
166*b725ae77Skettenis
167*b725ae77Skettenis    gdb_test "break sum" ""
168*b725ae77Skettenis    gdb_test "cont" ""
169*b725ae77Skettenis    gdb_test "next"
170*b725ae77Skettenis
171*b725ae77Skettenis    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"
172*b725ae77Skettenis    gdb_test "t 1" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\(More stack frames follow\.\.\.\\)"
173*b725ae77Skettenis    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"
174*b725ae77Skettenis    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\.\.\.\\)"
175*b725ae77Skettenis
176*b725ae77Skettenis    gdb_test "V" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\12\[ \t\]+for \\(i = low;.*\\)"
177*b725ae77Skettenis    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\\);"
178*b725ae77Skettenis}
179*b725ae77Skettenis
180*b725ae77Skettenis#
181*b725ae77Skettenis# test_go
182*b725ae77Skettenis#
183*b725ae77Skettenisproc test_go { }  {
184*b725ae77Skettenis    gdb_test "break main" ""
185*b725ae77Skettenis    gdb_test "R" ""
186*b725ae77Skettenis
187*b725ae77Skettenis    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;"
188*b725ae77Skettenis    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\\);"
189*b725ae77Skettenis
190*b725ae77Skettenis}
191*b725ae77Skettenis
192*b725ae77Skettenis#
193*b725ae77Skettenis#test_breakpoints
194*b725ae77Skettenis#
195*b725ae77Skettenisproc test_breakpoints { } {
196*b725ae77Skettenis    global gdb_prompt
197*b725ae77Skettenis
198*b725ae77Skettenis    gdb_test "sb" ""
199*b725ae77Skettenis    gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep n.*in main at.*average\.c:38.*"
200*b725ae77Skettenis    gdb_test "ab" ""
201*b725ae77Skettenis    gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:38.*"
202*b725ae77Skettenis    gdb_test "ba sum" "Breakpoint.*at.*: file.*sum\.c, line 11\."
203*b725ae77Skettenis    gdb_test "cont" ""
204*b725ae77Skettenis    gdb_test "bx" "Breakpoint.*at.*: file.*sum.c, line 15\."
205*b725ae77Skettenis    #gdb_test "bx if (1)" "Breakpoint.*at.*: file.*sum.c, line 15\."
206*b725ae77Skettenis    gdb_test "bx 1" "Breakpoint.*at.*: file.*average.c, line 29\."
207*b725ae77Skettenis    gdb_test "bx 1 if (1)" "Breakpoint.*at.*: file.*average.c, line 29\."
208*b725ae77Skettenis    gdb_test "bc 1 2" "Will ignore next 2 crossings of breakpoint 1\."
209*b725ae77Skettenis    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.*"
210*b725ae77Skettenis
211*b725ae77Skettenis    send_gdb "db\n"
212*b725ae77Skettenis    gdb_expect {
213*b725ae77Skettenis        -re "Delete all breakpoints.*y or n. $" {
214*b725ae77Skettenis            send_gdb "y\n"
215*b725ae77Skettenis            exp_continue
216*b725ae77Skettenis        }
217*b725ae77Skettenis        -re "y\r\n$gdb_prompt $" {}
218*b725ae77Skettenis        -re ".*$gdb_prompt $" { # This happens if there were no breakpoints
219*b725ae77Skettenis            }
220*b725ae77Skettenis        timeout { perror "Delete all breakpoints (timeout)" ; return }
221*b725ae77Skettenis    }
222*b725ae77Skettenis    send_gdb "lb\n"
223*b725ae77Skettenis    gdb_expect {
224*b725ae77Skettenis        -re "No breakpoints or watchpoints..*$gdb_prompt $" {}
225*b725ae77Skettenis        -re ".*$gdb_prompt $" { perror "breakpoints not deleted" ; return }
226*b725ae77Skettenis        timeout { perror "info breakpoints (timeout)" ; return }
227*b725ae77Skettenis    }
228*b725ae77Skettenisgdb_test "xbreak" "Breakpoint.*at.*file.*sum.c, line 15."
229*b725ae77Skettenisgdb_test "xbreak print_average" "Breakpoint.*at.*file.*average.c, line 29."
230*b725ae77Skettenisgdb_test "xbreak if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*sum.c, line 15."
231*b725ae77Skettenisgdb_test "xbreak print_average if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*average.c, line 29."
232*b725ae77Skettenis
233*b725ae77Skettenis    send_gdb "lb\n"
234*b725ae77Skettenis    gdb_expect {
235*b725ae77Skettenis        -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"}
236*b725ae77Skettenis        -re ".*$gdb_prompt $" { fail "breakpoints not deleted"}
237*b725ae77Skettenis        timeout { fail "info breakpoints (timeout)" }
238*b725ae77Skettenis    }
239*b725ae77Skettenis
240*b725ae77Skettenis}
241*b725ae77Skettenis
242*b725ae77Skettenis#
243*b725ae77Skettenis# test_signals
244*b725ae77Skettenis#
245*b725ae77Skettenisproc test_signals { } {
246*b725ae77Skettenis    gdb_test "handle SIGTERM nostop noprint" ""
247*b725ae77Skettenis    gdb_test "z 15 s" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*Yes.*Yes.*Yes.*Terminated"
248*b725ae77Skettenis    gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*Yes.*Terminated"
249*b725ae77Skettenis    gdb_test "z 15 i" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated"
250*b725ae77Skettenis    gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*Yes.*No.*Terminated"
251*b725ae77Skettenis    gdb_test "z 15 Q" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated"
252*b725ae77Skettenis    gdb_test "lz" "Signal.*Stop.*Print.*Pass to program.*Description\r\n\r\nSIGHUP.*Yes.*"
253*b725ae77Skettenis}
254*b725ae77Skettenis
255*b725ae77Skettenis
256*b725ae77Skettenis
257*b725ae77Skettenis# Start with a fresh gdb.
258*b725ae77Skettenisglobal GDBFLAGS
259*b725ae77Skettenisset saved_gdbflags $GDBFLAGS
260*b725ae77Skettenis
261*b725ae77Skettenisset GDBFLAGS "$GDBFLAGS --xdb"
262*b725ae77Skettenis
263*b725ae77Skettenisgdb_exit
264*b725ae77Skettenisgdb_start
265*b725ae77Skettenis
266*b725ae77Skettenisxdb_reinitialize_dir $srcdir/$subdir
267*b725ae77Skettenis
268*b725ae77Skettenisgdb_load ${binfile}
269*b725ae77Skettenissend_gdb "set width 0\n"
270*b725ae77Skettenisgdb_expect -re "$gdb_prompt $"
271*b725ae77Skettenistest_search
272*b725ae77Skettenistest_viewing_loc
273*b725ae77Skettenistest_dir_list
274*b725ae77Skettenistest_list_sources
275*b725ae77Skettenistest_vlist
276*b725ae77Skettenistest_va
277*b725ae77Skettenisgdb_test "next"
278*b725ae77Skettenisgdb_test "l" "No arguments.\r\nc = *.*\r\nfirst = 0\r\nlast = 0"
279*b725ae77Skettenis#test_list_globals
280*b725ae77Skettenistest_list_registers
281*b725ae77Skettenistest_backtrace
282*b725ae77Skettenis
283*b725ae77Skettenis# Start with a fresh gdb.
284*b725ae77Skettenis
285*b725ae77Skettenisgdb_exit
286*b725ae77Skettenisgdb_start
287*b725ae77Skettenisxdb_reinitialize_dir $srcdir/$subdir
288*b725ae77Skettenis
289*b725ae77Skettenisgdb_load ${binfile}
290*b725ae77Skettenissend_gdb "set width 0\n"
291*b725ae77Skettenisgdb_expect -re "$gdb_prompt $"
292*b725ae77Skettenistest_go
293*b725ae77Skettenis
294*b725ae77Skettenis
295*b725ae77Skettenisgdb_exit
296*b725ae77Skettenisgdb_start
297*b725ae77Skettenisxdb_reinitialize_dir $srcdir/$subdir
298*b725ae77Skettenis
299*b725ae77Skettenisgdb_load ${binfile}
300*b725ae77Skettenissend_gdb "set width 0\n"
301*b725ae77Skettenisgdb_expect -re "$gdb_prompt $"
302*b725ae77Skettenisgdb_test "break main" ""
303*b725ae77Skettenisgdb_test "R" ""
304*b725ae77Skettenisgdb_test "S" "39\[ \t\]+last = num-1;"
305*b725ae77Skettenistest_breakpoints
306*b725ae77Skettenistest_signals
307*b725ae77Skettenisgdb_test "sm" ""
308*b725ae77Skettenisgdb_test "info set" ".*pagination:  State of pagination is off.*"
309*b725ae77Skettenisgdb_test "am" ""
310*b725ae77Skettenisgdb_test "info set" ".*pagination:  State of pagination is on.*"
311*b725ae77Skettenisgdb_exit
312*b725ae77Skettenis
313*b725ae77Skettenisset GDBFLAGS $saved_gdbflags
314*b725ae77Skettenis
315*b725ae77Skettenisreturn 0
316*b725ae77Skettenis
317*b725ae77Skettenis
318*b725ae77Skettenis
319*b725ae77Skettenis
320*b725ae77Skettenis
321*b725ae77Skettenis
322