# Copyright 2003, 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 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.  

# Tests for PR gdb/1090.
# 2003-02-23  Michael Chastain <mec@shout.net>

# This file is part of the gdb testsuite.

if $tracelevel then {
        strace $tracelevel
        }

#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "gdb1090"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested gdb1090.exp
     return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if ![runto marker] then {
    perror "couldn't run to breakpoint"
    continue
} 
gdb_test "up" ".*foo.*" "up from marker"

send_gdb "print s24\n"
gdb_expect {
    -re "\\\$\[0-9\]* = \\{field_0 = 1170, field_1 = 64701\\}\r\n$gdb_prompt $" {
	pass "print s24"
    }
    -re "\\\$\[0-9\]* = \\{field_0 = 1170, field_1 = .*\\}\r\n$gdb_prompt $" {
	# happens with gcc 2.95.3, which actually puts s24 in registers.
	# gdb cannot find the second register and prints garbage.
	kfail "gdb/1090" "print s24"
    }
    -re ".*$gdb_prompt $" {
	fail "print s24"
    }
    timeout {
	fail "print s24 (timeout)"
    }
}
