summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDhananjay Balan <mb.dhananjay@gmail.com>2013-08-24 15:08:16 +0530
committerChris Johns <chrisj@rtems.org>2014-08-25 09:52:41 +1000
commita245635a2e3c7b9ef5ebfc480b6115544c3d4340 (patch)
treee262d1ae675317e86f287bc80b2b9ac74d009a01
parentUpdate README.md (diff)
downloadrtems-tools-a245635a2e3c7b9ef5ebfc480b6115544c3d4340.tar.bz2
Add subcommand
rtems tod - prints the time of day.
-rw-r--r--tools/gdb/python/main.py3
-rw-r--r--tools/gdb/python/objects.py20
-rw-r--r--tools/gdb/python/rtems.py21
-rw-r--r--tools/gdb/python/supercore.py25
4 files changed, 62 insertions, 7 deletions
diff --git a/tools/gdb/python/main.py b/tools/gdb/python/main.py
index 2ef475a..0ec4a28 100644
--- a/tools/gdb/python/main.py
+++ b/tools/gdb/python/main.py
@@ -16,4 +16,5 @@ rtems.rtems()
rtems.rtems_object()
rtems.rtems_semaphore()
rtems.rtems_task()
-rtems.rtems_message_queue() \ No newline at end of file
+rtems.rtems_message_queue()
+rtems.rtems_tod() \ No newline at end of file
diff --git a/tools/gdb/python/objects.py b/tools/gdb/python/objects.py
index 1a64a8d..58c2730 100644
--- a/tools/gdb/python/objects.py
+++ b/tools/gdb/python/objects.py
@@ -13,6 +13,8 @@ class infotables:
"""Manage the object information tables."""
tables_types = {
+ 'internal/time' : ('TOD_Control', '_TOD'),
+
'classic/tasks' : ('Thread_Control', '_RTEMS_tasks_Information'),
'classic/timers' : ('Timer_Control', '_Timer_Information'),
'classic/semaphores' : ('Semaphore_Control', '_Semaphore_Information'),
@@ -64,15 +66,21 @@ class infotables:
index = id.index()
return self.object_return(api, _class, index)
- def object_return(self, api, _class, index):
+ def object_return(self, api, _class, index=-1):
n = self.name(api, _class)
self.load(n)
- max = self.maximum(api, _class)
- if index > max:
- raise IndexError('object index out of range (%d)' % (max))
+
table_type = self.tables_types[n]
- expr = '(' + table_type[0] + '*)' + \
- table_type[1] + '.local_table[' + str(index) + ']'
+
+ if api == 'internal':
+ expr = '(' + table_type[0] + ')' + table_type[1]
+
+ else:
+ max = self.maximum(api, _class)
+ if index > max:
+ raise IndexError('object index out of range (%d)' % (max))
+ expr = '(' + table_type[0] + '*)' + \
+ table_type[1] + '.local_table[' + str(index) + ']'
return gdb.parse_and_eval(expr)
def is_string(self, api, _class):
diff --git a/tools/gdb/python/rtems.py b/tools/gdb/python/rtems.py
index b142f23..cf2000a 100644
--- a/tools/gdb/python/rtems.py
+++ b/tools/gdb/python/rtems.py
@@ -10,6 +10,7 @@ import re
import objects
import threads
+import supercore
import classic
@@ -184,3 +185,23 @@ class rtems_barrier(rtems_index):
def instance(self, obj):
return classic.barrier(obj)
+class rtems_tod(gdb.Command):
+ '''Print rtems time of day'''
+
+ api = 'internal'
+ _class = 'time'
+
+ def __init__(self):
+ self.__doc__ = 'Display RTEMS time of day'
+ super(rtems_tod, self).__init__ \
+ ('rtems tod', gdb.COMMAND_STATUS,gdb.COMPLETE_NONE)
+
+ def invoke(self, arg, from_tty):
+
+ if arg:
+ print "warning: commad takes no arguments!"
+
+ obj = objects.information.object_return(self.api,self._class)
+ instance = supercore.time_of_day(obj)
+ instance.show()
+ objects.information.invalidate()
diff --git a/tools/gdb/python/supercore.py b/tools/gdb/python/supercore.py
index e60813a..6116626 100644
--- a/tools/gdb/python/supercore.py
+++ b/tools/gdb/python/supercore.py
@@ -5,6 +5,31 @@
import threads
import helper
+class time_of_day:
+ '''Manage time of day object'''
+
+ def __init__(self, tod):
+ self.tod = tod
+
+ def now(self):
+ return self.tod['now']
+
+ def timer(self):
+ return self.tod['uptime']
+
+ def is_set(self):
+ return bool(self.tod['is_set'])
+
+ def show(self):
+ print ' Time Of Day'
+
+ if not self.is_set():
+ print ' Application has not set a TOD'
+
+ print ' Now:', self.now()
+ print ' Uptime:', self.timer()
+
+
class message_queue:
'''Manage a Supercore message_queue'''