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

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

# This file is part of the gdb testsuite.

# Unwinding of DW_CFA_GNU_negative_offset_extended test program.

if $tracelevel {
    strace $tracelevel
}

# Test i386 unwinder.

set prms_id 0
set bug_id 0

if ![istarget "i?86-*-*"] then {
    verbose "Skipping i386 unwinder tests."
    return
}

set testfile "i386-gnu-cfi"
set srcfilec ${testfile}.c
set srcfileasm ${testfile}-asm.S
set binfile ${objdir}/${subdir}/${testfile}

# some targets have leading underscores on assembly symbols.
# TODO: detect this automatically
set additional_flags ""
if [istarget "i?86-*-cygwin*"] then {
  set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\""
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfilec} ${srcdir}/${subdir}/${srcfileasm}" "${binfile}" executable [list debug $additional_flags]] != "" } {
    untested i386-gnu-cfi.exp
    return -1
}

# Get things started.

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

# We should stop in abort(3).

gdb_run_cmd

gdb_test_multiple {} "continue to abort()" {
    -re ".*Program received signal SIGABRT,.*$gdb_prompt $" {
	pass "continue to abort()"
    }
}

# Backtrace would crash before.

gdb_test "bt" \
         "main \\(\\) at .*${testfile}.c.*" \
         "backtrace"

# Check we see the inserted `DW_CFA_GNU_negative_offset_extended' CFI.
# We see there the original CFI-stored filename `gate.c'.

gdb_test "up 3" \
         "gate \\(\[^()\]*\\) at .*gate.c.*" \
         "shift up to the modified frame"

gdb_test_multiple "info frame" "Existence of the CFI inserted register" {
    -re "Stack level 3, frame at (0x\[0-9a-f\]+):.*Saved registers:.* ecx at (0x\[0-9a-f\]+),.*" {
	pass "Existence of the CFI inserted register"
	if { [string compare $expect_out(1,string) $expect_out(2,string)] } then {
	    fail "Value of the CFI inserted register"
	} else {
	    pass "Value of the CFI inserted register"
	}
    }
}
