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