From a245635a2e3c7b9ef5ebfc480b6115544c3d4340 Mon Sep 17 00:00:00 2001 From: Dhananjay Balan Date: Sat, 24 Aug 2013 15:08:16 +0530 Subject: 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''' -- cgit v1.2.3