diff options
Diffstat (limited to 'gdb/testsuite/gdb.stabs/weird.exp')
-rw-r--r-- | gdb/testsuite/gdb.stabs/weird.exp | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.stabs/weird.exp b/gdb/testsuite/gdb.stabs/weird.exp new file mode 100644 index 0000000..86ac7a6 --- /dev/null +++ b/gdb/testsuite/gdb.stabs/weird.exp @@ -0,0 +1,325 @@ +# Copyright (C) 1997 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 + +# Test that GDB properly ignores invalid stabs. +# Also test that GDB can debug a .o file, and that it doesn't mind +# a file that's more minimal than what a compiler normally puts out. +if $tracelevel then { + strace $tracelevel +} + +# If the test directory was not created by configure then skip +# this test. +if ![file isdirectory ${objdir}/${subdir}] then { + return 0 +} + +set prms_id 0 +set bug_id 0 + +proc do_tests {} { + global binfile + global gdb_prompt + + # Mips/alpha targets that use gcc with mips-tfile put out the stabs + # assembler directives embedded in comments. If the assembler + # file is then processed with native cc, all stabs directives + # will be lost. + # Skip the rest of the stabs tests for this case. + send_gdb "ptype inttype\n" + gdb_expect { + -re "^ptype inttype\r*\ntype = inttype.*$gdb_prompt $" { + pass "stabs found" + } + -re ".*$gdb_prompt $" { + setup_xfail "mips-*-*" + setup_xfail "alpha-*-*" + fail "stabs not found" + return + } + default { fail "checking for stabs" } + } + + print_weird_var var0 + print_weird_var var1 + print_weird_var var2 + print_weird_var var3 + + print_weird_var attr32 + print_weird_var attr33 + print_weird_var attr35 + print_weird_var attr36 + print_weird_var attr37 + print_weird_var attr38 + print_weird_var attr39 + print_weird_var attr41 + print_weird_var attr42 + print_weird_var attr43 + print_weird_var attr44 + print_weird_var attr46 + print_weird_var attr47 + print_weird_var attr58 + print_weird_var attr59 + print_weird_var attr60 + print_weird_var attr61 + print_weird_var attr62 + print_weird_var attr63 + print_weird_var attr64 + print_weird_var attr65 + print_weird_var attr66 + print_weird_var attr67 + print_weird_var attr68 + print_weird_var attr69 + print_weird_var attr70 + print_weird_var attr71 + print_weird_var attr72 + print_weird_var attr73 + print_weird_var attr74 + print_weird_var attr75 + print_weird_var attr76 + print_weird_var attr77 + print_weird_var attr78 + print_weird_var attr79 + print_weird_var attr80 + print_weird_var attr81 + print_weird_var attr82 + print_weird_var attr83 + print_weird_var attr84 + print_weird_var attr85 + print_weird_var attr86 + print_weird_var attr87 + print_weird_var attr88 + print_weird_var attr89 + print_weird_var attr90 + print_weird_var attr91 + print_weird_var attr92 + print_weird_var attr93 + print_weird_var attr94 + print_weird_var attr95 + print_weird_var attr96 + print_weird_var attr97 + print_weird_var attr98 + print_weird_var attr99 + print_weird_var attr100 + print_weird_var attr101 + print_weird_var attr102 + print_weird_var attr103 + print_weird_var attr104 + print_weird_var attr105 + print_weird_var attr106 + print_weird_var attr107 + print_weird_var attr108 + print_weird_var attr109 + print_weird_var attr110 + print_weird_var attr111 + print_weird_var attr112 + print_weird_var attr113 + print_weird_var attr114 + print_weird_var attr115 + print_weird_var attr116 + print_weird_var attr117 + print_weird_var attr118 + print_weird_var attr119 + print_weird_var attr120 + print_weird_var attr121 + print_weird_var attr122 + print_weird_var attr123 + print_weird_var attr124 + print_weird_var attr125 + print_weird_var attr126 + + gdb_test "p const69" " = 69" "'e' constant on non-enum type" + gdb_test "whatis const69" "type = (unsigned int|inttype)" "whatis const69" + + gdb_test "p sizeof (const70)" " = 2" "'e' constant with embedded type" + + gdb_test "p bad_neg0" " = \{field0 = 42, field2 =.*field3 = 45\}" "p bad_neg0" + + gdb_test "ptype inttype" "type = (unsigned int|inttype)" "ptype on inttype" + gdb_test "p sizeof (float72type)" " = 9" "unrecognized floating point type" + + # This big number needs to be kept as one piece + gdb_test "p/x int256var" " = 0x0*2a0000002b0000002c0000002d0000002d0000002c0000002b0000002a" "print very big integer" + + gdb_test "whatis consth" "type = inttype" "whatis consth" + gdb_test "whatis consth2" "type = inttype" "whatis consth2" + + # GDB does not yet understand S constants + setup_xfail "*-*-*" + gdb_test "p/x bad_neg0const" " = \{field0 = 0x11222211, field2 =.*\ +field3 = 0x77888877\}" "print struct constant" + + gdb_test "ptype bad_type0" "type = .*" "print bad_type0" + gdb_test "ptype bad_type1" "type = .*" "print bad_type1" + + # GDB does not yet support arrays indexed by anything at all unusual + setup_xfail "*-*-*" + gdb_test "p array0" " = \{42, 43, 44, 45, 46, 47\}" "array0 with strange index" + setup_xfail "*-*-*" + gdb_test "p array1" " = \{42, 43, 44\}" "array1 with strange index" + + # GDB does not yet support this feature + gdb_test "whatis one_var" "type = inttype_one" \ + "whatis one_var (known failure in gdb 4.10)" + # But do make sure that it prints as something reasonable + gdb_test "whatis one_var" "type = inttype(|_one)" \ + "whatis one_var test 2" + + gdb_test "whatis two_var" "type = inttype_two" \ + "whatis two_var (known failure in gdb 4.10)" + # But do make sure that it prints as something reasonable + gdb_test "whatis two_var" "type = inttype(|_two)" \ + "whatis two_var test 2" + + setup_xfail "*-*-*" + gdb_test "whatis pointer_to_int_var" "type = int \[*\]" + setup_xfail "*-*-*" + gdb_test "whatis intp_var" "type = intp" + + gdb_test "p common0var0" "= 42" + # GDB seems to only understand common blocks local to a function. + # These variables never get relocated to be relative to the common + # block. + # I'm not sure whether it is valid to have a common block which + # is not local to a function. + setup_xfail "*-*-*" + gdb_test "p common0var1" "= 24" + setup_xfail "*-*-*" + gdb_test "p common0var2" "= 22" + + # this long line must be continous, not with "/" escaping the newline + gdb_test "p v_comb" "{<> = {<> = {x = 42}, \[_a-zA-Z$.\]* = \[0-9xa-fA-F\]*, a = 43}, <> = {\[_a-zA-Z$.\]* = \[0-9xa-fA-F\]*, b = 44}, comb = 45}" +} + +proc print_weird_var { var } { + global gdb_prompt + + # Make sure that the variable gets printed out correctly, without + # any sort of warning message. + send_gdb "print $var\n" + gdb_expect { + -re "^print $var\r*\n.\[0-9\]* = 42.*$gdb_prompt $" { + pass "variable $var printed properly" + } + -re ".*$gdb_prompt $" { + fail "variable $var not printed properly" + } + timeout { fail "variable $var not printed (timeout)" } + eof { fail "(eof) variable $var not printed" } + } + + # Make sure that the stabs did get loaded in a sensible way. + # If somehow the stabs got skipped, then the above test can + # pass because GDB assumes int for variables without a stab. + + # This doesn't work because 32=45 doesn't preserve the name in + # gdb (as of 14 Sep 93 anyway). + #gdb_test "whatis $var" "type = (unsigned int|inttype)" + + # But the size should be right. + gdb_test "print sizeof ($var)" "= 4" +} + + +# Don't use gdb_load; it doesn't bitch if the loading produced some +# error messages during symbol reading. +set testfile weird +set srcfile ${objdir}/${subdir}/weird.s +set binfile ${objdir}/${subdir}/weirdx.o + +global target_os +set sedscript ${srcdir}/${subdir}/aout.sed +switch -glob ${target_triplet} { + "hppa*-*-*" { + set sedscript ${srcdir}/${subdir}/hppa.sed + } + "mips-*-ecoff" { + set sedscript ${srcdir}/${subdir}/ecoff.sed + } + "powerpc-*-aix*" { + set sedscript ${srcdir}/${subdir}/xcoff.sed + } + "rs6000-*-aix*" { + set sedscript ${srcdir}/${subdir}/xcoff.sed + } + "*-*-aout" { + set sedscript ${srcdir}/${subdir}/aout.sed + } + "*-*-xcoff" { + set sedscript ${srcdir}/${subdir}/xcoff.sed + } + "alpha-*-*" { + set sedscript ${srcdir}/${subdir}/ecoff.sed + } +} + + +# Hope this is a Unix box. +set exec_output [remote_exec build "sed" "-f ${sedscript}" "${srcdir}/${subdir}/weird.def" "${srcfile}"] +if { [lindex $exec_output 0] != 0 } { + perror "Couldn't make test case. $exec_output" + return -1 +} + +if { [gdb_compile "${srcfile}" "${binfile}" object ""] != "" } { + gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." +} + +remote_file build delete ${srcfile} + +# Start with a fresh gdb +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir + +set binfile [remote_download host ${binfile} object.o] +send_gdb "file $binfile\n" +# If $binfile is very long, a \r (but not a \n) will echo in the +# middle of the echo of the command. So to match the echo, we +# would like to match anything not containing \n +# (we would prefer to be sure not to match any warning message). +# But \[^\n\]* doesn't seem to work, so instead use the heuristic +# that a filename won't contain a space and a warning message will. +# But spaces following by backspaces aren't really spaces. +gdb_expect 60 { + -re "^file (\[^ \]| +\008)*\r*\n" { + exp_continue + } + -re "A program is being debugged already. Kill it\\? \\(y or n\\)" { + send_gdb "y\n" + exp_continue + } + -re "^Reading symbols from $binfile\\.\\.\\.done\.\r*\n$gdb_prompt $" { + pass "weirdx.o read without error" + } + -re ".*$gdb_prompt $" { + fail "Errors reading weirdx.o" + } + timeout { + perror "couldn't load $binfile into $GDB (timed out)." + return -1 + } + eof { fail "(eof) cannot read weirdx.o" } +} + +do_tests + +remote_file host delete ${binfile} + +return 0 |