1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
|
Network Debugging Protocol Eric Mader
RFC: 643 July 1974
NIC #30873
This document describes a proposed protocol to be used in an
implementation of a PDP-11 network Bootstrap service and a
cross-network debugger. The protocol is designed for debugging
processes running under an operating system which can perform some of
the "lower level" debugging tasks, such as planting and removing
breakpoints and single stepping. A subset of the protocol could be
used if such a capability does not exist (a stand-alone program for
example).
The protocol is a level 2 protocol, which bypasses the ARPANET
HOST-HOST protocol. (This is implemented on TENEX using special
privileged system calls which allow messages to be sent directly to
and received directly from the IMP). Messages are sent between the
PDP-11 and the remote debugger on one link (currently 377 octal).
Each message from the remote debugger to the PDP-ll is a request that
the PDP-11 perform some action, and each message from the PDP-11 to
the remote debugger is either a reply to that request or an indication
that a process has stopped running (i.e. has trapped, hit a
breakpoint, etc). The exact format of the messages is shown in Figure
1 below.
Each command consists of an 8-bit op-code, and an 8-bit
process-id, two 16-bit arguments, and an optional string of 8-bit
bytes. The op-code field from the PDP-11 should be the same as that
sent by the remote host to indicate successful completion of the
request or be the same as that set by the remote host with the 200 bit
set to indicate failure to complete the request. Op-codes from the
PDP-11 which have the 100 bit set are asynchronous indication that a
process has stopped for a reason other than a request from the remote
host. (See description of asynchronous replies below). An op-code
from the PDP-11 with both the 100 and 200 bit set is meaningless.
Thus, the 8-bit op-code field sent by the PDP-11 can be thought of as
a CAN'T Flag, an Asynchronous STOP Flag, and a 6-bit op-code.
In the description that follows the commands will be given as
NAME (Process-ID, Argument 1, Argument 2, BYTE STRING)
with only as many of the fields present as are used.
Op-Code 0 - NOP_______ _ _ ___
This command is intended to be used to determine if the PDP-11 is
operational. It has no effect on any process running in the PDP-11.
The response is NOP.
Op-Code 1 - DEBUG (Process)_______ _ _ _____ _________
This command requests the ability to debug the given process.
The PDP-11 should respond with
^L
Page 2
DEBUGGING (process)
(op-code 1) if no other remote host is currently doing so, and
CAN'T DEBUG (process)
(op-code 201) if another remote host has been given permission to
debug the process, or the process doesn't exist.
Op-Code 2 - END DEBUG (Process)_______ _ _ ___ _____ _________
This command relinquishes the ability to debug a process. The
PDP-11 should reply
END DEBUG (Process)
(op-code 2) unless the remote host isn't debugging the process, in
which case it should respond
CAN'T END DEBUG (Process)
(op-code 202). If the process isn't running when the END DEBUG is
done, then the effect should be the same as
RESUME (PROCESS)
END DEBUG (PROCESS)
Op-Code 3 - STOP (Process)_______ _ _ ____ _________
This command requests the PDP-11 to stop the given process from
running. The PDP-11 should respond
STOPPED (process)
(op-code 3) unless the process isn't being debugged by the remote
host. In this case it should reply
CAN'T STOP (process)
(op-code 203).
Op-Code 4 - DEPOSIT (Process, Address, Count, Byte String)_______ _ _ _______ _________ ________ ______ ____ _______
This instructs the PDP-11 to deposit the Count bytes in Byte
String into the given process's address space beginning at Address.
The PDP-11 should reply
DEPOSITED (Process, Address, Count)
if successful or
CAN'T DEPOSIT (Process, Address, Count)
^L
Page 3
if the deposit doesn't succeed, or the remote host isn't debugging the
process.
Op-Code 5 - RESUME (Process)_______ _ _ ______ _________
This instructs the PDP-11 to allow the given process to resume
running. The PDP-11 should reply
RESUMED (Process)
before it starts the process (in case it traps right away), or
CAN'T RESUME (Process)
if the process wasn't stopped, or the remote host isn't debugging the
process.
Op-Code 6 - EXAMINE (Process, Address, Count)_______ _ _ _______ _________ ________ ______
This instructs the PDP-11 to return Count bytes from the given
process address space starting at Address. The PDP-11 should reply
CONTENTS (Process, Address, Count, Byte String)
if it can supply the bytes, or
CAN'T EXAMINE (Process, Address, Count)
if all the bytes don't exist in the address space, or the remote host
isn't debugging the process.
Op-Code 7 - DEPOSIT STATE VECTOR (Process, Index, Byte Count,_______ _ _ _______ _____ ______ _________ ______ ____ ______
Byte String) ____ _______
This instructs the PDP-11 to deposit the Byte Count bytes in Byte
String into the state vector for the given process starting with byte
Index. See Figure 2 for the format of the state vector. The PDP-11
should reply
DEPOSITED STATE VECTOR (Process, Index, Byte Count)
unless the bytes won't all fit in the state vector or the remote host
isn't debugging the process. In this case the reply should be
CAN'T DEPOSIT STATE VECTOR (Process, Index, Byte Count)
Op-Code 10 - BREAK (Process, Address, Proceed Count)_______ __ _ _____ _________ ________ _______ ______
This instructs the PDP-11 to place a breakpoint at Address in the
given process's address space, with a proceed count of Proceed Count.
The proceed count can be changed by issuing another BREAK with a
different count. The PDP-11 should reply
^L
Page 4
BROKE (Process, Address, Proceed Count)
if it was able to plant the breakpoint and
CAN'T BREAK (Proceed, Address, Proceed Count)
if it was unable to plant the breakpoint because the breakpoint tables
for the process are full, or because the remote host isn't debugging
the process. Note that the PDP-11 must keep track of where the
breakpoints are, the old contents of these locations etc.
Op-Code 11 - UNBREAK (Process, Address)_______ __ _ _______ _________ ________
This instructs the PDP-11 to remove the breakpoint from Address
in the process's address space and release all storage associated with
it. The PDP-11 should reply
UNBROKE (Process, Address)
when the breakpoint is removed, or
CAN'T UNBREAK (Process, Address)
if the process doens't have a breakpoint at Address or the remote host
isn't debugging the process.
Op-Code 12 - SINGLE STEP (Process)_______ __ _ ______ ____ _________
This instructs the PDP-11 to let the given process execute one
instruction, using the Trace Trap feature. The PDP-11 should reply
SINGLE STEPPING (Process)
before the process is started, or
CAN'T SINGLE STEP (Process)
if the process is already running or the remote host isn't debugging
the process.
Op-Code 13 - PROCEED BPT (Process)_______ __ _ _______ ___ _________
This instructs the PDP-11 to allow the process to proceed from a
break point trap (BPT, see below). The PDP-11 should reply
PROCEEDING BPT (Process)
before allowing the process to proceed, or
CAN'T PROCEED BPT (Process)
if the process isn't stopped at a breakpoint or the remote host isn't
debugging the process.
^L
Page 5
Op-Code 14 - CREATE PROCESS_______ __ _ ______ _______
This instructs the PDP-11 to create a process (with its own
virtual address space if the system will support such a feature). The
PDP-11 should reply
CREATED PROCESS (Process)
if it could create a process, with the process-id in process. If the
process creation failed or the system cannot create processes, the
PDP-11 should reply
CAN'T CREATE PROCESS.
Once a remote host has created a process it is debugging it, that is a
DEBUG (process)
need not be done.
Op-Code 15 - DESTROY PROCESS (Process)_______ __ _ _______ _______ _________
This instructs the PDP-11 to destroy the given process. After
the process is destroyed the remote host cannot, of course, debug it
so there is no need to do an
END DEBUG (Process).
The PDP-11 should reply
DESTROYED PROCESS (Process)
if the process has been destroyed. If the system doesn't support a
multi-process structure or the remote host isn't debugging the process
the PDP-11 should reply
CAN'T DESTROY PROCESS (Process).
Asynchronous Stop Replies ____________ ____ _______
These replies (op-code between 100 and 177 octal) are sent by the
PDP-11 wherever a process being debugged stops running for any reason
other than in response to the
STOP (Process)
command. Each of these replies includes the entire state vector for
the process.
^L
Page 6
Op-Code 100 - TRAP (Process, Reason, 0, STATE VECTOR)_______ ___ _ ____ _________ _______ __ _____ _______
This informs the remote host that a process has "trapped", or
terminated abnormally. The reason is a system error code, or could be
a trap vector address in the stand-alone case.
Op-Code 101 - HALT (Process, 0,0, STATE VECTOR)_______ ___ _ ____ _________ ____ _____ _______
This informs the remote host that the given process has
terminated normally.
Op-Code 102 - BPT (Process, 0, 0, STATE VECTOR)_______ ___ _ ___ _________ __ __ _____ _______
This informs the remote host that the given process has hit a
breakpoint trap.
Op-Code 103 - TTRAP (Process, 0, 0, STATE VECTOR)_______ ___ _ _____ _________ __ __ _____ _______
This informs the remote host that the given process has hit a
trace trap, i.e. has just executed one instruction in response to the
SINGLE STEP (Process)
command.
^L
Page 7
Figure 1
FORMAT OF NETWORK DEBUGGER MESSAGES
----------------
| TYPE | HOST |
----------------
| LINK | STYPE |
----------------
| CMD | PID |
----------------
| ARG1 |
----------------
| ARG2 |
----------------
TYPE -- The HOST-IMP/IMP-HOST message type, should
always be zero.
HOST -- The source host ID.
LINK -- The debugger link.
STYPE -- The message subtype, always zero.
CMD -- The debugger command op-code, excess 100 for
asynchronous reply's, excess 200 for "can't"
reply's.
PID -- Process ID of process being debugged.
ARG1 -- The first argument of the command.
ARG2 -- The second argument of the command.
^L
Page 8
Figure 2
FORMAT OF STATE VECTORS
------------
| R0 |
------------
| R1 |
------------
| R2 |
------------
| ... |
------------
| PC |
------------
| PS |
------------
|