Changeset b117be8 in rtems-tools for tools/gdb/python/classic.py


Ignore:
Timestamp:
Mar 17, 2015, 2:11:57 AM (5 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
4.10, 4.11, e9f48e9face6c4dea62712d73b35412c0fe10332
Children:
dfc5994
Parents:
a30ec56
git-author:
Chris Johns <chrisj@…> (03/17/15 02:11:57)
git-committer:
Chris Johns <chrisj@…> (03/17/15 02:12:15)
Message:

gdb/python: Update the support to a recent RTEMS.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/gdb/python/classic.py

    ra30ec56 rb117be8  
    3838import helper
    3939
     40import heaps
     41import mutex
    4042import objects
     43import supercore
    4144import threads
    4245import watchdog
    43 import heaps
    44 import supercore
    4546
    4647class attribute:
     
    112113    #ToDo: Move this out
    113114    def to_string(self):
    114         s = '0x%08x,' % (self.attr)
     115        s = '(0x%08x) ' % (self.attr)
    115116        if self.attrtype != 'none':
    116117            for m in self.groups[self.attrtype]:
     
    136137
    137138    def __init__(self, obj):
    138         self.reference = obj
    139         self.object = obj.dereference()
     139        if obj.type.code == gdb.TYPE_CODE_PTR:
     140            self.reference = obj
     141            self.object = obj.dereference()
     142        else:
     143            self.object = obj
     144            self.reference = obj.address
    140145        self.object_control = objects.control(self.object['Object'])
    141146        self.attr = attribute(self.object['attribute_set'], 'semaphore')
    142147
    143148    def show(self, from_tty):
    144         print '     Name:', self.object_control.name()
    145         print '     Attr:', self.attr.to_string()
    146         if self.attr.test('semaphore-type', 'bin-sema') or \
    147                 self.attr.test('semaphore-type', 'simple-bin-sema'):
    148             core_mutex = self.object['Core_control']['mutex']
    149             locked = core_mutex['lock'] == 0
    150             if locked:
    151                 s = 'locked'
    152             else:
    153                 s = 'unlocked'
    154             print '     Lock:', s
    155             print '  Nesting:', core_mutex['nest_count']
    156             print '  Blocked:', core_mutex['blocked_count']
    157             print '   Holder:',
    158             holder = core_mutex['holder']
    159             if holder and locked:
    160                 holder = threads.control(holder.dereference())
    161                 print holder.brief()
    162             elif holder == 0 and locked:
    163                 print 'locked but no holder'
    164             else:
    165                 print 'unlocked'
    166             wait_queue = threads.queue(core_mutex['Wait_queue'])
    167             tasks = wait_queue.tasks()
    168             print '    Queue: len = %d, state = %s' % (len(tasks),
    169                                                        wait_queue.state())
    170             print '    Tasks:'
    171             print '    Name (c:current, r:real), (id)'
    172             for t in range(0, len(tasks)):
    173                 print '      ', tasks[t].brief(), ' (%08x)' % (tasks[t].id())
    174         else:
    175             print 'semaphore'
     149        if self.object_control.id() != 0:
     150            print '     Name:', self.object_control.name()
     151            print '       Id: 0x%08x (@ 0x%08x)' % (self.object_control.id(),
     152                                                   self.reference)
     153            print '     Attr:', self.attr.to_string()
     154            if self.attr.test('semaphore-type', 'bin-sema') or \
     155               self.attr.test('semaphore-type', 'simple-bin-sema'):
     156                core_mutex = mutex.control(self.object['Core_control']['mutex'])
     157                print '  Nesting:', core_mutex.nest_count()
     158                print '   Holder:',
     159                holder = core_mutex.holder()
     160                if holder:
     161                    print '%s (id 0x%08x)' % (holder.brief(), holder.id())
     162                else:
     163                    print 'no holder (unlocked)'
     164                wait_queue = core_mutex.wait_queue()
     165                tasks = wait_queue.tasks()
     166                print '    Queue: len = %d, state = %s' % (len(tasks),
     167                                                           wait_queue.state())
     168                if len(tasks) > 0:
     169                    print '    Tasks:'
     170                    print '    Name (c:current, r:real), (id)'
     171                    for t in range(0, len(tasks)):
     172                        print '      ', tasks[t].brief(), ' (%08x)' % (tasks[t].id())
     173                return True
     174        return False
    176175
    177176class task:
     
    187186
    188187    def show(self, from_tty):
    189         cpu = self.task.executing()
    190         if cpu == -1:
    191             cpu = 'not executing'
    192         print '         Id:', '0x%08x' % (self.task.id())
    193         print '       Name:', self.task.name()
    194         print ' Active CPU:', cpu
    195         print '      State:', self.task.current_state()
    196         print '    Current:', self.task.current_priority()
    197         print '       Real:', self.task.real_priority()
    198         print '    Preempt:', self.task.preemptible()
    199         print '   T Budget:', self.task.cpu_time_budget()
    200         print '       Time:', self.task.cpu_time_used()
    201         print '  Resources:', self.task.resource_count()
    202         print '  Regsters:'
    203         for name in self.regs.names():
    204             val = self.regs.get(name)
    205             print '    %20s: %08x (%d)' % (name, val, val)
     188        if self.task.id() != 0:
     189            cpu = self.task.executing()
     190            if cpu == -1:
     191                cpu = 'not executing'
     192            print '         Id:', '0x%08x (@ 0x%08x)' % (self.task.id(),
     193                                                         self.task.reference)
     194            print '       Name:', self.task.name()
     195            print ' Active CPU:', cpu
     196            print '      State:', self.task.current_state()
     197            print '    Current:', self.task.current_priority()
     198            print '       Real:', self.task.real_priority()
     199            print '    Preempt:', self.task.preemptible()
     200            print '   T Budget:', self.task.cpu_time_budget()
     201            print '       Time:', self.task.cpu_time_used()
     202            print '  Resources:', self.task.resource_count()
     203            print '  Regsters:'
     204            for name in self.regs.names():
     205                val = self.regs.get(name)
     206                print '    %20s: %08x (%d)' % (name, val, val)
     207            return True
     208        return False
    206209
    207210class message_queue:
Note: See TracChangeset for help on using the changeset viewer.