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-- |
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 |