# Copyright 2002, 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.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Michael Snyder (msnyder@redhat.com)
# This is a test for the gdb command "dump".

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile "dump"

set srcfile  ${testfile}.c
set binfile  ${objdir}/${subdir}/${testfile}
set options  {debug}

set is64bitonly "no"

if [istarget "alpha*-*-*"] then {
    # SREC etc cannot handle 64-bit addresses.  Force the test
    # program into the low 31 bits of the address space.
    lappend options "additional_flags=-Wl,-taso"
}

if {[istarget "ia64*-*-*"] || [istarget "hppa64-*-*"]} then {
    set is64bitonly "yes"
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ${options}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Clean up any stale output files from previous test runs

remote_exec build "rm -f intarr1.bin intarr1b.bin intarr1.ihex intarr1.srec intarr1.tekhex intarr2.bin intarr2b.bin intarr2.ihex intarr2.srec intarr2.tekhex intstr1.bin intstr1b.bin intstr1.ihex intstr1.srec intstr1.tekhex intstr2.bin intstr2b.bin intstr2.ihex intstr2.srec intstr2.tekhex intarr3.srec"

# Test help (FIXME:)

# Run target program until data structs are initialized.

if { ! [ runto checkpoint1 ] } then {
    gdb_suppress_entire_file "Program failed to run, so all tests in this file will automatically fail."
}

# Now generate some dump files.

proc make_dump_file { command msg } {
  global gdb_prompt

    send_gdb "${command}\n"
    gdb_expect {
	-re ".*\[Ee\]rror.*$gdb_prompt $"      { fail $msg }
	-re ".*\[Ww\]arning.*$gdb_prompt $"    { fail $msg }
	-re ".*\[Uu\]ndefined .*$gdb_prompt $" { fail $msg }
	-re ".*$gdb_prompt $" { pass $msg }
	timeout                                { fail "$msg (timeout)" }
    }
}

make_dump_file "dump val intarr1.bin intarray" \
	"dump array as value, default"

make_dump_file "dump val intstr1.bin intstruct" \
	"dump struct as value, default"

make_dump_file "dump bin val intarr1b.bin intarray" \
	"dump array as value, binary"

make_dump_file "dump bin val intstr1b.bin intstruct" \
	"dump struct as value, binary"

make_dump_file "dump srec val intarr1.srec intarray" \
	"dump array as value, srec"

make_dump_file "dump srec val intstr1.srec intstruct" \
	"dump struct as value, srec"

make_dump_file "dump ihex val intarr1.ihex intarray" \
	"dump array as value, intel hex"

make_dump_file "dump ihex val intstr1.ihex intstruct" \
	"dump struct as value, intel hex"

make_dump_file "dump tekhex val intarr1.tekhex intarray" \
	"dump array as value, tekhex"

make_dump_file "dump tekhex val intstr1.tekhex intstruct" \
	"dump struct as value, tekhex"

proc capture_value { expression args } {
    global gdb_prompt
    global expect_out

    set output_string ""
    if {[llength $args] > 0} {
	# Convert $args into a simple string.
	set test "[join $args]; capture $expression"
    } {
	set test "capture $expression"
    }
    gdb_test_multiple "print ${expression}" "$test" {
	-re "\\$\[0-9\]+ = (\[^\r\n\]+).*$gdb_prompt $" {
	    set output_string "$expect_out(1,string)"
	    pass "$test"
	}
	-re "(Cannot access memory at address \[^\r\n\]+).*$gdb_prompt $" {
	    # Even a failed value is valid
	    set output_string "$expect_out(1,string)"
	    pass "$test"
	}
    }
    return $output_string
}

set array_start  [capture_value "/x &intarray\[0\]"]
set array_end    [capture_value "/x &intarray\[32\]"]
set struct_start [capture_value "/x &intstruct"]
set struct_end   [capture_value "/x &intstruct + 1"]

set array_val    [capture_value "intarray"]
set struct_val   [capture_value "intstruct"]

make_dump_file "dump mem intarr2.bin $array_start $array_end" \
	"dump array as memory, default"

make_dump_file "dump  mem intstr2.bin $struct_start $struct_end" \
	"dump struct as memory, default"

make_dump_file "dump bin mem intarr2b.bin $array_start $array_end" \
	"dump array as memory, binary"

make_dump_file "dump bin mem intstr2b.bin $struct_start $struct_end" \
	"dump struct as memory, binary"

make_dump_file "dump srec mem intarr2.srec $array_start $array_end" \
	"dump array as memory, srec"

make_dump_file "dump srec mem intstr2.srec $struct_start $struct_end" \
	"dump struct as memory, srec"

make_dump_file "dump ihex mem intarr2.ihex $array_start $array_end" \
	"dump array as memory, ihex"

make_dump_file "dump ihex mem intstr2.ihex $struct_start $struct_end" \
	"dump struct as memory, ihex"

make_dump_file "dump tekhex mem intarr2.tekhex $array_start $array_end" \
	"dump array as memory, tekhex"

make_dump_file "dump tekhex mem intstr2.tekhex $struct_start $struct_end" \
	"dump struct as memory, tekhex"

# test complex expressions
make_dump_file \
	"dump srec mem intarr3.srec &intarray \(char *\) &intarray + sizeof intarray" \
	"dump array as mem, srec, expressions"


# Now start a fresh gdb session, and reload the saved value files.

gdb_exit
gdb_start
gdb_file_cmd ${binfile}

# Reload saved values one by one, and compare.

if { ![string compare $array_val \
	   [capture_value "intarray" "file binfile"]] } then {
    fail "start with intarray un-initialized"
} else {
    pass "start with intarray un-initialized"
}

if { ![string compare $struct_val \
	   [capture_value "intstruct" "file binfile"]] } then {
    fail "start with intstruct un-initialized"
} else {
    pass "start with intstruct un-initialized"
}

proc test_reload_saved_value { filename msg oldval newval } {
    global gdb_prompt
    
    gdb_file_cmd $filename
    if { ![string compare $oldval \
	       [capture_value $newval "$msg"]] } then { 
	pass "$msg; value restored ok"
    } else {
	fail "$msg; value restored ok"
    }
}

proc test_restore_saved_value { restore_args msg oldval newval } {
    global gdb_prompt
    
    gdb_test "restore $restore_args" \
	"Restoring .*" \
	"$msg; file restored ok"
    if { ![string compare $oldval \
	       [capture_value $newval "$msg"]] } then { 
	pass "$msg; value restored ok"
    } else {
	fail "$msg; value restored ok"
    }
}

# srec format can not be loaded for 64-bit-only platforms
if ![string compare $is64bitonly "no"] then {
  test_reload_saved_value "intarr1.srec" "reload array as value, srec" \
	$array_val "intarray"
  test_reload_saved_value "intstr1.srec" "reload struct as value, srec" \
	$struct_val "intstruct"
  test_reload_saved_value "intarr2.srec" "reload array as memory, srec" \
	$array_val "intarray"
  test_reload_saved_value "intstr2.srec" "reload struct as memory, srec" \
	$struct_val "intstruct"
}

# ihex format can not be loaded for 64-bit-only platforms
if ![string compare $is64bitonly "no"] then {

  test_reload_saved_value "intarr1.ihex" "reload array as value, intel hex" \
	$array_val "intarray"
  test_reload_saved_value "intstr1.ihex" "reload struct as value, intel hex" \
	$struct_val "intstruct"
  test_reload_saved_value "intarr2.ihex" "reload array as memory, intel hex" \
	$array_val "intarray"
  test_reload_saved_value "intstr2.ihex" "reload struct as memory, intel hex" \
	$struct_val "intstruct"
}

# tekhex format can not be loaded for 64-bit-only platforms
if ![string compare $is64bitonly "no"] then {
  test_reload_saved_value "intarr1.tekhex" "reload array as value, tekhex" \
	$array_val "intarray"
  test_reload_saved_value "intstr1.tekhex" "reload struct as value, tekhex" \
	$struct_val "intstruct"
  test_reload_saved_value "intarr2.tekhex" "reload array as memory, tekhex" \
	$array_val "intarray"
  test_reload_saved_value "intstr2.tekhex" "reload struct as memory, tekhex" \
	$struct_val "intstruct"
}

# Start a fresh gdb session

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Run to main.
if { ! [ runto_main ] } then {
    gdb_suppress_entire_file "Program failed to run, so remaining tests in this file will automatically fail."
}

if { ![string compare $array_val \
	   [capture_value "intarray" "load binfile"]] } then {
    fail "start with intarray un-initialized, runto main"
} else {
    pass "start with intarray un-initialized, runto main"
}

if { ![string compare $struct_val \
	   [capture_value "intstruct" "load binfile"]] } then {
    fail "start with intstruct un-initialized, runto main"
} else {
    pass "start with intstruct un-initialized, runto main"
}

if ![string compare $is64bitonly "no"] then {
  test_restore_saved_value "intarr1.srec" "array as value, srec" \
	$array_val "intarray"

  test_restore_saved_value "intstr1.srec" "struct as value, srec" \
	$struct_val "intstruct"

  gdb_test "print zero_all ()" "void" "zero all"

  test_restore_saved_value "intarr2.srec" "array as memory, srec" \
	$array_val "intarray"

  test_restore_saved_value "intstr2.srec" "struct as memory, srec" \
	$struct_val "intstruct"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.ihex" "array as value, ihex" \
	$array_val "intarray"

  test_restore_saved_value "intstr1.ihex" "struct as value, ihex" \
	$struct_val "intstruct"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr2.ihex" "array as memory, ihex" \
	$array_val "intarray"

  test_restore_saved_value "intstr2.ihex" "struct as memory, ihex" \
	$struct_val "intstruct"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.tekhex" "array as value, tekhex" \
	$array_val "intarray"

  test_restore_saved_value "intstr1.tekhex" "struct as value, tekhex" \
	$struct_val "intstruct"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr2.tekhex" "array as memory, tekhex" \
	$array_val "intarray"

  test_restore_saved_value "intstr2.tekhex" "struct as memory, tekhex" \
	$struct_val "intstruct"
}

gdb_test "print zero_all ()" ""

test_restore_saved_value "intarr1.bin binary $array_start" \
	"array as value, binary" \
	$array_val "intarray"

test_restore_saved_value "intstr1.bin binary $struct_start" \
	"struct as value, binary" \
	$struct_val "intstruct"

gdb_test "print zero_all ()" ""

test_restore_saved_value "intarr2.bin binary $array_start" \
	"array as memory, binary" \
	$array_val "intarray"

test_restore_saved_value "intstr2.bin binary $struct_start" \
	"struct as memory, binary" \
	$struct_val "intstruct"

# test restore with offset.

set array2_start   [capture_value "/x &intarray2\[0\]"]
set struct2_start  [capture_value "/x &intstruct2"]
set array2_offset  \
	[capture_value "(char *) &intarray2 - (char *) &intarray"]
set struct2_offset \
	[capture_value "(char *) &intstruct2 - (char *) &intstruct"]

gdb_test "print zero_all ()" ""


if ![string compare $is64bitonly "no"] then {
  test_restore_saved_value "intarr1.srec $array2_offset" \
	"array copy, srec" \
	$array_val "intarray2"

  test_restore_saved_value "intstr1.srec $struct2_offset" \
	"struct copy, srec" \
	$struct_val "intstruct2"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.ihex $array2_offset" \
	"array copy, ihex" \
	$array_val "intarray2"

  test_restore_saved_value "intstr1.ihex $struct2_offset" \
	"struct copy, ihex" \
	$struct_val "intstruct2"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.tekhex $array2_offset" \
	"array copy, tekhex" \
	$array_val "intarray2"

  test_restore_saved_value "intstr1.tekhex $struct2_offset" \
	"struct copy, tekhex" \
	$struct_val "intstruct2"
}

gdb_test "print zero_all ()" ""

test_restore_saved_value "intarr1.bin binary $array2_start" \
	"array copy, binary" \
	$array_val "intarray2"

test_restore_saved_value "intstr1.bin binary $struct2_start" \
	"struct copy, binary" \
	$struct_val "intstruct2"

#
# test restore with start/stop addresses.
#
# For this purpose, we will restore just the third element of the array, 
# and check to see that adjacent elements are not modified.
#
# We will need the address and offset of the third and fourth elements.
#

set element3_start  [capture_value "/x &intarray\[3\]"]
set element4_start  [capture_value "/x &intarray\[4\]"]
set element3_offset \
	[capture_value "/x (char *) &intarray\[3\] - (char *) &intarray\[0\]"]
set element4_offset \
	[capture_value "/x (char *) &intarray\[4\] - (char *) &intarray\[0\]"]

if ![string compare $is64bitonly "no"] then {
  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.srec 0 $element3_start $element4_start" \
	"array partial, srec" 4 "intarray\[3\]"

  gdb_test "print intarray\[2\] == 0" " = 1" "element 2 not changed - 1"
  gdb_test "print intarray\[4\] == 0" " = 1" "element 4 not changed - 1"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.ihex 0 $element3_start $element4_start" \
	"array partial, ihex" 4 "intarray\[3\]"

  gdb_test "print intarray\[2\] == 0" " = 1" "element 2 not changed - 2"
  gdb_test "print intarray\[4\] == 0" " = 1" "element 4 not changed - 2"

  gdb_test "print zero_all ()" ""

  test_restore_saved_value "intarr1.tekhex 0 $element3_start $element4_start" \
	"array partial, tekhex" 4 "intarray\[3\]"

  gdb_test "print intarray\[2\] == 0" " = 1" "element 2 not changed - 3"
  gdb_test "print intarray\[4\] == 0" " = 1" "element 4 not changed - 3"
}

gdb_test "print zero_all ()" ""

test_restore_saved_value \
    "intarr1.bin binary $array_start $element3_offset $element4_offset" \
    "array partial, binary" 4 "intarray\[3\]"

gdb_test "print intarray\[2\] == 0" " = 1" "element 2 not changed - 4"
gdb_test "print intarray\[4\] == 0" " = 1" "element 4 not changed - 4"

if ![string compare $is64bitonly "no"] then {
  gdb_test "print zero_all ()" "" ""

  # restore with expressions 
  test_restore_saved_value \
	"intarr3.srec ${array2_start}-${array_start} &intarray\[3\] &intarray\[4\]" \
	"array partial with expressions" 4 "intarray2\[3\]"

  gdb_test "print intarray2\[2\] == 0" " = 1" "element 2 not changed, == 4"
  gdb_test "print intarray2\[4\] == 0" " = 1" "element 4 not changed, == 4"
}

# clean up files

remote_exec build "rm -f intarr1.bin intarr1b.bin intarr1.ihex intarr1.srec intarr1.tekhex intarr2.bin intarr2b.bin intarr2.ihex intarr2.srec intarr2.tekhex intstr1.bin intstr1b.bin intstr1.ihex intstr1.srec intstr1.tekhex intstr2.bin intstr2b.bin intstr2.ihex intstr2.srec intstr2.tekhex intarr3.srec"
