summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.stabs/weird.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.stabs/weird.exp')
-rw-r--r--gdb/testsuite/gdb.stabs/weird.exp325
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 00000000000..86ac7a6bca6
--- /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