# Copyright 2007, 2008, 2009 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.
#
# This file is part of the gdb testsuite.

if $tracelevel then {
    strace $tracelevel
}

# Test displaying call clobbered registers in optimized binaries.
# GDB should not show incorrect values.

set testfile clobbered-registers-O2
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# What compiler are we using?
#
if [get_compiler_info ${binfile}] {
    return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat debug optimize=-O2 nowarnings]] != "" } {
     untested clobbered-registers-O2.exp
     return -1
}

# use this to debug:
#log_user 1

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

if { ![runto start_sequence] } then {
   fail "run to start_sequence"
   return
}

gdb_test "frame 1" "#1.*in gen_movsd.*" "Backtracing"

gdb_test_multiple "print operand0" "print operand0" {
    -re "\\\$$decimal = <value optimized out>\r\n$gdb_prompt $" { pass "print operand0"}
    -re "$hex\r\n$gdb_prompt $" { gdb_test "print *operand0" "13" "print operand0" }
}

gdb_test_multiple "print operand1" "print operand1" {
    -re "\\\$$decimal = <value optimized out>\r\n$gdb_prompt $" { pass "print operand1"}
    -re "$hex\r\n$gdb_prompt $" { gdb_test "print *operand1" "14" "print operand1" }
}

