# Copyright 1998-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/>.

# This file was written by Elena Zannoni (ezannoni@cygnus.com)

# this file tests maintenance commands and help on those.

# source file used is break.c


#maintenance check-symtabs -- Check consistency of psymtabs and symtabs
#maintenance space -- Set the display of space usage
#maintenance set -- Set GDB internal variables used by the GDB maintainer
#maintenance show -- Show GDB internal variables used by the GDB maintainer
#maintenance time -- Set the display of time usage
#maintenance demangle -- Demangle a C++ mangled name
#maintenance dump-me -- Get fatal error; make debugger dump its core
#maintenance print -- Maintenance command for printing GDB internal state
#maintenance info -- Commands for showing internal info about the program being debugged
#maintenance internal-error -- Give GDB an internal error.
#
#maintenance print dummy-frames -- Print the dummy frame stack
#maintenance print statistics -- Print statistics about internal gdb state
#maintenance print objfiles -- Print dump of current object file definitions
#maintenance print psymbols -- Print dump of current partial symbol definitions
#maintenance print msymbols -- Print dump of current minimal symbol definitions
#maintenance print symbols -- Print dump of current symbol definitions
#maintenance print type -- Print a type chain for a given symbol
#maintenance print unwind -- Print unwind table entry at given address
#
#
#maintenance info sections -- List the BFD sections of the exec and core files
#maintenance info breakpoints -- Status of all breakpoints
#



set testfile "break"
set srcfile ${testfile}.c
set srcfile1 ${testfile}1.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}0.o" object {debug nowarnings}] != "" } {
     untested maint.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug nowarnings}] != "" } {
     untested maint.exp
     return -1
}

if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug nowarnings}] != "" } {
     untested maint.exp
     return -1
}


gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

# The commands we test here produce many lines of output; disable "press
# <return> to continue" prompts.
gdb_test_no_output "set height 0"

# Tests that require that no program is running

gdb_file_cmd ${binfile}

# Test for a regression where this command would internal-error if the
# program wasn't running.
gdb_test "maint print registers" "Name.*Nr.*Rel.*Offset.*Size.*Type.*"

# Tests that can or should be done with a running program

gdb_load ${binfile}

if ![runto_main] then {
        perror "tests suppressed"
}


#
# this command does not produce any output
# unless there is some problem with the symtabs and psymtabs
# so that branch will really never be covered in this tests here!!
#

# guo: on linux this command output is huge.  for some reason splitting up
# the regexp checks works.
#
send_gdb "maint check-symtabs\n"
gdb_expect  {
    -re "^maint check-symtabs" {
	gdb_expect {
	    -re "$gdb_prompt $" {
		pass "maint check-symtabs"
	    }
	    timeout { fail "(timeout) maint check-symtabs" }
	}
    }
    -re ".*$gdb_prompt $"     { fail "maint check-symtabs" }
    timeout         { fail "(timeout) maint check-symtabs" }
}

gdb_test "maint space" \
    "\"maintenance space\" takes a numeric argument\\."

gdb_test "maint space 1" \
    "Space used: $decimal \\(\\+$decimal for this command\\)"

gdb_test "maint time" \
    "\"maintenance time\" takes a numeric argument\\..*Space used: $decimal \\(\\+$decimal for this command\\)" 

gdb_test "maint time 1" \
    "Command execution time: $decimal.*Space used: $decimal \\(\\+$decimal for this command\\)"

gdb_test "maint time 0" \
    "Space used: $decimal \\(\\+$decimal for this command\\)"

gdb_test_no_output "maint space 0"

gdb_test "maint demangle" \
    "\"maintenance demangle\" takes an argument to demangle\\."

gdb_test "maint demangle main" "Can't demangle \"main\""



# The timeout value is raised, because printing all the symbols and
# statistical information about Cygwin and Windows libraries takes a lot
# of time.
if [istarget "*-*-cygwin*"] {
	set oldtimeout $timeout
	set timeout [expr $timeout + 500]
}

