DIRECTORY DiskFace USING[ Label, Type ], BasicLoadStateFormat USING[ LoadStateObject ], BootFileChanges USING [PageValue], LoadState USING[ Handle ], PrincOps USING [op, PageNumber, wordsPerPage], Rope USING[ ROPE ], WorldVM USING [Address, Incarnation, World]; WVMPrivate: DEFINITIONS = BEGIN pageSize: CARDINAL = PrincOps.wordsPerPage; PageNumber: TYPE = PrincOps.PageNumber; PageAddress: PROC[mempage: PageNumber] RETURNS[ WorldVM.Address ] = INLINE { RETURN[ mempage * LONG[pageSize] ] }; DiskAddress: TYPE = RECORD[ deviceType: DiskFace.Type, deviceOrdinal: CARDINAL, diskPage: LONG CARDINAL, -- device-relative page number of start of run offset: CARDINAL, -- page number from start of run, for label checksum calculation labelCheck: CARDINAL -- label checksum of start of run (Pilot relic: should use entire label) ]; onlyMDS: WorldVM.Address = --TEMP kludge-- 400000B; WorldType: TYPE = { none, local, other, remote }; World: TYPE = REF WorldObject; WorldObject: PUBLIC TYPE = RECORD[ name: Rope.ROPE, incarnation: WorldVM.Incarnation _ FIRST[WorldVM.Incarnation], lock: NAT _ 0, state: { creating, created, bad } _ creating, running: BOOLEAN _ TRUE, vmBackingMap: WVMPrivate.VMBackingMap _ NIL, basicLoadState: REF BasicLoadStateFormat.LoadStateObject _ NIL, loadState: LoadState.Handle _ NIL, loadStateValid: BOOL _ FALSE, mdsBase: WorldVM.Address _ onlyMDS, foo: SELECT type: WorldType FROM none => NULL, local => NULL, other => NULL, remote => [host: WVMPrivate.Machine] ENDCASE]; VMBackingMap: TYPE = REF VMBackingMapObject; VMBackingMapObject: TYPE; CreateVMBackingMap: PROC[world: WorldVM.World] RETURNS[ VMBackingMap ]; ReadVMBackingMap: PROC[world: WorldVM.World, log: VMBackingMap] RETURNS[basic, real: WorldVM.Address -- loadtstae addresses --]; GetVMBackingMapEntry: PROC[log: VMBackingMap, mempage: PageNumber] RETURNS[ DiskAddress ]; PageHandle: TYPE = REF PageInfo; PageInfo: TYPE; PageData: TYPE = ARRAY [0..pageSize) OF CARDINAL; GetPage: PROC[world: WorldVM.World, mempage: PageNumber] RETURNS[ data: REF PageData, handle: PageHandle ]; ReleasePage: PROC[handle: PageHandle]; WriteAndReleasePage: PROC[handle: PageHandle]; MapEntry: TYPE = BootFileChanges.PageValue; Machine: TYPE[3]; LocateRemote: PROC[Rope.ROPE] RETURNS[ Machine ]; GoRemote: PROC[host: Machine]; ReadRemoteCore: PROC[host: Machine, data: REF PageData, mempage: PageNumber] RETURNS[map: MapEntry, ok: BOOLEAN]; WriteRemoteCore: PROC[host: Machine, data: REF PageData, mempage: PageNumber, map: MapEntry] RETURNS[BOOL]; ReadRemoteDisk: PROC[host: Machine, data: REF PageData, addr: DiskAddress, label: LONG POINTER TO DiskFace.Label]; WriteRemoteDisk: PROC[host: Machine, data: REF PageData, addr: DiskAddress, label: LONG POINTER TO DiskFace.Label]; LocateOther: PROC; -- outload, boot physical volume, return after inload -- GoOther: PROC; -- outload, return after inload -- ReadOtherCore: PROC[data: REF PageData, mempage: PageNumber] RETURNS[ok: BOOLEAN]; WriteOtherCore: PROC[data: REF PageData, mempage: PageNumber] RETURNS[BOOL]; ChannelDirection: TYPE = { read, write }; MoveLocalDiskPage: PROC[ data: REF PageData, direction: ChannelDirection, addr: DiskAddress]; GetLoadState: PROC[world: World, basic, real: WorldVM.Address]; Patch: PROC[world: WorldVM.World, addr: WorldVM.Address, offset: [0..1], byte: PrincOps.op] RETURNS[oldByte: PrincOps.op]; END. WVMPrivate.mesa Cedar Remote Debugging: Internal WorldVM Interface Andrew Birrell December 2, 1983 1:14 pm Russ Atkinson, April 25, 1984 8:35:27 pm PST Basic data types Map of debuggee's VM backing file May read only swapped-in (or resident) client pages. Page cache If "coreOnly" and page is not swapped in, returns [NIL,NIL]. Remote page transfers RRA: This was changed to allow 64K pages of real memory World-swap page transfers Reading debuggee's loadstate Patching primitive for AMProcessBasicImpl ÊV˜šœ™Jšœ2™2Jšœ(™(J™,—J˜šÏk ˜ Jšœ œ˜Jšœœ˜.Jšœœ ˜"Jšœ œ ˜Jšœ œ ˜.Jšœœœ˜Jšœœ˜,—J˜Jšœ œ˜J˜Jš˜J˜J™˜Jšœ œ˜+J˜Jšœ œ˜'J˜šÏn œœœ˜JJšœœ œ˜'—J˜šœ œœ˜J˜Jšœœ˜Jšœ œœÏc.˜GJšœœŸ@˜RJšœ œŸH˜]J˜—J˜JšœŸœ ˜3J˜Jšœ œ"˜1J˜Jšœœœ ˜J˜šœ œœœ˜"Jšœ œ˜Jšœ#œ˜>Jšœœ˜J˜-Jšœ œœ˜Jšœ(œ˜,Jšœœ(œ˜?Jšœœ˜"Jšœœœ˜J˜#šœœ˜ Jšœœ˜ Jšœ œ˜Jšœ œ˜J˜$Jšœ˜ ——J˜J˜—J™!˜Jšœœœ˜,J˜Jšœœ˜J˜šžœœœ˜GJšœ4™4—J˜šžœœ)˜?JšœŸœ˜@—J˜šžœœ(˜BJšœ˜—J˜J˜—Jšœ ™ ˜Jšœ œœ ˜ J˜Jšœ œ˜J˜Jš œ œœœœ˜1J˜šžœœ+˜8Jšœœ ˜2Jšœ<™<—J˜Jšž œœ˜&J˜Jšžœœ˜.J˜J˜J˜—Jšœ™˜šœ œ˜+Jšœ7™7—J˜Jšœ œ˜J˜Jšž œœœœ ˜1J˜Jšžœœ˜J˜šžœœ˜#Jšœœ ˜J˜Jšœœ˜$—J˜šžœœ˜$Jšœœ ˜J˜Jšœœœ˜—J˜šžœœ˜#Jšœœ ˜J˜Jšœœœœ˜'—J˜šžœœ˜$Jšœœ ˜J˜Jšœœœœ˜'—J˜J˜J˜—Jšœ™˜Jšž œœŸ8˜KJ˜JšžœœŸ"˜1J˜šž œœœ˜