# Copyright 1997, 1998, 1999, 2001, 2003, 2004
# 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

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.
	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 printed properly"
		}
		timeout { fail "variable $var printed properly (timeout)" }
		eof { fail "variable $var printed properly (eof)" }
	}

	# 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 ""] != "" } {
     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\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