send_gdb "maint print statistics\n"
gdb_expect  {
    -re "Statistics for\[^\n\r\]*break\[^\n\r\]*:\r\n  Number of \"minimal\" symbols read: $decimal\r\n  Number of \"partial\" symbols read: $decimal\r\n  Number of \"full\" symbols read: $decimal\r\n  Number of \"types\" defined: $decimal\r\n  Number of psym tables \\(not yet expanded\\): $decimal\r\n  Number of symbol tables: $decimal\r\n  Number of symbol tables with line tables: $decimal\r\n  Number of symbol tables with blockvectors: $decimal\r\n  Total memory used for objfile obstack: $decimal\r\n  Total memory used for BFD obstack: $decimal\r\n  Total memory used for psymbol cache: $decimal\r\n  Total memory used for macro cache: $decimal\r\n  Total memory used for file name cache: $decimal\r\n" {
	gdb_expect {
	    -re "$gdb_prompt $" {
		pass "maint print statistics"
	    }
	    timeout { fail "(timeout) maint print statistics" }
	}
    }
    -re ".*$gdb_prompt $"     { fail "maint print statistics" }
    timeout         { fail "(timeout) maint print statistics" }
}

# There aren't any ...
gdb_test_no_output "maint print dummy-frames"

send_gdb "maint print objfiles\n"

# To avoid timeouts, we avoid expects with many .* patterns that match
# many lines.  Instead, we keep track of which milestones we've seen
# in the output, and stop when we've seen all of them.

set header 0
set psymtabs 0
set symtabs 0
set keep_looking 1

while {$keep_looking} {
    gdb_expect  {

	-re ".*Object file.*break($EXEEXT)?:  Objfile at $hex, bfd at $hex, \[0-9\]* minsyms\[\r\t \]+\n" { set header 1 }
	-re ".*Psymtabs:\[\r\t \]+\n" { set psymtabs 1 }
	-re ".*Symtabs:\[\r\t \]+\n" { set symtabs 1 }

	-re ".*$gdb_prompt $" { 
	    set keep_looking 0
	}
	timeout { 
	    fail "(timeout) maint print objfiles" 
	    set keep_looking 0
	}
    }
}

proc maint_pass_if {val name} {
    if $val { pass $name } else { fail $name }
}

maint_pass_if $header   "maint print objfiles: header"
maint_pass_if $psymtabs "maint print objfiles: psymtabs"
maint_pass_if $symtabs  "maint print objfiles: symtabs"

gdb_test "maint print psymbols" \
    "print-psymbols takes an output file name and optional symbol file name" \
    "maint print psymbols w/o args"



send_gdb "maint print psymbols psymbols_output ${srcdir}/${subdir}/${srcfile}\n"
gdb_expect  {
    -re "^maint print psymbols psymbols_output \[^\n\]*\r\n$gdb_prompt $" {
	send_gdb "shell ls psymbols_output\n"
	gdb_expect {
	    -re "psymbols_output\r\n$gdb_prompt $" {
		# We want this grep to be as specific as possible,
		# so it's less likely to match symbol file names in
		# psymbols_output.  Yes, this actually happened;
		# poor expect got tons of output, and timed out
		# trying to match it.   --- Jim Blandy <jimb@cygnus.com>
		send_gdb "shell grep 'main.*function' psymbols_output\n"
		gdb_expect {
		    -re ".main., function, $hex.*$gdb_prompt $" {
			pass "maint print psymbols 1"
		    }
		    -re ".*main.  .., function, $hex.*$gdb_prompt $" {
			pass "maint print psymbols 2"
		    }
		    -re ".*$gdb_prompt $" { fail "maint print psymbols" }
		    timeout     { fail "(timeout) maint print psymbols" }
		}
		gdb_test "shell rm -f psymbols_output" ".*"
	    }
	    -re ".*$gdb_prompt $"       { fail "maint print psymbols" }
	    timeout           { fail "(timeout) maint print psymbols" }
	}
    }
    -re ".*$gdb_prompt $"       { fail "maint print psymbols" }
    timeout           { fail "(timeout) maint print psymbols" }
}

gdb_test "maint print msymbols" \
    "print-msymbols takes an output file name and optional symbol file name" \
    "maint print msymbols w/o args"


