# Copyright 1988, 1990, 1991, 1992, 1994, 1997, 1999, 2000, 2002,
# 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.  

# This file was written by Rob Savoye. (rob@cygnus.com)

if $tracelevel then {
    strace $tracelevel
}

set prms_id 0
set bug_id 0

# are we on a target board
if [is_remote target] {
    return
}

# Not all of the lines of code near the start of main are executed for
# every machine.  Also, optimization may reorder some of the lines.
# So all we do is try to step or next over everything until we get
# to a line that we know is always executed.

proc do_steps_and_nexts {} {
    global gdb_prompt
    global srcdir
 
    gdb_reinitialize_dir $srcdir/..

    for {set count 0} {$count < 35} {incr count} {
	send_gdb "list\n"
	# NOTE: carlton/2002-12-11: The "initial brace" and
	# "current_directory initialization" possibilities happen to
	# me with GCC 3.1 on i686-pc-linux-gnu when I compile with
	# optimization.
	gdb_expect {
	    -re ".*context = data.*$gdb_prompt $" {
		set description "step over context initialization"
		set command "step"
	    }
	    -re ".*argc = context->argc.*$gdb_prompt $" {
		set description "step over argc initialization"
		set command "step"
	    }
	    -re ".*argv = context->argv.*$gdb_prompt $" {
		set description "step over argv initialization"
		set command "step"
	    }
	    -re ".*quiet = 0.*$gdb_prompt $" {
		set description "step over quiet initialization"
		set command "step"
	    }
	    -re ".*batch = 0.*$gdb_prompt $" {
		set description "step over batch initialization"
		set command "step"
	    }
	    -re ".*symarg = NULL.*$gdb_prompt $" {
		set description "step over symarg initialization"
		set command "step"
	    }
	    -re ".*execarg = NULL.*$gdb_prompt $" {
		set description "step over execarg initialization"
		set command "step"
	    }
	    -re ".*corearg = NULL.*$gdb_prompt $" {
		set description "step over corearg initialization"
		set command "step"
	    }
	    -re ".*cdarg = NULL.*$gdb_prompt $" {
		set description "step over cdarg initialization"
		set command "step"
	    }
	    -re ".*ttyarg = NULL.*$gdb_prompt $" {
		set description "step over ttyarg initialization"
		set command "step"
	    }
	    -re ".*osabiarg = NULL.*$gdb_prompt $" {
		set description "step over osabi initialization"
		set command "step"
	    }
	    -re ".*attach_waitfor = NULL.*$gdb_prompt $" {
		set description "step over attach_waitfor initialization"
		set command "step"
	    }
	    -re ".*initial_arch = NULL.*$gdb_prompt $" {
		set description "step over initial_arch initialization"
		set command "step"
	    }
	    -re ".*time_at_startup = get_run_time.*$gdb_prompt $" {
		set description "next over get_run_time and everything it calls"
		set command "next"
	    }
	    -re ".*START_PROGRESS.*$gdb_prompt $" {
		# Note: ezannoni/2004/02/17: This check should be
		# removed, since as of today that source line is not
		# in gdb anymore.
		set description "next over START_PROGRESS and everything it calls"
		set command "next"
	    }
	    -re ".*mac_init.*$gdb_prompt $" {
		set description "next over mac_init and everything it calls"
		set command "next"
	    }
	    -re ".*init_malloc.*$gdb_prompt $" {
		# gdb 6.2.X is the last gdb which called init_malloc
		set description "next over init_malloc and everything it calls"
		set command "next"
	    }
	    -re ".*lim_at_start.*$gdb_prompt $" {
		set description "next over lim_at_start initialization"
		set command "next"
	    }
	    -re ".*count . 0x3.*$gdb_prompt $" {
		set description "next over conditional stack alignment code 1"
		set command "next"
	    }
	    -re ".*if .i != 0.*$gdb_prompt $" {
		set description "next over conditional stack alignment code 2"
		set command "next"
	    }
	    -re ".*alloca .i - 4.*$gdb_prompt $" {
		set description "next over conditional stack alignment alloca"
		set command "next"
	    }
	    -re ".*cmdsize = 1.*$gdb_prompt $" {
		set description "step over cmdsize initialization"
		set command "next"
	    }
	    -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
		set description "next over cmdarg initialization via xmalloc"
		set command "next"
	    }
	    -re ".*ncmd = 0.*$gdb_prompt $" {
		set description "next over ncmd initialization"
		set command "next"
	    }
	    -re ".*dirsize = 1.*$gdb_prompt $" {
		set description "next over dirsize initialization"
		set command "next"
	    }
	    -re ".*dirarg = .* xmalloc.*$gdb_prompt $" {
		return
	    }
	    -re ".*setlocale .LC_MESSAGES,.*$gdb_prompt $" {
		set description "next over setlocale LC_MESSAGES"
		set command "next"
	    }
	    -re ".*setlocale .LC_CTYPE,.*$gdb_prompt $" {
		set description "next over setlocale LC_CTYPE"
		set command "next"
	    }
	    -re ".*bindtextdomain .PACKAGE, LOCALEDIR.;.*$gdb_prompt $" {
		set description "next over bindtextdomain"
		set command "next"
	    }
	    -re ".*textdomain .PACKAGE.;.*$gdb_prompt $" {
		set description "next over textdomain PACKAGE"
		set command "next"
	    }
	    -re "\[0-9\]*\t\{\r\n$gdb_prompt $" {
		set description "step over initial brace"
		set command "step"
	    }
	    -re ".*current_directory = gdb_dirbuf.*$gdb_prompt $" {
		set description "step over current_directory initialization"
		set command "step"
	    }
	    -re ".*gdb_sysroot = .*$gdb_prompt $" {
		# NOTE: carlton/2003-01-15: More optimization reordering,
		# observed on GCC 3.1.
		set description "step over gdb_sysroot initialization"
		set command "step"
	    }
	    -re ".*ndir = 0.*$gdb_prompt $" {
		set description "step over ndir initialization"
		set command "step"
	    }
	    -re ".*instream = stdin.*$gdb_prompt $" {
		set description "step over instream initialization"
		set command "step"
	    }
	    -re ".*getcwd .gdb_dirbuf, sizeof .gdb_dirbuf..;.*$gdb_prompt $" {
		set description "next over getcwd"
		set command "next"
	    }
	    -re "\[ \t\]+\{\r\n$gdb_prompt $" {
		setup_xfail "mips-*-irix5*"
		fail "$description ended up at odd location"
	    }
	    -re ".*main.c.*No such file or directory.*$gdb_prompt $" {
		setup_xfail "rs6000-*-aix3*"
		fail "must be able to list source lines"
		return
	    }
	    -re ".*$gdb_prompt $" {
		fail "unknown source line after $description"
		return
	    }
	    default {
		fail "unknown source line near main"
		return
	    }
	}
	send_gdb "$command\n"
	gdb_expect {
	    -re ".*No such file or directory.\r\n$gdb_prompt $" {
		fail "$description (no source available)"
	    }
	    -re ".*A file or directory .* does not exist..\r\n$gdb_prompt $" {
		fail "$description (no source available)"
	    }
	    -re ".*$gdb_prompt $" {
		pass "$description"
	    }
	    timeout {
		fail "$description (timeout)"
	    }
	}
    }
}

