# Copyright (C) 1992, 1993, 1994, 1995 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@prep.ai.mit.edu

# This file was written by Fred Fish. (fnf@cygnus.com)

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

# are we on a target board
if ![isnative] then {
    return
}


set binfile "coremaker"
set srcfile $binfile.c

if ![file exists $objdir/$subdir/$binfile] then {
    perror "$objdir/$subdir/$binfile does not exist."
    return 0
}

if ![file exists $objdir/$subdir/corefile] then {
    # Create a core file named "corefile" rather than just "core", to
    # avoid problems with sys admin types that like to regularly prune all
    # files named "core" from the system.
    #
    # Some systems append "core" to the name of the program; others append
    # the name of the program to "core".

    catch "system \"cd $objdir/$subdir; ./$binfile\""
    if [file exists $objdir/$subdir/core] then {
	catch "exec mv $objdir/$subdir/core $objdir/$subdir/corefile"
    } elseif [file exists $objdir/$subdir/core.$binfile] {
	catch "exec mv $objdir/$subdir/core.$binfile $objdir/$subdir/corefile"
    } elseif [file exists $objdir/$subdir/$binfile.core] {
	catch "exec mv $objdir/$subdir/$binfile.core $objdir/$subdir/corefile"
    } else {
	warning "can't generate a core file - core tests suppressed - check ulimit -c"
	return 0
    }
}

#
# Test that we can simply startup with a "-core=corefile" command line arg
# and recognize that the core file is a valid, usable core file.
# To do this, we must shutdown the currently running gdb and restart
# with the -core args.  We can't use gdb_start because it looks for
# the first gdb prompt, and the message we are looking for occurs
# before the first prompt.  Also, we can't include GDBFLAGS because
# if it is empty, this confuses gdb with an empty argument that it
# grumbles about (said grumbling currently being ignored in gdb_start).
# **FIXME**
#

gdb_exit
if $verbose>1 then {
    send_user "Spawning $GDB -nw $GDBFLAGS -core=$objdir/$subdir/corefile\n"
}

# The RS/6000 gdb doesn't know how to extract the file name and
# terminating signal from the core file, so all these tests are
# expected to fail.

setup_xfail "rs6000-*-*"
set oldtimeout $timeout
set timeout [expr "$timeout + 60"]
eval "spawn $GDB -nw $GDBFLAGS -core=$objdir/$subdir/corefile"
expect {
    -re "Core was generated by .*coremaker.*\r
\#0  .*\(\).*\r
$prompt $"			{ pass "args: -core=corefile" }
	-re ".*$prompt $"	{ fail "args: -core=corefile" }
	timeout 		{ fail "(timeout) starting with -core" }
}


#
# Test that startup with both an executable file and -core argument.
# See previous comments above, they are still applicable.
#

gdb_exit
if $verbose>1 then {
    send_user "Spawning $GDB -nw $GDBFLAGS $objdir/$subdir/$binfile -core=$objdir/$subdir/corefile\n"
}


setup_xfail "rs6000-*-*"
# This fails in p3, but not in devo.
spawn $GDB -nw $GDBFLAGS $objdir/$subdir/$binfile -core=$objdir/$subdir/corefile
expect {
    -re "Core was generated by .*coremaker.*\r
\#0  .*\(\).*\r
$prompt $"			{ pass "args: execfile -core=corefile" }
	-re ".*$prompt $"	{ fail "args: execfile -core=corefile" }
	timeout 		{ fail "(timeout) starting with -core" }
}
set timeout $oldtimeout


# Now restart normally.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $objdir/$subdir/$binfile

source gdb.base/coremaker.ci

# Test basic corefile recognition via core-file command.

setup_xfail "rs6000-*-*"
send "core-file $objdir/$subdir/corefile\n"
expect {
    -re "Core was generated by .*coremaker.*\r
\#0  .*\(\).*\r
$prompt $"			{ pass "core-file command" }
	-re ".*$prompt $"	{ fail "core-file command" }
	timeout 		{ fail "(timeout) core-file command" }
}

# Somehow we better test the ability to read the registers out of the core
# file correctly.  I don't think the other tests do this.

# Haven't investigated this xfail
setup_xfail "m68k-*-hpux*" "i*86-*-linux*" "i*86-*-sysv4*" "i*86-*-freebsd*"
# Strange that this one depends upon being native compiled.
if {!$gcc_compiled} then { setup_xfail  "hppa*-*-hpux*" }
gdb_test "bt" "abort.*func2.*func1.*main.*" "backtrace in corefile.exp"

# test reinit_frame_cache

gdb_load $objdir/$subdir/$binfile
setup_xfail "*-*-*"
gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\)" "up in corefile.exp"

gdb_test "core" "No core file now."
