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