# Copyright 2007, 2008, 2009, 2010 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/>.
#
# 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" }
}

