# 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 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
