DIRECTORY DiskFace USING [Label, PageNumber, Type], PrincOps USING [GlobalFrameHandle, PsbIndex, PsbNull, StateVector, SVPointer], Basics USING [BITXOR, HighHalf, LowHalf]; DebuggerFormat: CEDAR DEFINITIONS IMPORTS Basics = BEGIN SVPointer: TYPE = PrincOps.SVPointer; SwapInfo: TYPE = RECORD [ availableA: UNSPECIFIED, externalStateVector: LONG POINTER TO ExternalStateVector, availableB: ARRAY [0..2) OF UNSPECIFIED ]; ExternalStateVector: TYPE = MACHINE DEPENDENT RECORD [ state(0): SVPointer, -- client's higher level state. (a short pointer reason(1:0..4): SwapReason, level(1:5..15): [0..3777B], parameter(2): POINTER TO DebugParameter, versionident(3): CARDINAL, loadstatepage(4): CARDINAL, -- "Basic" loadState spare(5): CARDINAL, vmRunTable(6): LONG POINTER TO VMRunTable, mds(8): CARDINAL, -- MDS of *all* processes. psb(9): PrincOps.PsbIndex _ PrincOps.PsbNull, -- PSB of current process. loadState(10): LONG POINTER TO LoadState _ NIL, -- to "real" loadState data structure if it exists display(12): LONG POINTER _ NIL, -- display bitmap displayW(14), displayH(15): CARDINAL, systemVolumeKnown(16): BOOL, systemVolume(17): VolumeID]; VersionID: CARDINAL = 08130+1; -- Rubicon Pilot + 1 SwapReason: TYPE = MACHINE DEPENDENT{ proceed(0), -- THIS MUST BE FIRST !! start(1), call(2), resume(3), quit(4), showscreen(5), kill(6), breakpoint(8), worrybreak(9), worrycall(10), uncaughtsignal(11), explicitcall(12), return(13), returnAborted(24), (31) }; DebugParameter: TYPE = MACHINE DEPENDENT RECORD [ spare: POINTER, body: SELECT OVERLAID SwapReason FROM uncaughtsignal => [ msg: UNSPECIFIED, signal: UNSPECIFIED], return => [ value: UNSPECIFIED], start => [ frame: PrincOps.GlobalFrameHandle], call => [ sv: PrincOps.StateVector], ENDCASE]; VMRunTable: TYPE = MACHINE DEPENDENT RECORD[ nRuns: CARDINAL, runs: SEQUENCE length: CARDINAL OF Run]; Run: TYPE = MACHINE DEPENDENT RECORD [ page: INT -- VM.PageNumber--, count: CARDINAL, -- number of pages in this contiguous run -- deviceType: DiskFace.Type, deviceOrdinal: CARDINAL, diskPage: DiskFace.PageNumber, -- physical page number relative to [type,ordinal] labelCheck: CARDINAL -- compact approximation to the label of first page of run ]; LabelChecksum: SAFE PROC[label: DiskFace.Label, offset: CARDINAL] RETURNS[ CARDINAL ] = TRUSTED INLINE BEGIN OPEN fID: LOOPHOLE[label.fileID, MACHINE DEPENDENT RECORD[a,b,c,d,e: CARDINAL]]; adj: INT = label.filePage - offset; RETURN[ Basics.BITXOR[ fID.a, Basics.BITXOR[ fID.b, Basics.BITXOR[ fID.c, Basics.BITXOR[ fID.d, Basics.BITXOR[ fID.e, Basics.BITXOR[ Basics.LowHalf[adj], Basics.HighHalf[adj] ]]]]]] ] END; LoadState: TYPE; VolumeID: TYPE[5]; END. 0Cedar Nucleus: data structures for communication between debugger and debuggee DebuggerFormat.mesa Andrew Birrell December 2, 1983 10:50 am (this is the actual usage of PrincOps.PDA.available.) in the (only) MDS. handled by user's nub handled by debugger Description of the first page of the run: Ê ˜JšœN™NJšœ™Jšœ)™)J˜šÏk ˜ Jšœ œ˜)Jšœ œ@˜NJšœœœ˜)—J˜šœœ ˜!Jšœ ˜—J˜Jš˜J˜Jšœ œ˜%J˜šœ œœ˜Jšœ5™5Jšœ œ˜Jšœœœœ˜9Jšœ œœ œ˜*—J˜š œœœ œœ˜6šœÏc1˜HJšœ™—J˜J˜Jšœœœ˜(Jšœœ˜Jšœœž˜0Jšœ œ˜Jšœœœœ ˜*Jšœœž˜-Jšœ/ž˜IJš œœœœ œž2˜bJšœ œœœž˜2Jšœœ˜%Jšœœ˜Jšœ˜—J˜Jšœ œ ž˜3J˜šœ œœ œ˜%Jšœ™Jšœ ž˜$J˜ J˜J˜ J˜J˜J˜J˜Jšœ™J˜J˜J˜J˜J˜J˜ J˜J˜J˜—J˜š œœœ œœ˜1Jšœœ˜šœœœ ˜%˜Jšœ œ˜Jšœ œ˜—˜ Jšœ œ˜—˜ J˜#—˜ Jšœ˜—Jšœ˜ ——J˜š œ œœ œœ˜,Jšœœ˜Jšœœ œœ˜(—J˜š œœœ œœ˜&Jšœœžœ˜Jšœœž,˜=Jšœ)™)Jšœ˜Jšœœ˜Jšœž2˜QJšœ œž:˜OJšœ˜—J˜šÏn œœœ œœœœ˜fJš˜Jš œœœ œœ œ˜PJšœœ˜#šœ œ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ˜Jšœ)˜)J˜—Jšœ˜—J˜Jšœ œ˜Jšœ œ˜J˜šœ˜J˜J˜——…— vÆ