DIRECTORY DiskFace USING[ Label, Type ], BasicLoadStateFormat USING[ LoadStateObject ], LoadState USING[ Handle ], PrincOps USING [op, PageNumber, PageValue, wordsPerPage], Rope USING[ ROPE ], WorldVM USING [Address, Incarnation, World]; WVMPrivate: DEFINITIONS = BEGIN OPEN Rope; 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, 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 = PrincOps.PageValue; Machine: TYPE[3]; LocateRemote: PROC[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 - Internal WorldVM Interface Copyright c 1985 by Xerox Corporation. All rights reserved. Andrew Birrell December 2, 1983 1:14 pm Russ Atkinson, February 6, 1985 9:13:06 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 World-swap page transfers Reading debuggee's loadstate Patching primitive for AMProcessBasicImpl ΚΠ˜codešœ,™,Kšœ Οmœ1™Kšœžœ˜K˜-Kšœ žœžœ˜Kšœ(žœ˜,Kšœžœ(žœ˜?Kšœžœ˜"Kšœžœžœ˜K˜#šœžœž˜ Kšœžœ˜ Kšœ žœ˜Kšœ žœ˜K˜$Kšžœ˜ ——K˜—K™!˜Kšœžœžœ˜,K˜Kšœžœ˜K˜šŸœžœžœ˜GKšœ4™4—K˜KšŸœžœ)žœ œ˜€K˜KšŸœžœ(žœ˜ZK˜—Kšœ ™ ˜Kšœ žœžœ ˜ K˜Kšœ žœ˜K˜Kš œ žœžœžœžœ˜1K˜šŸœžœ+žœžœ ˜kKšœ<™<—K˜KšŸ œžœ˜&K˜KšŸœžœ˜.K˜—Kšœ™˜Kšœ žœ˜$K˜Kšœ žœ˜K˜KšŸ œžœžœžœ ˜,K˜KšŸœžœ˜K˜Kš Ÿœžœžœž œžœ˜sK˜Kš Ÿœžœžœ/žœžœ˜mK˜Kš Ÿœžœžœ%žœžœžœ˜rK˜Kš Ÿœžœžœ%žœžœžœ˜sK˜—Kšœ™˜KšŸ œžœ 8˜KK˜KšŸœžœ "˜1K˜Kš Ÿ œžœžœžœžœ˜RK˜Kš Ÿœžœžœ žœžœ˜LK˜Kšœžœ˜)K˜KšŸœžœžœ;˜]K˜—K™K™KšŸ œžœ,ž˜?K˜Kšœ)™)K™KšŸœžœPžœž˜zK˜Kšžœ˜K˜K˜K˜K˜K˜K˜K˜K˜—…— :ό