Debug: freertos gdb plugin.
This commit is contained in:
84
debug/FreeRTOS/FreeRTOSgdb/HandleRegistry.py
Normal file
84
debug/FreeRTOS/FreeRTOSgdb/HandleRegistry.py
Normal file
@@ -0,0 +1,84 @@
|
||||
# File: HandleRegistry.py
|
||||
# Author: Carl Allendorph
|
||||
# Date: 06NOV2014
|
||||
#
|
||||
# Description:
|
||||
# THis file contains the implementation of a class for accessing the
|
||||
# handle registry. This contains a mapping of queue handles to
|
||||
# strings for labeling purposes.
|
||||
|
||||
import gdb
|
||||
from .Types import StdTypes
|
||||
from .QueueTools import *
|
||||
|
||||
|
||||
class HandleRegistry:
|
||||
"""The FreeRTOS system can be configured with a table that
|
||||
associates a name with a QueueHandle_t.
|
||||
This class can be used to access this table and
|
||||
label queue/mutex/semaphore/event groups
|
||||
"""
|
||||
|
||||
def __init__(self, regSymbol="xQueueRegistry"):
|
||||
symbol, methodObj = gdb.lookup_symbol(regSymbol)
|
||||
self._registry = symbol.value()
|
||||
self._minIndex = 0
|
||||
self._maxIndex = 0
|
||||
self._minIndex, self._maxIndex = self._registry.type.range()
|
||||
|
||||
def GetName(self, handle):
|
||||
"""Find the string name associated with a queue
|
||||
handle if it exists in the registry
|
||||
"""
|
||||
for i in range(self._minIndex, self._maxIndex):
|
||||
elem = self._registry[i]
|
||||
h = elem["xHandle"]
|
||||
val = h.cast(StdTypes.uint32_t)
|
||||
if handle == val:
|
||||
print("Found Entry for: %x" % handle)
|
||||
name = elem["pcQueueName"].string()
|
||||
return name
|
||||
|
||||
def PrintRegistry(self):
|
||||
for i in range(self._minIndex, self._maxIndex):
|
||||
elem = self._registry[i]
|
||||
h = elem["xHandle"]
|
||||
if h != 0:
|
||||
name = elem["pcQueueName"].string()
|
||||
print("%d: %3s %16s" % (i, h, name))
|
||||
|
||||
def FilterBy(self, qMode):
|
||||
|
||||
"""Retrieve a List of Mutex Queue Handles"""
|
||||
resp = []
|
||||
for i in range(self._minIndex, self._maxIndex):
|
||||
elem = self._registry[i]
|
||||
h = elem["xHandle"]
|
||||
if h != 0:
|
||||
name = elem["pcQueueName"].string()
|
||||
q = QueueInspector(h)
|
||||
q.SetName(name)
|
||||
if qMode != None:
|
||||
qType = q.GetQueueType()
|
||||
if qType != None:
|
||||
if qType == qMode:
|
||||
resp.append(q)
|
||||
|
||||
else:
|
||||
print("qType == None")
|
||||
else:
|
||||
resp.append(q)
|
||||
|
||||
return resp
|
||||
|
||||
def GetMutexes(self):
|
||||
"""Retrieve all the Mutex Objects in the Handle Registry"""
|
||||
return self.FilterBy(QueueMode.MUTEX)
|
||||
|
||||
def GetSemaphores(self):
|
||||
"""Retrieve all the Semaphore Objects in the Handle Registry"""
|
||||
return self.FilterBy(QueueMode.BINARY)
|
||||
|
||||
def GetQueues(self):
|
||||
"""Retrieve all the Queue Objects in the Handle Registry"""
|
||||
return self.FilterBy(QueueMode.QUEUE)
|
Reference in New Issue
Block a user