send_gdb "maint print msymbols msymbols_output ${binfile}\n"
gdb_expect  {
    -re "^maint print msymbols msymbols_output \[^\n\]*\r\n$gdb_prompt $" {
	send_gdb "shell ls msymbols_output\n"
	gdb_expect {
	    -re "msymbols_output\r\n$gdb_prompt $" {
		send_gdb "shell grep factorial msymbols_output\n"
		gdb_expect {
		    -re "\\\[ *$decimal\\\] \[tT\]\[ \t\]+$hex \\.?factorial.*$gdb_prompt $" {
			pass "maint print msymbols"
		    }
		    -re ".*$gdb_prompt $"     { fail "maint print msymbols" }
		    timeout         { fail "(timeout) maint print msymbols" }
		}
		gdb_test "shell rm -f msymbols_output" ".*"
	    }
	    -re ".*$gdb_prompt $"     { fail "maint print msymbols" }
	    timeout         { fail "(timeout) maint print msymbols" }
	}
    }
    -re ".*$gdb_prompt $"     { fail "maint print msymbols" }
    timeout         { fail "(timeout) maint print msymbols" }
}

# Check that maint print msymbols allows relative pathnames
set mydir [pwd]
gdb_test "cd ${objdir}" \
    "Working directory [string_to_regexp ${objdir}]\..*" \
    "cd to objdir"

gdb_test_multiple "maint print msymbols msymbols_output2 ${subdir}/${testfile}" "maint print msymbols" {
    -re "^maint print msymbols msymbols_output2 \[^\n\]*\r\n$gdb_prompt $" {
    	gdb_test_multiple "shell ls msymbols_output2" "maint print msymbols" {
	    -re "msymbols_output2\r\n$gdb_prompt $" {
	    	gdb_test_multiple "shell grep factorial msymbols_output2" "maint print msymbols" {
		    -re "\\\[ *$decimal\\\] \[tT\]\[ \t\]+$hex \\.?factorial.*$gdb_prompt $" {
		    	pass "maint print msymbols"
		    }
		    -re ".*$gdb_prompt $" {
		        fail "maint print msymbols"
		    }
		    timeout {
		        fail "(timeout) maint print msymbols"
		    }
		}
		gdb_test "shell rm -f msymbols_output2" ".*"
	    }
	    -re ".*$gdb_prompt $" {
		fail "maint print msymbols"
	    }
	    timeout {
	    	fail "(timeout) maint print msymbols"
	    }
	}
    }
    -re ".*$gdb_prompt $" {
	fail "maint print msymbols"
    }
    timeout {
	fail "(timeout) maint print msymbols"
    }
}
gdb_test "cd ${mydir}" \
    "Working directory [string_to_regexp ${mydir}]\..*" \
    "cd to mydir"

gdb_test "maint print symbols" \
    "Arguments missing: an output file name and an optional symbol file name" \
    "maint print symbols w/o args"


# Request symbols for one particular source file so that we don't try to
# dump the symbol information for the entire C library - over 500MB nowadays
# for GNU libc.

send_gdb "maint print symbols symbols_output ${srcdir}/${subdir}/${srcfile}\n"
gdb_expect  {
    -re "^maint print symbols symbols_output \[^\n\]*\r\n$gdb_prompt $" {
	send_gdb "shell ls symbols_output\n"
	gdb_expect {
	    -re "symbols_output\r\n$gdb_prompt $" {
		# See comments for `maint print psymbols'.
		send_gdb "shell grep 'main(.*block' symbols_output\n"
		gdb_expect {
		    -re "int main\\(int, char \\*\\*, char \\*\\*\\); block.*$gdb_prompt $" {
			pass "maint print symbols"
		    }
		    -re ".*$gdb_prompt $"     { fail "maint print symbols" }
		    timeout         { fail "(timeout) maint print symbols" }
		}
		gdb_test "shell rm -f symbols_output" ".*"
	    }
	    -re ".*$gdb_prompt $"     { fail "maint print symbols" }
	    timeout         { fail "(timeout) maint print symbols" }
	}
    }
    -re ".*$gdb_prompt $"     { fail "maint print symbols" }
    timeout         { fail "(timeout) maint print symbols" }
}

