stx/gdb/objects/__init__.py
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 09 Apr 2015 15:04:14 +0100
changeset 4 ca45a88235bd
parent 2 ef575a931434
permissions -rw-r--r--
Minor fixes in GDB scripts.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
import gdb
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
import stx.support
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
class __instance ( object ):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
    """
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
    Generic object representation. Instance of this class
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
    also implements gdb pretty-printing API and could therefore
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
    used as a pretty printer
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
    """
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
    def __init__(self, val):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
        #stx.support.Decorator.__init__(self, val)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
        #object.__setattr__(self, "_klass", None)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
        self._obj = val
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
        self._klass = None
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    def display_hint(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
        Pretty printer API
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
        return None
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    def to_string(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
        Pretty printer API: Returns a human-readable represenation of the object.
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
        return self.display_string()
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
    def __repr__(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
        return self.display_string()
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    31
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    def display_string(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
        try:
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
            value = self.display_value()
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
            klassName = '???'
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    36
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
            klass = self.klass
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
            if klass == None:
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
                klassName = '?None?'
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
            else:
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
                klassName = klass.name
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
            if (value == None):
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    43
                return "0x%08x (%s)" % ( self.address , klassName )
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
            else:
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
                return "0x%08x (%s %s)" % ( self.address , klassName , value )
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
        except:
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    47
            survStartPtr = long(gdb.parse_and_eval("__survStartPtr"))
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    48
            survEndPtr = long(gdb.parse_and_eval("__survEndPtr"))
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    49
            if (survStartPtr <= self.address and self.address <= survEndPtr):
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    50
                return "0x%08x (** survivor **)" % self.address
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
            return "0x%08x (** err **)" % self.address
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
    def display_value(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
        Return a human-readable represenation of object's value, if sensible.
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
        FOr instance, for integer or string it may be its respective value
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
        '''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
        return None
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    @property
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    def address(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
        '''Return the address of the object in memory'''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
        return long(self._obj);
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
    @property
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
    def klass(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
        '''Return this object's class as an __instance value'''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
        if (self._klass == None):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
            self._klass = create(self._obj['o_class'])
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
        return self._klass
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    @property
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    def size(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
        '''Return size of the objects in slots (excluding header)'''
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        # Not really 64bit safe...
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
        return (self.size_b() - 12) / 4
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    77
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    def size_b(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        '''Return size of the object in bytes, including header'''
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    80
        return self._obj['o_size']
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    @property
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    def flags(self):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
        return self._obj['o_flags']
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    87
# Some flags defined in stc.h.
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
# !!! MAKE SURE they are in sync !!!
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
BYTEARRAY       = 1
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
WORDARRAY       = 2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
LONGARRAY       = 3
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
POINTERARRAY    = 4
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
WKPOINTERARRAY  = 5
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
FLOATARRAY      = 6
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
DOUBLEARRAY     = 7
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
SWORDARRAY      = 8
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
SLONGARRAY      = 9
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
LONGLONGARRAY   = 10
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
SLONGLONGARRAY  = 11
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
#
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
# reserved:       13-15
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   103
#
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
ARRAYMASK       = 0x0F
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
BEHAVIOR_INSTS  = 0x0010
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   108
FLOAT_INSTS     = 0x0020
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   109
BLOCK_INSTS     = 0x0040
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   110
METHOD_INSTS    = 0x0080
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   111
CONTEXT_INSTS   = 0x0100
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   112
BCONTEXT_INSTS  = 0x0200
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   113
SYMBOL_INSTS    = 0x0400
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   115
NONOBJECT_INSTS = 0x0800
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   116
EXTERNALBYTES_INSTS = 0x1000
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
EXTFUNC_INSTS   = 0x010000
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
def create(val):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
    import stx.gdb.objects.stx_libbasic
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    addr = long(val)
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   124
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    # Here we should care for free/non objects
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
    # by comparing address agains newspace
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   127
    # boundaries.
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    # Well, later :-)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
    if (addr == 0):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
        return stx.gdb.objects.stx_libbasic.nil
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    if ((addr & 1) == 1):
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   134
        return stx.gdb.objects.stx_libbasic.SmallInteger(val)
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    flags = long(val['o_class']['i_instvars'][1])
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    if ((flags & 1) == 1):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
        flags = flags >> 1
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    else:
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
        raise Exception("Memory corruption? Class flags are not SmallInteger.")
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   140
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
    if ((flags & BEHAVIOR_INSTS) != 0):
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   142
        # Care for anonymous classes
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   143
        size = (val['o_size'] - 12) / 4 # Not 64bit safe
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
        if (size == 5):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
            return stx.gdb.objects.stx_libbasic.Behavior(val)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
        if (size == 6):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
            return stx.gdb.objects.stx_libbasic.ClassDescription(val)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
        if (size >= 17):
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   149
            return stx.gdb.objects.stx_libbasic.Class(val)
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
        if (size >= 7):
4
ca45a88235bd Minor fixes in GDB scripts.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   151
            return stx.gdb.objects.stx_libbasic.Metaclass(val)
2
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
        raise Exception("Funny behaviour-like size (%s)" % size)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    if ((flags & SYMBOL_INSTS) != 0):
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
        return stx.gdb.objects.stx_libbasic.Symbol(val)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
    return __instance(val)
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
ef575a931434 Improved command `btx` (backtrace)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163