1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-11 23:53:12 +00:00

Documentation for PCLSRing.

This commit is contained in:
Lars Brinkhoff 2018-09-27 14:57:29 +02:00
parent 96eca1801b
commit 71bb168b64
3 changed files with 1426 additions and 1 deletions

View File

@ -30,7 +30,7 @@ DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \
chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \
xfont maxout ucode moon acount alan channa fonts games graphs humor \
kldcp libdoc lisp _mail_ midas quux scheme manual wp chess ms macdoc \
aplogo _klfe_ pdp11 chsncp cbf rug
aplogo _klfe_ pdp11 chsncp cbf rug bawden
BIN = sys2 emacs _teco_ lisp liblsp alan inquir sail comlap c decsys \
moon graphs draw datdrw fonts fonts1 fonts2 games macsym maint imlac \
_www_ hqm

1337
doc/bawden/pclsr.201 Executable file

File diff suppressed because it is too large Load Diff

88
doc/sysdoc/pclsr.test Executable file
View File

@ -0,0 +1,88 @@
06/07/87 21:26:03,4751;000000000000
Date: Sun, 7 Jun 87 21:13:07 EDT
From: Alan Bawden <ALAN at AI.AI.MIT.EDU>
To: DLW at SCRC-STONY-BROOK.ARPA
cc: ALAN at AI.AI.MIT.EDU, MOON at AI.AI.MIT.EDU, TK at AI.AI.MIT.EDU
Re: PCLSR test mode
Date: Sat, 6 Jun 87 17:33 EDT
From: Daniel L. Weinreb <DLW at Symbolics.COM>
Hi. Have you ever used ITS's PCLSR test mode?
Nope. I've never written anything that warranted it.
I'm thinking about trying to implement something analogous, to help
people debug "transactions", which can abort and restart and so are
essentially subject to something much like PCLSRing. How does the test
mode work, and is it useful? Thanks.
Its kind of a kludge actually.
I guess you remember that if you want a particular piece of code to be
tested, you insert calls to this macro (PCLT) at points where you want to
be PCLSRed from (typically right before you might go blocked). Then PCLSR
test mode lets you run the system call until it reaches one of the test
points you have marked.
There are three modes that control what happens each time the job being
tested reaches one of the test points:
1. In "hold" mode, ITS PCLSR's the job and stops it as if the hacker had
just typed a ^Z. If the hacker P's the job, it will run to the exactly
the same test point and then PCLSR and halt again. Thus the hacker can
test the same point over and over again.
2. In "advance" mode, each time the hacker P's the job it runs to the
same test point as last time, and then sets a flag that causes the job to
PCLSR and halt at the -next- test point, where and whenever that happens to
occur. Thus the hacker can test all of the test points in succession in a
particular path through a system call.
3. "Advance but don't halt" mode is just like advance mode except that the
job is not halted each time it is PCLSRed, it just keeps running and thus
immediately starts the system call over. This lets the hacker exercise a
system call over and over, presumably waiting for a bug-check to trip.
The kludge is how ITS decides you have reached "the same test point". You
can't just test the PC where the PCLT macro occured, because that might be
in a subroutine that was called from several places. So ITS crawls down
the stack looking for likely return addresses to try and figure out the
call-chain that got to the current routine. (Its heuristic is that any
word whose right half address a word in system code that immediately
follows any PUSHJ P, is a return address.) These return addresses are all
hashed together, and the pair consisting of this hash and the PCLT's PC are
used to distinguish one test point from another.
(Actually you could hash the PCLT's PC in with the others, but keeping it
separate means that you can -first- compare the current PCLT's PC with the
one you are looking for, and if it doesn't match you don't have to bother
with the slow hash computation.)
Additionally, it is possible that a PCLT might occur in the middle of a
loop so that neither its location, nor the call-chain, can be used to
distinguish what the hacker might want to treat as separate test points.
To cover this case there is a location (PCLIDX) whose contants are always
hashed in with the return addresses. By storing the loop-counter, or
something else that varies each time around the loop, in PCLIDX, the hacker
can cause these test points to be distinguished. (This mechanism doesn't
extend to nested loops, but it's only used in a single place.)
Of course there are lots of ways you can imagine this hash test becoming
confused (by extra gubbish on the stack that only -looks- like a return
address and that happens to vary from call to call, or by routines that use
other calling conventions, etc.), but I imagine that in practice the hacker
doesn't get shafted all that often.
Here is another hazard that can bite the hacker using this feature: In
advance mode, after ITS has found the previous test point and has set the
flag that causes the next test point to trap, but before it actually gets
there, it may happen that the job is PCLSR'd for some ordinary reason (like
the job being swapped out). Then the next time the job does any system
call the -first- test point in that system call will trap. This is
probably sufficiently unlikely that its not worth fixing; if it ever
happened to anyone, he would just grumble and start over.
Is it usefull? I don't really know. It has never been used in my memory,
but ITS hasn't changed all that much during that time. I seem to recall
Moon once remarking that he had never seen it used either, but I believe
that TK once told me that it had flushed its share of bugs.