# Copyright 2007-2013 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.

# Test i386 unwinder.


if { ![is_x86_like_target] } 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.
set additional_flags [gdb_target_symbol_prefix_flags]

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"
	}
    }
}
