# Copyright 2003, 2007-2012 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/>.

# Tests for PR gdb/1250.
# 2003-07-15  Michael Chastain <mec@shout.net>

# This file is part of the gdb testsuite.

#
# test running programs
#

set testfile "gdb1250"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested gdb1250.exp
     return -1
}

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

if ![runto abort {allow-pending}] then {
    continue
}

# See http://sources.redhat.com/gdb/bugs/1250
#
# In a nutshell: the function 'beta' ends with a call to 'abort', which
# is a noreturn function.  So the last instruction of 'beta' is a call
# to 'abort'.  When gdb looks for information about the caller of
# 'beta', it looks at the instruction after the call to 'abort' -- which
# is the first instruction of 'alpha'!  So gdb uses the wrong frame
# information.  It thinks that the test program is in 'alpha' and that
# the prologue "push %ebp / mov %esp,%ebp" has not been executed yet,
# and grabs the wrong values.
#
# By the nature of the bug, it could pass if the C compiler is not smart
# enough to implement 'abort' as a noreturn function.  This is okay.
# The real point is that users often put breakpoints on noreturn
# functions such as 'abort' or some kind of exitting function, and those
# breakpoints should work.

gdb_test_multiple "backtrace" "backtrace from abort" {
    -re "#0.*abort.*\r\n#1.*beta.*\r\n#2.*alpha.*\r\n#3.*main.*\r\n$gdb_prompt $" {
	pass "backtrace from abort"
    }
    -re "#0.*abort.*\r\n#1.*beta.*\r\n$gdb_prompt $" {
	# This happens with gdb HEAD as of 2003-07-13, with gcc 3.3,
	# binutils 2.14, either -gdwarf-2 or -gstabs+, on native
	# i686-pc-linux-gnu.
	#
	# gdb gets 'abort' and 'beta' right and then goes into the
	# weeds.
	kfail "gdb/1250" "backtrace from abort"
    }
}
