1# Copyright 1999, 2001, 2004, 2007, 2008, 2009, 2010, 2011 2# Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17if $tracelevel then { 18 strace $tracelevel 19} 20 21 22 23# test only on a remote target board 24if {! [is_remote target]} { 25 return 26} 27 28set testfile "remote" 29set srcfile ${testfile}.c 30set binfile ${objdir}/${subdir}/${testfile} 31 32gdb_start 33 34set result [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] 35if {$result != "" } then { 36 untested remote.exp 37 return -1 38} 39 40 41# 42# Part ONE: Check the down load commands 43# 44 45gdb_test "show remote memory-write-packet-size" \ 46 "The memory-write-packet-size is 0. Packets are limited to \[0-9\]+ bytes." \ 47 "write-packet default" 48 49gdb_test "set remote memory-write-packet-size" \ 50 "Argument required .integer, `fixed' or `limited'.\." \ 51 "set write-packet - NULL" 52 53gdb_test_no_output "set remote memory-write-packet-size 20" 54gdb_test "show remote memory-write-packet-size" \ 55 "The memory-write-packet-size is 20. Packets are limited to 20 bytes." \ 56 "set write-packet - small" 57 58gdb_test_no_output "set remote memory-write-packet-size 1" 59gdb_test "show remote memory-write-packet-size" \ 60 "The memory-write-packet-size is 1. Packets are limited to 20 bytes." \ 61 "set write-packet - very-small" 62 63# 64# Part TWO: Check the download behavour 65# 66 67proc gdb_load_timed {executable class writesize} { 68 global test gdb_prompt 69 set test "timed download `[file tail $executable]' - $class, $writesize" 70 71 if {$writesize != ""} then { 72 gdb_test_no_output "set remote memory-write-packet-size $writesize" \ 73 "$test - set packet size" 74 75 send_gdb "set remote memory-write-packet-size $class\n" 76 gdb_expect 5 { 77 -re ".*Change the packet size.*$" { 78 send_gdb "y\n" 79 gdb_expect 5 { 80 -re ".*$gdb_prompt $" { 81 pass "$test - set write size class" 82 } 83 timeout { 84 fail "$test - set write size class" 85 return 86 } 87 } 88 } 89 -re ".*$gdb_prompt $" { } 90 timeout { 91 fail "$test - set write size class" 92 return 93 } 94 } 95 } 96 97 # Do not try to load using fixed sizes; we may overflow the remote target. 98 if { $class == "fixed" } { 99 return 100 } 101 102 set load_begin_time [clock clicks] 103 set result [gdb_load $executable] 104 set load_end_time [clock clicks] 105 if { $result != 0 } then { 106 fail "$test - loading executable" 107 return 108 } 109 verbose "$test - time [expr ($load_end_time - $load_begin_time) / 1000] ms" 110 pass $test 111} 112 113# Typically about 400-1 bytes can be downloaded 114gdb_load_timed $binfile "limit" 398 115gdb_load_timed $binfile "limit" 400 116 117# Absolute max is 16384 118gdb_load_timed $binfile "fixed" 0 119gdb_load_timed $binfile "fixed" 16385 120 121# fall back to the default 122gdb_load_timed $binfile "limit" 0 123 124# Get size of data uploaded 125 126# 127# Query GDB for the size of various types 128# 129 130# Get the size of random_data table (defaults to 48K). 131set sizeof_random_data [get_sizeof "random_data" 48*1024] 132 133# 134# Part THREE: Check the upload behavour 135# 136if ![runto_main] then { 137 fail "Cannot run to main" 138} 139 140# Carefully check memory around each of the most common packet edge 141# conditions 142 143gdb_test "x/8ub random_data" \ 144 "<random_data>:\[ \t\]+60\[ \t\]+74\[ \t\]+216\[ \t\]+38\[ \t\]+149\[ \t\]+49\[ \t\]+207\[ \t\]+44" 145 146gdb_test "x/8ub random_data + 400 - 4" \ 147 "<random_data\\+396>:\[ \t\]+185\[ \t\]+255\[ \t\]+50\[ \t\]+140\[ \t\]+237\[ \t\]+172\[ \t\]+143\[ \t\]+93" 148 149if {$sizeof_random_data > 16380 } then { 150 gdb_test "x/8ub random_data + 16384 - 4" \ 151 "<random_data\\+16380>:\[ \t\]+178\[ \t\]+180\[ \t\]+135\[ \t\]+93\[ \t\]+70\[ \t\]+62\[ \t\]+205\[ \t\]+76" 152} 153 154# Read a chunk just larger than the packet size (reduce the packet 155# size to make life easier) 156gdb_test_no_output "set remote memory-read-packet-size 16" 157 158gdb_test "show remote memory-read-packet-size" \ 159 "The memory-read-packet-size is 16. Packets are limited to 20 bytes." 160gdb_test "x/17ub random_data" \ 161 "<random_data>:\[ \t\]+60\[ \t\]+74\[ \t\]+216\[ \t\]+38\[ \t\]+149\[ \t\]+49\[ \t\]+207\[ \t\]+44.*<random_data\\+8>:\[ \t\]+124\[ \t\]+38\[ \t\]+93\[ \t\]+125\[ \t\]+232\[ \t\]+67\[ \t\]+228\[ \t\]+56.*<random_data\\+16>:\[ \t\]+161" 162 163gdb_exit 164