def createRecordFromControlBlock(self, threadPrev, dbg): members = threadPrev.dereferencePointer(Rtx5.getCType( self.tcbType)).getStructureMembers() if (members["id"].readAsNumber() == getControlBlockId(self.tcbType)): return [ function(members, threadPrev) for function in self.functions ] return []
def makeTaskWaitersCell(members, name): tcbPtr = members[name] result = [] while nonNullPtr(tcbPtr): members = getPtrMemBers(tcbPtr) result.append(str(Rtx5.getDisplayableTaskId(tcbPtr, members))) tcbPtr = members["thread_next"] return createTextCell(', '.join(result))
def isOSInitialised(debugger): try: return Rtx5.isKernelInitialised(debugger) except DebugSessionException: return False
def dereferenceThreadPointer(tcbPtr): return tcbPtr.dereferencePointer(Rtx5.getCType("Thread"))
def getControlBlockId(cbName): return Rtx5.getControlBlockIdentifiers()[cbName]
def makeStateCell(members): return createTextCell( Rtx5.getTaskState(members["state"].readAsNumber(), members))
def makeTaskIdCell(tcbPtr, members): return createTextCell(Rtx5.getDisplayableTaskId(tcbPtr, members))
def isThreadControlBlock(cbPtr): return Rtx5.getControlBlockIdentifiers()['Thread'] == getPtrMemBers( cbPtr)["id"].readAsNumber()
def getControlBlocks(self, dbg): return Rtx5.getActiveTasks(dbg)
def getControlBlockName(cbId): return next((name for (name, id) in Rtx5.getControlBlockIdentifiers().items() if id == cbId), None)