# Copyright 2003, 2004 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.  

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

# This file is part of the gdb testsuite.

if $tracelevel {
    strace $tracelevel
}

# Test i386 prologue analyzer.

set prms_id 0
set bug_id 0

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

if [target_info exists darwin64] {
   verbose "This test file not yet adapted for x86-64, skipping."
   return
}

set testfile "i386-prologue"
set srcfile ${testfile}.c
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=\"_\""
}   

# Don't use "debug", so that we don't have line information for the assembly
# fragments.
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list $additional_flags]] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}


# The code used by the tests here encodes some breakpoints by using
# inline assembler.  This will generate a SIGTRAP which will be caught
# by GDB.  At that point the instruction pointer will point at the
# next instruction, and execution can continue without any problems.
# Some systems however (QNX Neutrino, Solaris) will adjust the
# instruction pointer to point at the breakpoint instruction instead.
# On these systems we cannot continue unless we skip it.  This
# procedure takes care of that.

proc skip_breakpoint { msg } {
    gdb_test "if (*(unsigned char *)\$pc == 0xcc)\nset \$pc = \$pc + 1\nend" \
	    "" "skip breakpoint in ${msg}"
}


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

#
# Run to `main' where we begin our tests.
#

if ![runto_main] then {
    gdb_suppress_tests
}

# Testcase for standard prologue.

gdb_test "continue" "Program received signal SIGTRAP.*" "continue to standard"

skip_breakpoint standard

gdb_test "backtrace 10" \
	"#0\[ \t\]*$hex in standard.*\r\n#1\[ \t\]*$hex in main.*" \
	"backtrace in standard"

gdb_test "info frame" \
	".*Saved registers:.*ebp at.*edi at.*eip at.*" \
	"saved registers in standard"

# Testcase from symtab/1253.

gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1253"

skip_breakpoint gdb1253

gdb_test "backtrace 10" \
	"#0\[ \t\]*$hex in gdb1253.*\r\n#1\[ \t\]*$hex in main.*" \
	"backtrace in gdb1253"

gdb_test "info frame" \
	".*Saved registers:.*ebp at.*edi at.*eip at.*" \
	"saved registers in gdb1253"

# Testcase from backtrace/1718.

gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1718"

skip_breakpoint gdb1718

gdb_test "backtrace 10" \
	"#0\[ \t\]*$hex in gdb1718.*\r\n#1\[ \t\]*$hex in main.*" \
	"backtrace in gdb1718"

setup_kfail *-*-* gdb/1718
gdb_test "info frame" \
	".*Saved registers:.*esi at.*ebx at.*eip at.*" \
	"saved registers in gdb1718"

# Testcase from backtrace/1338.

gdb_test "continue" "Program received signal SIGTRAP.*" "continue to gdb1338"

skip_breakpoint gdb1338

gdb_test "backtrace 10" \
	"#0\[ \t\]*$hex in gdb1338.*\r\n#1\[ \t\]*$hex in main.*" \
	"backtrace in gdb1338"

gdb_test "info frame" \
	".*Saved registers:.*ebx at.*esi at.*edi at.*eip at.*" \
	"saved registers in gdb1338"

# Testcase jump_at_beginning.
gdb_test_multiple "break jump_at_beginning" \
	"set breakpoint in jump_at_beginning" {
    -re "Breakpoint \[0-9\]* at ($hex).*$gdb_prompt $" {
	gdb_test "x/i $expect_out(1,string)" \
		".*<jump_at_beginning.*>:.*jmp.*" \
		"check jump_at_beginning prologue end"
    }
    default {
        fail "set breakpoint in jump_at_beginning"
    }
}
