e22f8b7c8c
Switch the license of all .f and .f90 files to GPLv3. Switch the license of all .s and .S files to GPLv3.
334 lines
9.8 KiB
Text
334 lines
9.8 KiB
Text
# Copyright 1997, 1998, 1999, 2001, 2003, 2004, 2006, 2007
|
|
# 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
# 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
|
|
|
|
set testfile weird
|
|
set srcfile ${objdir}/${subdir}/weird.s
|
|
set binfile ${objdir}/${subdir}/weirdx.o
|
|
|
|
if { [ get_compiler_info "$binfile" ] } {
|
|
return -1
|
|
}
|
|
|
|
if { $hp_cc_compiler || $hp_aCC_compiler } {
|
|
# The native hp-ux assembler does not support stabs at all.
|
|
# If the compiler is native hp-ux, of course the assembler is too.
|
|
# But if someone builds gcc with the native assembler (not recommended)
|
|
# rather than the gnu assembler, then this logic will not suppress it.
|
|
# -- chastain 2004-01-07
|
|
unsupported "stabs with hp-ux assembler"
|
|
continue
|
|
}
|
|
|
|
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"
|
|
}
|
|
|
|
proc print_weird_var { var } {
|
|
global gdb_prompt
|
|
|
|
# Make sure that the variable gets printed out correctly, without
|
|
# any sort of warning message.
|
|
gdb_test_multiple "print $var" "variable $var printed property" {
|
|
-re "^print $var\r*\n.\[0-9\]* = 42.*$gdb_prompt $" {
|
|
pass "variable $var printed properly"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "variable $var printed properly"
|
|
}
|
|
}
|
|
|
|
# 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.
|
|
|
|
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 ""] != "" } {
|
|
untested weird.exp
|
|
return -1
|
|
}
|
|
|
|
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.\[\r\n\]+Are you sure you want to change the file\\? \\(y or n\\)" {
|
|
send_gdb "y\n"
|
|
exp_continue
|
|
}
|
|
-re "^Reading symbols from .*$binfile\\.\\.\\.done\.(|\r\nUsing host libthread_db library .*libthread_db.so.*\\.)\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
|