proc test_with_self { executable } {
    global gdb_prompt
    global tool
    global det_file
    global decimal
    global timeout

    # load yourself into the debugger
    # This can take a relatively long time, particularly for testing where
    # the executable is being accessed over a network, or where gdb does not
    # support partial symbols for a particular target and has to load the
    # entire symbol table.  Set the timeout to 10 minutes, which should be
    # adequate for most environments (it *has* timed out with 5 min on a
    # SPARCstation SLC under moderate load, so this isn't unreasonable).
    # After gdb is started, set the timeout to 30 seconds for the duration
    # of this test, and then back to the original value.

    set oldtimeout $timeout
    set timeout 600
    verbose "Timeout is now $timeout seconds" 2

    global gdb_file_cmd_debug_info
    set gdb_file_cmd_debug_info "unset"

    set result [gdb_load $executable]
    set timeout $oldtimeout
    verbose "Timeout is now $timeout seconds" 2

    if { $result != 0 } then {
	return -1
    }

    if { $gdb_file_cmd_debug_info != "debug" } then {
	untested "No debug information, skipping testcase."
	return -1
    }

    # disassemble yourself
    gdb_test "x/10i main" \
	    "x/10i.*main.*main.$decimal.*main.$decimal.*" \
	    "Disassemble main"

    # Set a breakpoint at main
    gdb_test "break captured_main" \
	    "Breakpoint.*at.* file.*, line.*" \
	    "breakpoint in captured_main"

    # We'll need this when we send a ^C to GDB.  Need to do it before we
    # run the program and gdb starts saving and restoring tty states.
    # On Ultrix, we don't need it and it is really slow (because shell_escape
    # doesn't use vfork).
    if ![istarget "*-*-ultrix*"] then {
	gdb_test "shell stty intr '^C'" "" \
	    "set interrupt character in test_with_self"
    }

    # FIXME: If we put this after the run to main, the first list
    # command doesn't print the same line as the current line where
    # gdb is stopped.
    gdb_test "set listsize 1" "" "set listsize to 1"

    # run yourself
    # It may take a very long time for the inferior gdb to start (lynx),
    # so we bump it back up for the duration of this command.
    set timeout 600

    set description "run until breakpoint at captured_main"
    send_gdb "run -nw\n"
    gdb_expect {
	-re "Starting program.*Breakpoint \[0-9\]+,.*captured_main .data.* at .*main.c:.*$gdb_prompt $" {
	    pass "$description"
	}
	-re "Starting program.*Breakpoint \[0-9\]+,.*captured_main .data.*$gdb_prompt $" {
	    xfail "$description (line numbers scrambled?)"
	}
	-re "vfork: No more processes.*$gdb_prompt $" {
	    fail "$description (out of virtual memory)"
	    set timeout $oldtimeout
	    verbose "Timeout is now $timeout seconds" 2
	    return -1
	}
	-re ".*$gdb_prompt $" {
	    fail "$description"
	    set timeout $oldtimeout
	    verbose "Timeout is now $timeout seconds" 2
	    return -1
	}
	timeout {
	    fail "$description (timeout)"
	}
    }

    set timeout $oldtimeout
    verbose "Timeout is now $timeout seconds" 2

    # do we have a version number ?
    send_gdb "print version\n"
    gdb_expect {
	-re ".\[0-9\]+ = .\[0-9.\]+.*$gdb_prompt $" {
	    pass "printed version as string"
	}
	-re ".\[0-9\]+ = +0x.*\[0-9.\]+.*$gdb_prompt $" {
	    pass "printed version as pointer"
	}
	-re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" {
	    pass "printed version with cast"
	}
	-re ".*$gdb_prompt $"	{ fail "printed version" }
	timeout		{ fail "(timeout) printed version" }
    }

    do_steps_and_nexts

    gdb_test "print \"foo\"" ".\[0-9\]+ = \"foo\"" "print a string"

    # do_steps_and_nexts left us ready to execute an xmalloc call,
    # so give that a try.
    # If we don't actually enter the xmalloc call when we give a
    # step command that seems like a genuine bug.  It seems to happen
    # on most RISC processors.
    # NOTE drow/2003-06-22: However, if we step back to the preceding two
    # lines, just keep stepping until we enter.
    set stepped_back 0
    setup_xfail "alpha-*-*" "mips-*-*"
    set description "step into xmalloc call"
    send_gdb "step\n"
    gdb_expect {
	-re "ncmd = 0;.*$gdb_prompt $" {
	    set stepped_back 1
	    send_gdb "step\n"
	    exp_continue
	}
        -re ".*cmdarg = .* xmalloc.*$gdb_prompt $" {
	    set stepped_back 1
	    send_gdb "step\n"
	    exp_continue
        }
	-re "dirsize = 1;.*$gdb_prompt $" {
	    set stepped_back 1
	    send_gdb "step\n"
	    exp_continue
	}
	-re ".*dirarg = .* xmalloc.*$gdb_prompt $" {
	    if { $stepped_back == 1 } {
		send_gdb "step\n"
		exp_continue
	    } else {
		fail "$description"
	    }
	}
	-re "xmalloc.*size=.*at.*utils.c.*$gdb_prompt $" {
	    pass "$description"
	}
	-re ".*No such file or directory.\r\n$gdb_prompt $" {
	    pass "$description (no source available)"
	}
	-re "A file or directory .* does not exist..\r\n$gdb_prompt $" {
	    pass "$description (no source available)"
	}
	-re ".*$gdb_prompt $" {
	    fail "$description"
	}
	timeout {
	    fail "$description (timeout)"
	}
    }

    # start the "xgdb" process
    send_gdb "continue\n"
    gdb_expect {
	-re "GNU gdb \[0-9\.\]*.*
Copyright \[0-9\]* Free Software Foundation, Inc.*
GDB is free software, covered by the GNU General Public License, and you are.*
welcome to change it and/or distribute copies of it under certain conditions.*
Type \"show copying\" to see the conditions.*
There is absolutely no warranty for GDB.  Type \"show warranty\" for details.*
This GDB was configured as .*$gdb_prompt $"\
	    { pass "xgdb is at prompt" }
	-re "GDB is free software and you are welcome to distribute copies of it.*
 under certain conditions; type \"show copying\" to see the conditions..*
There is absolutely no warranty for GDB; type \"show warranty\" for details..*
GDB.*Copyright \[0-9\]+ Free Software Foundation, Inc..*$gdb_prompt $"\
	    { pass "xgdb is at prompt (obsolescent gdb)" }
	-re ".*$gdb_prompt $"       { fail "xgdb is at prompt" }
	timeout	            { fail "(timeout) xgdb is at prompt" }
    }
    
    # set xgdb prompt so we can tell which is which
    send_gdb "set prompt (xgdb) \n"
    gdb_expect {
	-re "\[(\]xgdb\[)\].*\[(\]xgdb\[)\] $"	{ pass "Set xgdb prompt" }
	-re ".*$gdb_prompt $"		{ fail "Set xgdb prompt" }
	default				{ fail "(timeout) Set xgdb prompt" }
    }
    
    # kill the xgdb process
    set description "send ^C to child process"
    send_gdb "\003"
    gdb_expect {
	-re "Program received signal SIGINT.*$gdb_prompt $" {
	    pass "$description"
	}
	-re ".*$gdb_prompt $" {
	    fail "$description"
	}
	timeout {
	    fail "$description (timeout)"
	}
    }
    
    set description "send SIGINT signal to child process"
    send_gdb "signal SIGINT\n"
    gdb_expect {
	-re "Continuing with signal SIGINT.*$gdb_prompt $" {
	    pass "$description"
	}
	-re ".*$gdb_prompt $" {
	    fail "$description"
	}
	timeout {
	    fail "$description (timeout)"
	}
    }
    
    # get a stack trace
    #
    # This fails on some linux systems for unknown reasons.  On the
    # systems where it fails, sometimes it works fine when run manually.
    # The testsuite failures may not be limited to just aout systems.
    setup_xfail "i*86-pc-linuxaout-gnu"
    set description "backtrace through signal handler"
    send_gdb "backtrace\n"
    gdb_expect {
	-re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
	    pass "$description"
	}
	-re ".*$gdb_prompt $" {
	    # On the alpha, we hit the infamous problem about gdb
	    # being unable to get the frame pointer (mentioned in
	    # gdb/README).  As it is intermittent, there is no way to
	    # XFAIL it which will give us an XPASS if the problem goes
	    # away.
	    setup_xfail "alpha*-*-osf*"
	    fail "$description"
	}
	timeout {
	    fail "$description (timeout)"
	}
    }


    # Set the timeout back to the value it had when we were called.
    set timeout $oldtimeout
    verbose "Timeout is now $timeout seconds" 2

    # Restart gdb in case next test expects it to be started already.
    return 0
}

# Find a pathname to a file that we would execute if the shell was asked
# to run $arg using the current PATH.

proc find_gdb { arg } {

    # If the arg directly specifies an existing executable file, then
    # simply use it.

    if [file executable $arg] then {
	return $arg
    }

    set result [which $arg]
    if [string match "/" [ string range $result 0 0 ]] then {
	return $result
    }

    # If everything fails, just return the unqualified pathname as default
    # and hope for best.

    return $arg
}

# Run the test with self.
# Copy the file executable file in case this OS doesn't like to edit its own
# text space.

set GDB_FULLPATH [find_gdb $GDB]

# Remove any old copy lying around.
remote_file host delete x$tool

gdb_start
set file [remote_download host $GDB_FULLPATH x$tool]
set result [test_with_self $file];
gdb_exit;
catch "remote_file host delete $file";

if {$result <0} then {
    warning "Couldn't test self"
    return -1
}
