diff options
author | Yao Qi <yao@codesourcery.com> | 2011-07-01 16:42:42 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2011-07-01 16:42:42 +0000 |
commit | 54aeeb996d6cf0730779c640ce0afced77e632b4 (patch) | |
tree | eadf2bafa9e49947c7b6fa986fb44a1552cafa16 /gdb | |
parent | 5d73b1f18fc65bc905549c25db448bbcc6914c1c (diff) | |
download | gdb-54aeeb996d6cf0730779c640ce0afced77e632b4.zip gdb-54aeeb996d6cf0730779c640ce0afced77e632b4.tar.gz gdb-54aeeb996d6cf0730779c640ce0afced77e632b4.tar.bz2 |
2011-07-02 Yao Qi <yao@codesourcery.com>
* gdb.base/dump.exp (capture_pointer_with_type): New.
Get value from address instead of name.
Start GDB once, and do `dump' and `restore'
tests together.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dump.exp | 217 |
2 files changed, 119 insertions, 105 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 8957c5e..1bf0ba0 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-07-02 Yao Qi <yao@codesourcery.com> + + * gdb.base/dump.exp (capture_pointer_with_type): New. + Get value from address instead of name. + Start GDB once, and do `dump' and `restore' + tests together. + 2011-06-30 Jie Zhang <jie.zhang@analog.com> Mike Frysinger <vapier@gentoo.org> diff --git a/gdb/testsuite/gdb.base/dump.exp b/gdb/testsuite/gdb.base/dump.exp index e74a12f..1744133 100644 --- a/gdb/testsuite/gdb.base/dump.exp +++ b/gdb/testsuite/gdb.base/dump.exp @@ -153,6 +153,34 @@ proc capture_value { expression args } { 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"] @@ -161,6 +189,9 @@ 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" @@ -196,49 +227,6 @@ 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} - -# 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" - } -} - proc test_restore_saved_value { restore_args msg oldval newval } { global gdb_prompt @@ -253,71 +241,10 @@ proc test_restore_saved_value { restore_args msg oldval newval } { } } -# 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 { - untested dump.exp - return -1 -} - -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" -} + gdb_test "print zero_all ()" ".*" -if ![string compare $is64bitonly "no"] then { test_restore_saved_value "intarr1.srec" "array as value, srec" \ $array_val "intarray" @@ -500,6 +427,86 @@ if ![string compare $is64bitonly "no"] then { 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" |