set msg "maint print type"
gdb_test_multiple "maint print type argc" $msg {
    -re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\n$gdb_prompt $" {
        pass $msg
    }
}

if [istarget "hppa*-*-11*"] {
    setup_xfail hppa*-*-*11* CLLbs14860
    gdb_test_multiple "maint print unwind &main" "maint print unwind" {
        -re ".*unwind_table_entry \\($hex\\):\r\n\tregion_start = $hex <main>\r\n\tregion_end = $hex <main\\+\[0-9\]*>\r\n\tflags = Args_stored Save_RP\r\n\tRegion_description = $hex\r\n\tEntry_FR = $hex\r\n\tEntry_GR = $hex\r\n\tTotal_frame_size = $hex\r\n$gdb_prompt $" {
	    pass "maint print unwind"
	}
        -re ".*unwind_table_entry \\($hex\\):\r\n\tregion_start = $hex <main>\r\n\tregion_end = $hex <main\\+\[0-9\]*>\r\n\tflags = Args_stored Save_RP\r\n\tFLD = $hex\r\n\tFLD = $hex\r\n\tFLD = $hex\r\n\tFLD = $hex\r\n$gdb_prompt $" {
	    xfail "maint print unwind"
	}
    }
}

set oldtimeout $timeout
set timeout [expr $timeout + 300]

# It'd be nice to check for every possible section.  However, that's
# problematic, since the relative ordering wanders from release to
# release of the compilers.  Instead, we'll just check for two
# sections which appear to always come out in the same relative
# order.  (If that changes, then we should just check for one
# section.)
#
# And by the way: This testpoint will break for PA64, where a.out's
# are ELF files.

# Standard GNU names.
set text_section ".text"
set data_section ".data"

gdb_test_multiple "maint info sections" "maint info sections" {
    -re "Exec file:\r\n.*break($EXEEXT)?., file type.*ER_RO.*$gdb_prompt $" {
	# Looks like RealView which uses different section names.
	set text_section ER_RO
	set data_section ER_RW
	pass "maint info sections"
    }
    -re "Exec file:\r\n.*break($EXEEXT)?., file type.*neardata.*$gdb_prompt $" {
	# c6x doesn't have .data section.  It has .neardata and .fardata section.
	set data_section ".neardata"
	pass "maint info sections"
    }
    -re "Exec file:\r\n.*break($EXEEXT)?., file type.*$gdb_prompt $" {
	pass "maint info sections"
    }
}

# Test for new option: maint info sections <section name>
# If you don't have a .text section, this will require tweaking.

gdb_test_multiple "maint info sections $text_section" \
    "maint info sections .text" {
	-re ".* \\.bss .*$gdb_prompt $" {
	    fail "maint info sections .text"
	}
	-re ".* $data_section .*$gdb_prompt $" {
	    fail "maint info sections .text"
	}
	-re ".* $text_section .*$gdb_prompt $" {
	    pass "maint info sections .text"
	}
    }

# Test for new option: CODE section flag
# If your data section is tagged CODE, xfail this test.

gdb_test_multiple "maint info sections CODE" "maint info sections CODE" {
    -re ".* $data_section .*$gdb_prompt $" { fail "maint info sections CODE" }
    -re ".* $text_section .*$gdb_prompt $" { pass "maint info sections CODE" }
}

# Test for new option: DATA section flag
# If your text section is tagged DATA, xfail this test.
#
# The "maint info sections DATA" test is marked for XFAIL on Windows,
# because Windows has text sections marked DATA.
setup_xfail "*-*-*cygwin*"
setup_xfail "*-*-*mingw*"

gdb_test_multiple "maint info sections DATA" "maint info sections DATA" {
    -re ".* $text_section .*$gdb_prompt $" { fail "maint info sections DATA" }
    -re ".* $data_section .*$gdb_prompt $" { pass "maint info sections DATA" }
    -re ".* .rodata .*$gdb_prompt $" { pass "maint info sections DATA" }
}

