[rtems-tools commit] Add subcommand

Chris Johns chrisj at rtems.org
Sun Aug 24 23:45:35 UTC 2014


Module:    rtems-tools
Branch:    master
Commit:    a245635a2e3c7b9ef5ebfc480b6115544c3d4340
Changeset: http://git.rtems.org/rtems-tools/commit/?id=a245635a2e3c7b9ef5ebfc480b6115544c3d4340

Author:    Dhananjay Balan <mb.dhananjay at gmail.com>
Date:      Sat Aug 24 15:26:16 2013 +0530

Add subcommand

rtems tod - prints the time of day.

---

 tools/gdb/python/main.py      |    3 ++-
 tools/gdb/python/objects.py   |   20 ++++++++++++++------
 tools/gdb/python/rtems.py     |   21 +++++++++++++++++++++
 tools/gdb/python/supercore.py |   25 +++++++++++++++++++++++++
 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'''
 



More information about the vc mailing list