diff options
Diffstat (limited to 'gdb/testsuite/gdb.hp/dbx.exp')
-rw-r--r-- | gdb/testsuite/gdb.hp/dbx.exp | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.hp/dbx.exp b/gdb/testsuite/gdb.hp/dbx.exp new file mode 100644 index 0000000000..66f24e90a5 --- /dev/null +++ b/gdb/testsuite/gdb.hp/dbx.exp @@ -0,0 +1,222 @@ +# Copyright (C) 1998 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gdb@prep.ai.mit.edu + + +if $tracelevel then { + strace $tracelevel +} + + +set testfile1 "average" +set testfile2 "sum" +set testfile "dbx-test" +set binfile1 ${objdir}/${subdir}/${testfile1} +set binfile2 ${objdir}/${subdir}/${testfile2} +set binfile ${objdir}/${subdir}/${testfile} + + + +if { [gdb_compile "${srcdir}/${subdir}/average.c" "${binfile1}.o" object {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +if { [gdb_compile "${srcdir}/${subdir}/sum.c" "${binfile2}.o" object {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +if { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +if [get_compiler_info ${binfile}] { + return -1; +} +if {[skip_hp_tests $gcc_compiled]} then { continue } + +proc dbx_reinitialize_dir { subdir } { + global gdb_prompt + + send_gdb "use\n" + gdb_expect { + -re "Reinitialize source path to empty.*y or n. " { + send_gdb "y\n" + gdb_expect { + -re "Source directories searched.*$gdb_prompt $" { + send_gdb "use $subdir\n" + gdb_expect { + -re "Source directories searched.*$gdb_prompt $" { + verbose "Dir set to $subdir" + } + -re ".*$gdb_prompt $" { + perror "Dir \"$subdir\" failed." + } + } + } + -re ".*$gdb_prompt $" { + perror "Dir \"$subdir\" failed." + } + } + } + -re ".*$gdb_prompt $" { + perror "Dir \"$subdir\" failed." + } + } +} + +# In "testsuite/config/unix-gdb.exp", the routine "gdb_load" +# is defined as "gdb_file_cmd". The binding of "gdb_file_cmd" +# is done at invocation time. Before this file is processed, +# it binds to the definition in "testsuite/lib/gdb.exp"; after +# this file is processed, it binds to this definition. +# TCL lets us overrides a previous routine definition without a +# warning (isn't that special?). +# +# This means that tests before use "file" to load a target, and +# tests afterwards use the pair "symbol-file" "exec-file". +# +# I'm leaving it as it is for now because at the moment it +# is the only test we have of the use of the combination of +# "symbol-file" and "exec-file" to load a debugging target (the +# other definition uses "file". +# +# Symbol-file and exec-file should be tested explicitly, not +# as a side effect of running a particular test (in this case, +# "testsuite/gdb.compat/dbx.exp"). +# +# +proc gdb_file_cmd {arg } { + global verbose + global loadpath + global loadfile + global GDB + global gdb_prompt + global spawn_id + upvar timeout timeout + + send_gdb "symbol-file $arg\n" + gdb_expect { + -re "Reading symbols from.*done.*$gdb_prompt $" { + verbose "\t\tLoaded $arg into the $GDB" + send_gdb "exec-file $arg\n" + return 0 + } + -re "has no symbol-table.*$gdb_prompt $" { + perror "$arg wasn't compiled with \"-g\"" + return -1 + } + -re "A program is being debugged already.*Kill it.*y or n. $" { + send_gdb "y\n" + verbose "\t\tKilling previous program being debugged" + exp_continue + } + -re "Load new symbol table from \".*\".*y or n. $" { + send_gdb "y\n" + gdb_expect { + -re "Reading symbols from.*done.*$gdb_prompt $" { + verbose "\t\tLoaded $arg with new symbol table into $GDB" + return 0 + } + timeout { + perror "(timeout) Couldn't load $arg, other program already loaded." + return -1 + } + } + } + -re ".*No such file or directory.*$gdb_prompt $" { + perror "($arg) No such file or directory\n" + return -1 + } + -re "$gdb_prompt $" { + perror "couldn't load $arg into $GDB." + return -1 + } + timeout { + perror "couldn't load $arg into $GDB (timed out)." + return -1 + } + eof { + # This is an attempt to detect a core dump, but seems not to + # work. Perhaps we need to match .* followed by eof, in which + # expect does not seem to have a way to do that. + perror "couldn't load $arg into $GDB (end of file)." + return -1 + } + } +} + +# +#test_breakpoints +# +proc test_breakpoints { } { + gdb_test "stop in main" "Breakpoint.*at.*: file.*average\.c, line 31\." + gdb_test "status" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:31.*" + gdb_test "stop at 36" "Breakpoint.*at.*: file.*average\.c, line 36.*" + gdb_test "stop in 36" "Usage: stop in <function . address>" + gdb_test "stop at main" "Usage: stop at <line>" +} + +# +#test_assign +# +proc test_assign { } { + gdb_test "run" "" + gdb_test "assign first=1" "" + gdb_test "print first" ".1 = 1" +} + +# +#test_whereis +# +proc test_whereis { } { + gdb_test "whereis my_list" "All variables matching regular expression \"my_list\":\r\n\r\nFile.*average\.c:\r\nstatic int my_list\\\[10\\\];" +} + +# +#test_func +# +proc test_func { } { + gdb_test "cont" "" + gdb_test "step" "" + gdb_test "func sum" "'sum' not within current stack frame\." + gdb_test "stop in sum" "Breakpoint.*at.*: file.*sum\.c, line 11\." + gdb_test "cont" + gdb_test "func print_average" ".*in print_average.*\\(list=.*, low=0, high=6\\).*at.*average\.c:17\r\n17\[ \t\]+total = sum\\(list, low, high\\);" +} + +# Start with a fresh gdb. + +gdb_exit +global GDBFLAGS +set saved_gdbflags $GDBFLAGS + +set GDBFLAGS "$GDBFLAGS --dbx" +gdb_start +dbx_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} +send_gdb "set width 0\n" +gdb_expect -re "$gdb_prompt $" +test_breakpoints +test_assign +test_whereis +gdb_test "file average.c:1" "1\[ \t\]+/. This is a sample program.*" +test_func + +gdb_exit +set GDBFLAGS $saved_gdbflags +return 0 |