set bp_location6 [gdb_get_line_number "set breakpoint 6 here"]

gdb_test_multiple "maint info breakpoints" "maint info breakpoints" {
    -re "Num\[ \t\]+Type\[ \t\]+Disp\[ \t\]+Enb\[ \t\]+Address\[ \t\]+What\r\n1\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+$hex\[ \t\]+in main at.*break.c:$bp_location6 inf 1\r\n\[ \t\]+breakpoint already hit 1 time\r\n.*$gdb_prompt $" {
	pass "maint info breakpoints"
    }
    -re "Num\[ \t\]+Type\[ \t\]+Disp\[ \t\]+Enb\[ \t\]+Address\[ \t\]+What\r\n1\[ \t\]+breakpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+$hex in main at.*break.c:$bp_location6 sspace 1\r\n\[ \t\]+breakpoint already hit 1 time\r\n-1\[ \t\]+shlib events\[ \t\]+keep\[ \t\]+y\[ \t\]+$hex.*breakpoint already hit.*$gdb_prompt $" {
	pass "maint info breakpoints (with shlib events)"
    }
}

gdb_test "maint print" \
    "\"maintenance print\" must be followed by the name of a print command\\.\r\nList.*unambiguous\\..*" \
    "maint print w/o args" 

gdb_test "maint info" \
    "\"maintenance info\" must be followed by the name of an info command\\.\r\nList.*unambiguous\\..*" \
    "maint info w/o args"

gdb_test "maint" \
    "\"maintenance\" must be followed by the name of a maintenance command\\.\r\nList.*unambiguous\\..*" \
    "maint w/o args"

set timeout $oldtimeout

#============test help on maint commands

gdb_test "help maint" \
    "Commands for use by GDB maintainers\\..*Includes commands to dump specific internal GDB structures in.*a human readable form, to cause GDB to deliberately dump core,.*to test internal functions such as the C../ObjC demangler, etc\\..*List of maintenance subcommands:.*maintenance check-symtabs.*maintenance demangle.*(maintenance dump-me.*)?maintenance info.*maintenance internal-error.*maintenance print.*maintenance set.*maintenance show.*maintenance space.*maintenance time.*Type.*help maintenance.*followed by maintenance subcommand name for full documentation\\..*Command name abbreviations are allowed if unambiguous\\..*" 

gdb_test "help maint check-symtabs" \
    "Check consistency of psymtabs and symtabs\\..*"

gdb_test "help maint space" \
    "Set the display of space usage\\.\r\nIf nonzero, will cause the execution space for each command to be\r\ndisplayed, following the command's output\\..*"

gdb_test "help maint time" \
    "Set the display of time usage\\.\r\nIf nonzero, will cause the execution time for each command to be\r\ndisplayed, following the command's output\\..*"

gdb_test "help maint demangle" \
    "Demangle a C\\+\\+/ObjC mangled name\\.\r\nCall internal GDB demangler routine to demangle a C\\+\\+ link name\r\nand prints the result\\..*"

gdb_test "help maint dump-me" \
    "Get fatal error; make debugger dump its core\\.\r\nGDB sets its handling of SIGQUIT back to SIG_DFL and then sends\r\nitself a SIGQUIT signal\\..*"

gdb_test "help maint internal-error" \
    "Give GDB an internal error\\.\r\nCause GDB to behave as if an internal error was detected\\..*"

gdb_test "help maint internal-warning" \
    "Give GDB an internal warning\\.\r\nCause GDB to behave as if an internal warning was reported\\..*"

gdb_test "help maint print statistics" \
    "Print statistics about internal gdb state\\..*"

gdb_test "help maint print dummy-frames" \
	"Print the contents of the internal dummy-frame stack."

gdb_test "help maint print objfiles" \
    "Print dump of current object file definitions\\..*"

gdb_test "help maint print psymbols" \
    "Print dump of current partial symbol definitions\\.\r\nEntries in the partial symbol table are dumped to file OUTFILE\\.\r\nIf a SOURCE file is specified, dump only that file's partial symbols\\..*"

