|
|
1.1 root 1: \ 7.6 Client Program Debugging command group
2:
3:
4: \ 7.6.1 Registers display
5:
6: : ctrace ( -- )
7: ;
8:
9: : .registers ( -- )
10: ;
11:
12: : .fregisters ( -- )
13: ;
14:
15: \ to ( param [old-name< >] -- )
16:
17:
18: \ 7.6.2 Program download and execute
19:
20: struct ( saved-program-state )
21: /n field >sps.entry
22: /n field >sps.file-size
23: /n field >sps.file-type
24: constant saved-program-state.size
25: create saved-program-state saved-program-state.size allot
26:
27: variable state-valid
28: 0 state-valid !
29:
30: variable file-size
31:
32: : !load-size file-size ! ;
33:
34: : load-size file-size @ ;
35:
36:
37: \ File types identified by (init-program)
38:
39: 0 constant elf-boot
40: 1 constant elf
41: 2 constant bootinfo
42: 3 constant xcoff
43: 4 constant pe
44: 5 constant aout
45: 10 constant fcode
46: 11 constant forth
47:
48:
49: : init-program ( -- )
50: \ Call down to the lower level for relocation etc.
51: s" (init-program)" $find if
52: execute
53: else
54: s" Unable to locate (init-program)!" type cr
55: then
56: ;
57:
58: : (encode-bootpath) ( param-str param-len -- bootpath-str bootpath-len)
59: \ Parse the <param> string from a load/boot command and set both
60: \ the bootargs and bootpath properties as appropriate.
61:
62: \ bootpath
63: bl left-split \ argstr argstr-len bootdevstr bootdevstr-len
64: dup 0= if
65:
66: \ None specified. As per IEEE-1275 specification, search through each value
67: \ in boot-device and use the first that returns a valid ihandle on open.
68:
69: 2drop \ drop the empty device string as we're going to use our own
70:
71: s" boot-device" $find drop execute
72: bl left-split
73: begin
74: dup
75: while
76: 2dup s" Trying " type type s" ..." type cr
77: 2dup open-dev ?dup if
78: close-dev
79: 2swap drop 0 \ Fake end of string so we exit loop
80: else
81: 2drop
82: bl left-split
83: then
84: repeat
85: 2drop
86: then
87:
88: \ Set the bootpath property
89: 2dup encode-string
90: " /chosen" (find-dev) if
91: " bootpath" rot (property)
92: then
93:
94: \ bootargs
95: 2swap dup 0= if
96: \ None specified, use default from nvram
97: 2drop s" boot-file" $find drop execute
98: then
99:
100: \ Set the bootargs property
101: encode-string
102: " /chosen" (find-dev) if
103: " bootargs" rot (property)
104: then
105: ;
106:
107: : $load ( devstr len )
108: open-dev ( ihandle )
109: dup 0= if
110: drop
111: exit
112: then
113: dup >r
114: " load-base" evaluate swap ( load-base ihandle )
115: dup ihandle>phandle " load" rot find-method ( xt 0|1 )
116: if swap call-package !load-size else cr ." Cannot find load for this package" 2drop then
117: r> close-dev
118: init-program
119: ;
120:
121: : load ( "{params}<cr>" -- )
122: linefeed parse
123: (encode-bootpath)
124: $load
125: ;
126:
127: : dir ( "{paths}<cr>" -- )
128: linefeed parse
129: split-path-device
130: open-dev dup 0= if
131: drop
132: exit
133: then
134: -rot 2 pick
135: " dir" rot ['] $call-method catch
136: if
137: 3drop
138: cr ." Cannot find dir for this package"
139: then
140: close-dev
141: ;
142:
143: : go ( -- )
144: state-valid @ not if
145: s" No valid state has been set by load or init-program" type cr
146: exit
147: then
148:
149: \ Call the architecture-specific code to launch the client image
150: s" (go)" $find if
151: execute
152: else
153: ." go is not yet implemented"
154: 2drop
155: then
156: ;
157:
158:
159: \ 7.6.3 Abort and resume
160:
161: \ already defined !?
162: \ : go ( -- )
163: \ ;
164:
165:
166: \ 7.6.4 Disassembler
167:
168: : dis ( addr -- )
169: ;
170:
171: : +dis ( -- )
172: ;
173:
174: \ 7.6.5 Breakpoints
175: : .bp ( -- )
176: ;
177:
178: : +bp ( addr -- )
179: ;
180:
181: : -bp ( addr -- )
182: ;
183:
184: : --bp ( -- )
185: ;
186:
187: : bpoff ( -- )
188: ;
189:
190: : step ( -- )
191: ;
192:
193: : steps ( n -- )
194: ;
195:
196: : hop ( -- )
197: ;
198:
199: : hops ( n -- )
200: ;
201:
202: \ already defined
203: \ : go ( -- )
204: \ ;
205:
206: : gos ( n -- )
207: ;
208:
209: : till ( addr -- )
210: ;
211:
212: : return ( -- )
213: ;
214:
215: : .breakpoint ( -- )
216: ;
217:
218: : .step ( -- )
219: ;
220:
221: : .instruction ( -- )
222: ;
223:
224:
225: \ 7.6.6 Symbolic debugging
226: : .adr ( addr -- )
227: ;
228:
229: : sym ( "name< >" -- n )
230: ;
231:
232: : sym>value ( addr len -- addr len false | n true )
233: ;
234:
235: : value>sym ( n1 -- n1 false | n2 addr len true )
236: ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.