# Copyright 2002, 2004, 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 Michael Snyder (msnyder@redhat.com)
# This is a test for the gdb command "dump".


set testfile "dump"

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

set is64bitonly "no"
set endian "auto"

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 {[istarget "spu*-*-*"]} then {
    # The internal address format used for the combined Cell/B.E.
    # debugger requires 64-bit.
    set is64bitonly "yes"
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ${options}] != "" } {
     untested dump.exp
     return -1
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

gdb_test "dump mem /dev/null 0x10 0x20" "Cannot access memory at address 0x10" \
	 "inaccessible memory is reported"

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 {
    untested dump.exp
    return -1
}

# Get the endianness for the later use with endianless formats.

gdb_test_multiple "show endian" "show endian" {
    -re ".* (big|little) endian.*$gdb_prompt $" { 
	set endian $expect_out(1,string) 
	pass "endianness: $endian"
    }
}

# Now generate some dump files.

proc make_dump_file { command msg } {
  global gdb_prompt

    gdb_test_multiple "${command}" "$msg" {
	-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 }
    }
}

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
}

# POINTER is a pointer and this proc captures the value of POINTER along
# with POINTER's type.  For example, POINTER is "&intarray", this proc will
# call "p &intarray", capture "(int (*)[32]) 0x804a0e0", and return this
# string.

proc capture_pointer_with_type { pointer } {
    global gdb_prompt
    global expect_out

    set test "capture type of pointer $pointer"
    set output_string ""
    gdb_test_multiple "p ${pointer}" $test {
	-re "\\$\[0-9\]+ = .*$gdb_prompt $" {
	    # Expected output of "p ${pointer}" is like "$7 = (int (*)[32]) 0x804a0e0",
	    # and we want to extract "(int (*)[32]) 0x804a0e0" from it via
	    # following regexp.
	    if [regexp " \\(.*\\).* 0x\[0-9a-fA-F\]+" $expect_out(0,string) output_string] {
		# OUTPUT_STRING is expected to be like "(int (*)[32]) 0x804a0e0".
		pass "$test"
	    } else {
		fail "$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"]

set array_ptr_type [capture_pointer_with_type "&intarray"]
set struct_ptr_type [capture_pointer_with_type "&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"

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"
    }
}

if ![string compare $is64bitonly "no"] then {

  gdb_test "print zero_all ()" ".*"

  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 (char*)${array2_start}-(char*)${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"
}


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

gdb_exit
gdb_start
gdb_file_cmd ${binfile}

# Now fix the endianness at the correct state.

gdb_test_multiple "set endian $endian" "set endianness" {
    -re ".* (big|little) endian.*$gdb_prompt $" { 
	pass "setting $endian endianness"
    }
}

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

# 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 "\*$array_ptr_type"
  test_reload_saved_value "intstr1.srec" "reload struct as value, srec" \
	$struct_val "\*$struct_ptr_type"
  test_reload_saved_value "intarr2.srec" "reload array as memory, srec" \
	$array_val "\*$array_ptr_type"
  test_reload_saved_value "intstr2.srec" "reload struct as memory, srec" \
	$struct_val "\*$struct_ptr_type"
}

# 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 "\*$array_ptr_type"
  test_reload_saved_value "intstr1.ihex" "reload struct as value, intel hex" \
	$struct_val "\*$struct_ptr_type"
  test_reload_saved_value "intarr2.ihex" "reload array as memory, intel hex" \
	$array_val "\*$array_ptr_type"
  test_reload_saved_value "intstr2.ihex" "reload struct as memory, intel hex" \
	$struct_val "\*$struct_ptr_type"
}

# 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 "\*$array_ptr_type"
  test_reload_saved_value "intstr1.tekhex" "reload struct as value, tekhex" \
	$struct_val "\*$struct_ptr_type"
  test_reload_saved_value "intarr2.tekhex" "reload array as memory, tekhex" \
	$array_val "\*$array_ptr_type"
  test_reload_saved_value "intstr2.tekhex" "reload struct as memory, tekhex" \
	$struct_val "\*$struct_ptr_type"
}

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