gdb_test "help maint print msymbols" \
    "Print dump of current minimal symbol definitions\\.\r\nEntries in the minimal symbol table are dumped to file OUTFILE\\.\r\nIf a SOURCE file is specified, dump only that file's minimal symbols\\..*"

gdb_test "help maint print symbols" \
    "Print dump of current symbol definitions\\.\r\nEntries in the full symbol table are dumped to file OUTFILE\\.\r\nIf a SOURCE file is specified, dump only that file's symbols\\..*"

gdb_test "help maint print type" \
    "Print a type chain for a given symbol\\.\r\nFor each node in a type chain, print the raw data for each member of\r\nthe type structure, and the interpretation of the data\\..*"

if [istarget "hppa*-*-*"] {
    gdb_test "help maint print unwind" \
	"Print unwind table entry at given address\\..*"
}

gdb_test "help maint info sections" \
    "List the BFD sections of the exec and core files\\..*"

gdb_test "help maint info breakpoints" \
    "Status of all breakpoints, or breakpoint number NUMBER.*"


#send_gdb "help maint info breakpoints\n"
#expect  {
#        -re "Status of all breakpoints, or breakpoint number NUMBER\\.\[ \r\n\t\]+The \"Type\" column indicates one of:\[ \r\n\t\]+breakpoint\[ \t\]+- normal breakpoint\[ \r\n\t\]+watchpoint\[ \t\]+- watchpoint\[ \r\n\t\]+longjmp\[ \t\]+- internal breakpoint used to step through longjmp\\(\\)\[ \r\n\t\]+longjmp resume - internal breakpoint at the target of longjmp\\(\\)\[ \r\n\t\]+until\[ \t\]+- internal breakpoint used by the \"until\" command\[ \r\n\t\]+finish\[ \t\]+- internal breakpoint used by the \"finish\" command\[ \r\n\t\]+The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\[ \r\n\t\]+the disposition of the breakpoint after it gets hit\\.  \"dis\" means that the\[ \r\n\t\]+breakpoint will be disabled\\.  The \"Address\" and \"What\" columns indicate the\[ \r\n\t\]+address and file.line number respectively\\.\[ \r\n\t\]+Convenience variable \".*\" and default examine address for \"x\"\[ \r\n\t\]+are set to the address of the last breakpoint listed\\.\[ \r\n\t\]+Convenience variable \".bpnum\" contains the number of the last\[ \r\n\t\]+breakpoint set\\..*$gdb_prompt $"\
#                        { pass "help maint info breakpoints" }
#        -re ".*$gdb_prompt $"       { fail "help maint info breakpoints" }
#        timeout         { fail "(timeout) help maint info breakpoints" }
#        }

gdb_test "help maint info" \
    "Commands for showing internal info about the program being debugged.*unambiguous\\..*"

test_prefix_command_help {"maint print" "maintenance print"} {
    "Maintenance command for printing GDB internal state\\.\[\r\n\]+"
}

test_prefix_command_help {"maint" "maintenance"} {
    "Commands for use by GDB maintainers\\.\[\r\n\]+"
    "Includes commands to dump specific internal GDB structures in\[\r\n\]+"
    "a human readable form, to cause GDB to deliberately dump core,\[\r\n\]+"
    "to test internal functions such as the C\\+\\+/ObjC demangler, etc\\.\[\r\n\]+"
}

#set oldtimeout $timeout
#set timeout [expr $timeout + 300]

gdb_test_multiple "maint dump-me" "maint dump-me" {
    -re "Should GDB dump core.*\\(y or n\\) $" {
	gdb_test "n" ".*" "maint dump-me"
    }
}

send_gdb "maint internal-error\n"
gdb_expect {
    -re "A problem internal to GDB has been detected" {
	pass "maint internal-error"
	if [gdb_internal_error_resync] {
	    pass "internal-error resync"
	} else {
	    fail "internal-error resync"
	}
    }
    -re ".*$gdb_prompt $" {
	fail "maint internal-error"
	untested "internal-error resync"
    }
    timeout {
	fail "maint internal-error (timeout)"
	untested "internal-error resync"
    }
}

#set timeout $oldtimeout


gdb_exit
return 0
