-- CPSwapDefs.mesa (last edited by Knutsen on December 16, 1980 3:28 PM)
-- Data structures for CoPilot <=> Pilot communication.
DIRECTORY
PrincOps USING [GlobalFrameHandle, StateVector, SVPointer, BytePC],
PSB USING [PsbIndex, PsbNull];
CPSwapDefs: DEFINITIONS =
BEGIN
SVPointer: TYPE = PrincOps.SVPointer;
ProcessState: TYPE = RECORD [
-- This is the actual usage for the PSB.PsbFlags.available field.
state:
{ frameReady, -- child process ready to be Joined (or Detached).
frameTaken, -- parent process has recorded child's frameHandle.
dead, -- child process has finished all cleanup, and is dead.
alive}, -- normal state of running process.
detached: BOOLEAN ];
SwapInfo: TYPE = RECORD [
-- (this is the actual usage of PSB.PDA.available.)
availableA: UNSPECIFIED,
externalStateVector: LONG POINTER TO ExternalStateVector,
availableB: ARRAY [0..2) OF UNSPECIFIED ];
ExternalStateVector: TYPE = MACHINE DEPENDENT RECORD [
state: SVPointer, -- client's higher level state. (a short pointer
-- in the (only) MDS.
reason: SwapReason,
level: [0..3777B],
parameter: POINTER TO DebugParameter,
versionident: CARDINAL,
loadstatepage: CARDINAL,
lspages: CARDINAL,
mapLog: LONG POINTER --TO VMMapLog.Descriptor--,
mds: CARDINAL, -- MDS of *all* processes.
filler: [0..100B) ← 0,
psb: PSB.PsbIndex ← PSB.PsbNull, -- PSB of current process.
fill: ARRAY [10..19) OF WORD];
VersionID: CARDINAL = 08130;
SwapReason: TYPE = {
-- handled by user's nub
proceed, -- THIS MUST BE FIRST !!
start,
call,
resume,
quit,
showscreen,
kill,
-- handled by debugger
install,
breakpoint,
worrybreak,
worrycall,
uncaughtsignal,
explicitcall,
return,
punt,
interrupt,
cleanmaplog,
addressfault,
writeprotect,
cascade,
bug,
spare1,
spare2,
spare3
};
DebugParameter: TYPE = MACHINE DEPENDENT RECORD [
string: STRING,
body: SELECT OVERLAID SwapReason FROM
uncaughtsignal => [
msg: UNSPECIFIED,
signal: UNSPECIFIED],
return => [
value: UNSPECIFIED],
start => [
frame: PrincOps.GlobalFrameHandle],
bug, call => [
sv: PrincOps.StateVector],
addressfault, writeprotect => [
page, psbIndex: CARDINAL],
ENDCASE];
AddressfaultDP: TYPE = POINTER TO addressfault DebugParameter;
BugDP: TYPE = POINTER TO bug DebugParameter;
CallDP: TYPE = POINTER TO call DebugParameter;
ReturnDP: TYPE = POINTER TO return DebugParameter;
StartDP: TYPE = POINTER TO start DebugParameter;
UncaughtSignalDP: TYPE = POINTER TO uncaughtsignal DebugParameter;
WriteprotectDP: TYPE = POINTER TO writeprotect DebugParameter;
-- Conditional Breakpoint Stuff
BBArray: TYPE = RECORD [
length: CARDINAL,
blocks: ARRAY [0..0) OF UserBreakBlock];
BBHandle: TYPE = POINTER TO BBArray;
UserBreakBlock: TYPE = RECORD [
frame: PrincOps.GlobalFrameHandle,
pc: PrincOps.BytePC,
ptrL: POINTER,
ptrR: POINTER,
posnL: [0..16),
posnR: [0..16),
sizeL: [1..16],
sizeR: [1..16],
inst: [0..377B],
relation: Relations,
immediateR: BOOLEAN,
counterL: BOOLEAN,
localL: BOOLEAN,
localR: BOOLEAN,
stackRelative: BOOLEAN];
UBBPointer: TYPE = POINTER TO UserBreakBlock;
Relations: TYPE = {eq, ne, lt, ge, gt, le};
END.