<<>> <> <> <> <> <> <> <> <> <> DIRECTORY CirioNubAccessPrivate, PFSNames USING [PATH], Rope USING[ROPE]; CirioNubAccess: CEDAR DEFINITIONS = BEGIN Handle: TYPE = REF HandleBody; HandleBody: TYPE = CirioNubAccessPrivate.HandleBody; <> <<>> <> <> <> <> <> RemoteAddress: TYPE = RECORD[ h: Handle, byteAddress: CARD, bitOffset: CARD, nil: BOOLEAN, valid: BOOLEAN]; RemoteNilFault: ERROR[addr: RemoteAddress]; RemoteAddrFault: ERROR[addr: RemoteAddress]; -- other than NIL RemoteMonitorWouldBlock: ERROR[addr: RemoteAddress]; <> RaFromCi: PROC [h: Handle, byteAddress: CARD, bitOffset: INT _ 0, nil: BOOL _ FALSE, valid: BOOL _ TRUE] RETURNS [RemoteAddress] ~ INLINE {RETURN [[h, LOOPHOLE[byteAddress], bitOffset, nil OR byteAddress=0, valid]]}; CreateRemoteNub: PROC[debuggee: Rope.ROPE _ NIL, port: CARDINAL _ 0, timeoutMsec: INT _ INT.LAST] RETURNS [Handle]; <> <> <> <> CreateSameWorldNub: PROC RETURNS [Handle]; DestroyNub: PROC[h: Handle]; GetProtocolVersionNumber: PROC[h: Handle] RETURNS[CARD]; Null: PROC[h: Handle, proposedVersionNumber: CARD] RETURNS[BOOLEAN]; <> <<>> <> <> WaitSig: PROC[h: Handle, timeoutMilliSec: CARD] RETURNS[gotResponse: BOOLEAN]; <> <> <> <> <<(other values may be seen in /jaune/xrhome/DEVELOPMENT/INCLUDE/xr/ThreadsBackdoor.h)>> SetDBStat: PROC[h: Handle, dbStat: INT32, timeoutMilliSec: CARD] RETURNS[ok: BOOLEAN]; <> ReadBytes: PROC[address: RemoteAddress, count: INT] RETURNS[REF TEXT]; <> Read16BitsAsCardinal: PROC[address: RemoteAddress] RETURNS[CARDINAL]; <> <<>> Read32BitsAsCard: PROC[address: RemoteAddress] RETURNS[CARD]; <> <<>> WriteCardAs32Bits: PROC[address: RemoteAddress, card: CARD]; <> <<>> Read4Bytes: PROC[address: RemoteAddress] RETURNS[PACKED ARRAY [0..3] OF BYTE]; <> Write4Bytes: PROC[address: RemoteAddress, bytes: PACKED ARRAY [0..3] OF BYTE]; <> ThreadInfo: TYPE = RECORD[ index: CARD, gen: CARD, schedState: CARD, priority: CARD, dbgMsg: INT, frozen: BOOLEAN, pc: CARD, stackPointer: CARD, framePointer: CARD]; <jaune>xrhome>DEVELOPMENT>INCLUDE>xr>Threads.h)>> <<(e.g., XR_DB_MSG_CLIENT_REQUEST)>> <<>> DbgMsgNone: INT = 0; DbgMsgNoHandlerRequest: INT = 1; DbgMsgHandlerRequest: INT = 2; DbgMsgBadProceedRequest: INT = 3; DbgMsgBreakRequest: INT = 4; DbgMsgClientRequest: INT = 5; <> <<>> SchedStateNone: CARD = 0; SchedStateFree: CARD = 1; SchedStateReady: CARD = 2; SchedStateRun: CARD = 3; SchedStateWaitML: CARD = 4; SchedStateWaitCV: CARD = 5; SchedStateHandlee: CARD = 6; GetThreads: PROC[h: Handle, lowIndex, highIndex: CARD] RETURNS[LIST OF REF ThreadInfo]; <> PCInfo: TYPE = REF PCInfoBody; PCInfoBody: TYPE = RECORD[ procName: Rope.ROPE, procSymID: CARD, fileName: PFSNames.PATH, fileSeqNum: CARD, guessedEmbeddedFileName: PFSNames.PATH, guessedEmbeddedFileSymID: CARD]; PCtoInfo: PROC[h: Handle, pc: CARD] RETURNS[PCInfo]; <> <> KillWorld: PROC[h: Handle]; <> <> <<[palain-uX]<>jaune>xrhome>DEVELOPMENT>INCLUDE>xr>Threads.h>> <> DbgMsgAbort: INT = -3; DbgMsgExit: INT = -2; DbgMsgProceed: INT = -1; IssueThreadCommand: PROC[h: Handle, threadIndex: CARD, setFreeze: BOOL, freeze: BOOL, setMsg: BOOL, msg: INT] RETURNS[success: BOOLEAN]; <> <> GetDBStat: PROC[h: Handle, oldStat: INT32, oldExamineeIndex: INT, timeoutMsec: CARD] RETURNS[dbStab: INT32, examineeIndex: INT32]; <> <<>> Size: TYPE ~ INT--I'd like to say [0..INT.LAST], but PrincOps can't compile that--; Pointer: TYPE ~ INT--not a POINTER 'cause Cirio can't handle those yet, and not a CARD because RemoteAddress uses INT--; Nil: Pointer ~ 0; Fields: TYPE ~ REF FieldSeq; FieldSeq: TYPE ~ RECORD [SEQUENCE length: NAT OF Field]; Field: TYPE ~ RECORD [ address: Pointer, bitOffset: Size, bits: Size]; nilField: Field ~ [Nil, 0, 0]; SizeList: TYPE ~ LIST OF Size; ProcRep: TYPE ~ LONG POINTER TO ProcPair; ProcPair: TYPE ~ RECORD [startPC, flag: Pointer]; Call: PROC [h: Handle, proc: ProcRep, formalArgSizes, formalRetSizes: SizeList, actualArgs, actualRets: Fields]; <<>> FileEntry: TYPE = REF FileEntryBody; FileEntryBody: TYPE = RECORD[ seqNum: CARD, commitPoint: BOOL, fileName: PFSNames.PATH, fOffset: CARD, fmagic: CARD, size: CARD, mtime: CARD, smagic: CARD, stamp: Rope.ROPE, readerData: CARD, readerDataSize: CARD, patchReloc: CARD, patchSize: CARD, textReloc: CARD, textSize: CARD, dataReloc: CARD, dataSize: CARD, bssReloc: CARD, bssSize: CARD, commonReloc: CARD, commonSize: CARD]; <> <> GetFileEntry: PROC[h: Handle, seqNum: CARD] RETURNS[entry: FileEntry]; <> SymEntry: TYPE = REF SymEntryBody; SymEntryBody: TYPE = RECORD[ symID: CARD, name: Rope.ROPE, type: CARD, value: CARD, size: CARD, fileSeqNum: CARD]; <> ModuleType: CARD = 1eH; TextType: CARD = 4; <> <> <> <<>> <<>> <> LookupSymEntryByName: PROC[h: Handle, sym: Rope.ROPE, caseSensitive: BOOLEAN, externOnly: BOOLEAN, numToSkip: INT] RETURNS[SymEntry]; <> <<>> <<(numToSkip > 0) ~ GetNextByValue>> <<(numToSkip < 0) ~ GetPrevByValue>> LookupSymEntryByValue: PROC[h: Handle, val: CARD, numToSkip: INT] RETURNS[SymEntry]; <> LookupSymEntryByID: PROC[h: Handle, symID: CARD] RETURNS[SymEntry]; <> LookupFileEntryByStemName: PROC[h: Handle, stemName: Rope.ROPE, numToSkip: INT] RETURNS[SymEntry]; <> <> <<>> <> <<>> <> <<(1) find highest entry less or equal to the starting point that satisfies the conditions>> <<(2) set skipped to 0>> <<(3) if skipped = numToSkip then return found entry>> <<(4) if skip < 0 then find highest entry less than the previously found entry that satisfies the conditions and set skipped to skipped - 1>> <<(5) if skip > 0 then find lowest entry greater than the previously found entry that satisfites the conditions and set skipped to skipped + 1>> <<(6) go to (3)>> <<>> <> <<>> <> <<>> <> <<>> <> LookupMatchingSymEntryByName: PROC[h: Handle, symID: CARD, pattern: Rope.ROPE, caseSensitive: BOOLEAN, wantedTypes: CARD, ignoreClasses: CARD, numToSkip: INT] RETURNS[SymEntry]; <> <<= 0, is ignored>> <<# 0, search starts with given symId>> <> <> <> <> <> <> <> <> <<-1 for all types are acceptable>> <> <> <<0 accept all types>> <<1 ignore internals>> <<2 ignore externals>> <<3 ignore all types (very fast!)>> <> <> <> <> <> <> LookupMatchingSymEntryByValue: PROC[h: Handle, symID: CARD, val: CARD, wantedTypes: CARD, ignoreClasses: CARD, numToSkip: INT] RETURNS[SymEntry]; <> <<= 0, search starts with the entry with greatest value less or equal to given val.>> <<# 0, search starts with given symId>> <> <> <> <<(see LookupMatchingSymEntryByName)>> <> <<0(see LookupMatchingSymEntryByName)>> <> <> <> <> <.>> AllocatedBytes: TYPE = RECORD[allocHandle: AllocHandle, bytes: RemoteAddress]; AllocHandle: TYPE = REF AllocHandleBody; AllocHandleBody: TYPE; AllocateBytes: PROC[h: Handle, nBytes: CARD] RETURNS[AllocatedBytes]; ReleaseAllocatedBytes: PROC[allocHandle: AllocHandle]; <> MonitoredCall: PROC[address: RemoteAddress, proc: PROCEDURE [] RETURNS []]; <> Typecode: TYPE ~ RECORD [CARD]; Typestring: TYPE ~ Rope.ROPE; GetConcreteTypecode: PROC[h: Handle, opaque: Typecode] RETURNS[concrete: Typecode, whyNot: Rope.ROPE _ NIL]; GetTypestring: PROC[h: Handle, code: Typecode] RETURNS[string: Typestring, whyNot: Rope.ROPE _ NIL]; GetTypecode: PROC [h: Handle, string: Typestring] RETURNS [code: Typecode, whyNot: Rope.ROPE _ NIL]; GetInstructionSetAndOperatingSystem: PROC[h: Handle] RETURNS[instrSet, opSys: Rope.ROPE]; <> Error: ERROR [codes: LIST OF ATOM, msg: Rope.ROPE]; END..