# Copyright 2011 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/>.

# Test GCC PR debug/48827 workaround in GDB.

set testfile "amd64-prologue-xmm"
set srcfile ${testfile}.s
set csrcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}.x
set opts {}

if [info exists COMPILE] {
    # make check RUNTESTFLAGS='gdb.arch/amd64-prologue-xmm.exp COMPILE=1'
    set srcfile ${csrcfile}
    lappend opts debug optimize=-O0
} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
    verbose "Skipping amd64-prologue-xmm test."
    return 0
}

if {[prepare_for_testing ${testfile}.exp ${testfile} $srcfile $opts]} {
    return -1
}

if ![runto_main] {
    return -1
}

gdb_breakpoint "func"
gdb_breakpoint "marker"

gdb_continue_to_breakpoint "func"

gdb_test "p fail" " = 0" "stopped at func"
