 dbb8a92653
			
		
	
	
		dbb8a92653
		
			
		
	
	
	
	
		
			
			* Remove empty comments from FreeRTOSgdb/EventGroup.py * Remove empty comments from FreeRTOSgdb/QueueTools.py * Remove empty comments from FreeRTOSgdb/List.py
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # File: List.py
 | |
| # Author: Carl Allendorph
 | |
| # Date: 05NOV2014
 | |
| #
 | |
| # Description:
 | |
| #   This file contains the class for inspecting
 | |
| # a FreeRTOS List Object
 | |
| #
 | |
| 
 | |
| 
 | |
| import gdb
 | |
| 
 | |
| from .Types import StdTypes
 | |
| 
 | |
| 
 | |
| class ListInspector:
 | |
|     """FreeRTOS List Inspector Object"""
 | |
| 
 | |
|     ListType = gdb.lookup_type("List_t")
 | |
| 
 | |
|     def __init__(self, handle):
 | |
|         self._list = None
 | |
|         #    print("List: Handle: %s" % handle)
 | |
|         self.Assign(handle)
 | |
| 
 | |
|     def Assign(self, listObj):
 | |
|         try:
 | |
|             if listObj.type == ListInspector.ListType:
 | |
|                 self._list = listObj
 | |
|                 return
 | |
|             else:
 | |
|                 raise TypeError("Invalid List Object Type!")
 | |
|         except Exception as exc:
 | |
|             # print(" Failed to assign from List object: %s" % str(exc))
 | |
|             pass
 | |
| 
 | |
|         symbol, methodObj = gdb.lookup_symbol(listObj)
 | |
|         if symbol != None:
 | |
|             self._list = symbol.value()
 | |
|         else:
 | |
|             addrInt = int(listObj, 0)
 | |
|             listObjPtr = gdb.Value(addrInt).cast(ListInspector.ListType.pointer())
 | |
|             self._list = listObjPtr.dereference()
 | |
| 
 | |
|     def GetElements(self, CastTypeStr=None, startElem=1):
 | |
|         """Get the Elements of the list as an array of
 | |
|         gdb.Value type objects.
 | |
|         @param CastTypeStr string name of the type of object that
 | |
|           we will cast the void *pvOwner elements of the list to.
 | |
|           User can also pass a L{gdb.Type} object as the type
 | |
|           If None, we will simply cast to uint32_t and print these
 | |
|           as hex values.
 | |
|         @param startElem This is a flag to indicate whether
 | |
|            we will start getting elements starting at 0 or 1. Note
 | |
|            that this is to deal with some non-consistent behavior
 | |
|            of some of the TCB Task lists.
 | |
|         """
 | |
|         if self._list != None:
 | |
| 
 | |
|             CastType = None
 | |
|             if CastTypeStr != None:
 | |
|                 if type(CastTypeStr) == str:
 | |
|                     try:
 | |
|                         CastType = gdb.lookup_type(CastTypeStr).pointer()
 | |
|                     except:
 | |
|                         print("Failed to find type: %s" % CastTypeStr)
 | |
|                 elif type(CastTypeStr) == gdb.Type:
 | |
|                     CastType = CastTypeStr.pointer()
 | |
| 
 | |
|             resp = []
 | |
|             numElems = self._list["uxNumberOfItems"]
 | |
|             # print("List Elements: %d" % numElems)
 | |
|             index = self._list["pxIndex"]
 | |
| 
 | |
|             if numElems > 0 and numElems < 200:
 | |
| 
 | |
|                 if startElem == 0:
 | |
|                     curr = index
 | |
|                 else:
 | |
|                     curr = index["pxPrevious"]
 | |
| 
 | |
|                 for i in range(0, numElems):
 | |
|                     owner = curr["pvOwner"]
 | |
| 
 | |
|                     ownerObj = None
 | |
|                     if CastType != None:
 | |
|                         castObjPtr = owner.cast(CastType)
 | |
|                         castObj = castObjPtr.dereference()
 | |
|                         ownerObj = castObj
 | |
|                     else:
 | |
|                         ownerUInt = owner.cast(StdTypes.uint32_t)
 | |
|                         ownerObj = ownerUInt
 | |
| 
 | |
|                     itemVal = curr["xItemValue"]
 | |
|                     resp.append((ownerObj, itemVal.cast(StdTypes.uint32_t)))
 | |
| 
 | |
|                     curr = curr["pxPrevious"]
 | |
| 
 | |
|             return resp
 | |
| 
 | |
|         else:
 | |
|             raise ValueError("Invalid List Object - Possibly Failed to Initialize!")
 |