Text preview for : DebugPilotCache.mesa_Sep78.pdf part of xerox DebugPilotCache.mesa Sep78 xerox mesa 4.0_1978 listing Mesa_4_Debug DebugPilotCache.mesa_Sep78.pdf
Back to : DebugPilotCache.mesa_Sep7 | Home
DebugPllotCache.mesa 2-Sep-78 15:32:14 Page 1
File: DebugPilotCache.Mesa
Last edited by
Johnsson: August 29, 1978 9:48 AM
DIRECTORY
AllocDefs: FROM "allocdefs" USING [MakeDataSegment],
AltoDefs: FROM "altodefs" USING [PageSizeJ,
DebugCacheDefs: FROM "debugcachedefs",
DebugUtilityDefs: FROM "debugutilitydefs" USING [LongREAD, LongWRITE],
DiskDefs: FROM "diskdefs" USING [
DA, DC, DH, OS, DSgoodStatus, DSmaskStatus,
UnrecoverableDiskErrorJ, .
InlineDefs: FROM "inlinedefs" USING [
BITAND, DIVMOD, LongMult],
MiscDefs: FROM "miscdefs" USING [Zero],
SegmentDefs: FROM "segmentdefs" USING [
DataSegmentAddress, DefaultBase, FileHandle,
FileSegmentAddress, FileSegmentHandle, MoveFileSegment,
NewFileSegment, Read, SwapIn, SwapUp, Unlock],
VMMapLog: FROM "vmmaplog" USING [
Descriptor, Entry, EntryBasePointer, EntryPointer,
Pilot31Label, PilotFID]:
DebugPilotCache: PROGRAM
IMPORTS AllocDefs, DebugUtilityDefs, DiskDers, MiscDefs, SegmentDefs
EXPORTS DebugCacheDefs
SHARES DiskDefs, SegmentDefs ~
BEGIN
-- Dealing with the MapLog
mfMap: DESCRIPTOR FOR ARRAY OF VMMapLog.Entry;
mfMapSeg: SegmentDefs.FileSegmentHandle;
mfMapLimit: CARDINAL;
MFEntrySize: CARDINAL = SIZE[VMMapLog.Entry];
MapSwapBase: CARDINAL 16384-256;
BadMapLogEntry: PUBLIC SIGNAL = CODE;
InitMapSeg: PUBLIC PROCEDURE [f: SegmentDefs.FileHandle] =
BEGIN OPEN SegmentDefs;
mfMapSeg ~ NewFileSegment[f,256,l,ReadJ;
END;
ReinitMap: PUBLIC PROCEDURE [root: LONG POINTER TO VMMapLog.DescriptorJ =
BEGIN OPEN SegmentOefs;
entry: VMMapLog.Entry;
ep: POINTER = @entry;
i: CARDINAL;
UNTIL mfMapSeg.lock = 0 DO Unlock[mfMapSeg] ENDLOOP;
mfMapSeg.write ~ FALSE;
MoveFileSegment[mfMapSeg, mfMapSeg.base, lJ;
mfMapLimit ~ 0;
IF root = NIL THEN RETURN;
FOR i IN [O .. MFEntrySize) DO
(ep+i)t ~ DebugUtilityDefs.LongREAD[@root.self+i] ENDLOOP;
IF entry.page (= 255 THEN entry.page ~ entry. page + MapSwapBase;
AcquireMap[];
AddMapEntry[@entry]:
ProcessMapLog[root];
ReleaseMap[];
END;
ProcessMapLog: PUBLIC PROCEDURE [root: LONG POINTER TO VMMapLog.Descriptor] =
BEGIN OPEN DebugUtilityDefs;
base: VMMapLog.EntryBasePointer;
entry: VMMapLog.Entry;
ep: POINTER