# Copyright 2003-2021 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
#

standard_testfile .c

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested "failed to compile"
     return -1
}

clean_restart ${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"
    }
}
