|
1 # |
|
2 # GDB functions for debugging the Z Garbage Collector |
|
3 # |
|
4 |
|
5 printf "Loading zDebug.gdb\n" |
|
6 |
|
7 # Print Klass* |
|
8 define zpk |
|
9 printf "Klass: %s\n", (char*)((Klass*)($arg0))->_name->_body |
|
10 end |
|
11 |
|
12 # Print oop |
|
13 define zpo |
|
14 set $obj = (oopDesc*)($arg0) |
|
15 |
|
16 printf "Oop: 0x%016llx\tState: ", (uintptr_t)$obj |
|
17 if ((uintptr_t)$obj & (uintptr_t)ZAddressGoodMask) |
|
18 printf "Good " |
|
19 if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataRemapped) |
|
20 printf "(Remapped)" |
|
21 else |
|
22 if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataMarked) |
|
23 printf "(Marked)" |
|
24 else |
|
25 printf "(Unknown)" |
|
26 end |
|
27 end |
|
28 else |
|
29 printf "Bad " |
|
30 if ((uintptr_t)ZAddressGoodMask & (uintptr_t)ZAddressMetadataMarked) |
|
31 # Should be marked |
|
32 if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataRemapped) |
|
33 printf "(Not Marked, Remapped)" |
|
34 else |
|
35 printf "(Not Marked, Not Remapped)" |
|
36 end |
|
37 else |
|
38 if ((uintptr_t)ZAddressGoodMask & (uintptr_t)ZAddressMetadataRemapped) |
|
39 # Should be remapped |
|
40 if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataMarked) |
|
41 printf "(Marked, Not Remapped)" |
|
42 else |
|
43 printf "(Not Marked, Not Remapped)" |
|
44 end |
|
45 else |
|
46 # Unknown |
|
47 printf "(Unknown)" |
|
48 end |
|
49 end |
|
50 end |
|
51 printf "\t Page: %llu\n", ((uintptr_t)$obj & ZAddressOffsetMask) >> ZPageSizeMinShift |
|
52 x/16gx $obj |
|
53 printf "Mark: 0x%016llx\tKlass: %s\n", (uintptr_t)$obj->_mark, (char*)$obj->_metadata->_klass->_name->_body |
|
54 end |
|
55 |
|
56 # Print heap page by pagetable index |
|
57 define zpp |
|
58 set $page = (ZPage*)((uintptr_t)ZHeap::_heap._pagetable._map._map[($arg0)] & ~1) |
|
59 printf "Page %p\n", $page |
|
60 print *$page |
|
61 end |
|
62 |
|
63 # Print pagetable |
|
64 define zpt |
|
65 printf "Pagetable (first 128 slots)\n" |
|
66 x/128gx ZHeap::_heap._pagetable._map._map |
|
67 end |
|
68 |
|
69 # Print live map |
|
70 define __zmarked |
|
71 set $livemap = $arg0 |
|
72 set $bit = $arg1 |
|
73 set $size = $livemap._bitmap._size |
|
74 set $segment = $size / ZLiveMap::nsegments |
|
75 set $segment_bit = 1 << $segment |
|
76 |
|
77 printf "Segment is " |
|
78 if !($livemap._segment_live_bits & $segment_bit) |
|
79 printf "NOT " |
|
80 end |
|
81 printf "live (segment %d)\n", $segment |
|
82 |
|
83 if $bit >= $size |
|
84 print "Error: Bit %z out of bounds (bitmap size %z)\n", $bit, $size |
|
85 else |
|
86 set $word_index = $bit / 64 |
|
87 set $bit_index = $bit % 64 |
|
88 set $word = $livemap._bitmap._map[$word_index] |
|
89 set $live_bit = $word & (1 << $bit_index) |
|
90 |
|
91 printf "Object is " |
|
92 if $live_bit == 0 |
|
93 printf "NOT " |
|
94 end |
|
95 printf "live (word index %d, bit index %d)\n", $word_index, $bit_index |
|
96 end |
|
97 end |
|
98 |
|
99 define zmarked |
|
100 set $addr = $arg0 |
|
101 set $obj = ((uintptr_t)$addr & ZAddressOffsetMask) |
|
102 set $page_index = $obj >> ZPageSizeMinShift |
|
103 set $page_entry = (uintptr_t)ZHeap::_heap._pagetable._map._map[$page_index] |
|
104 set $page = (ZPage*)($page_entry & ~1) |
|
105 set $page_start = (uintptr_t)$page._virtual._start |
|
106 set $page_end = (uintptr_t)$page._virtual._end |
|
107 set $page_seqnum = $page._livemap._seqnum |
|
108 set $global_seqnum = ZGlobalSeqNum |
|
109 |
|
110 if $obj < $page_start || $obj >= $page_end |
|
111 printf "Error: %p not in page %p (start %p, end %p)\n", $obj, $page, $page_start, $page_end |
|
112 else |
|
113 printf "Page is " |
|
114 if $page_seqnum != $global_seqnum |
|
115 printf "NOT " |
|
116 end |
|
117 printf "live (page %p, page seqnum %d, global seqnum %d)\n", $page, $page_seqnum, $global_seqnum |
|
118 |
|
119 #if $page_seqnum == $global_seqnum |
|
120 set $offset = $obj - $page_start |
|
121 set $bit = $offset / 8 |
|
122 __zmarked $page._livemap $bit |
|
123 #end |
|
124 end |
|
125 end |
|
126 |
|
127 # Print heap information |
|
128 define zph |
|
129 printf "Address Space\n" |
|
130 printf " Start: 0x%llx\n", ZAddressSpaceStart |
|
131 printf " End: 0x%llx\n", ZAddressSpaceEnd |
|
132 printf " Size: %-15llu (0x%llx)\n", ZAddressSpaceSize, ZAddressSpaceSize |
|
133 printf "Heap\n" |
|
134 printf " GlobalPhase: %u\n", ZGlobalPhase |
|
135 printf " GlobalSeqNum: %u\n", ZGlobalSeqNum |
|
136 printf " Offset Max: %-15llu (0x%llx)\n", ZAddressOffsetMax, ZAddressOffsetMax |
|
137 printf " Page Size Small: %-15llu (0x%llx)\n", ZPageSizeSmall, ZPageSizeSmall |
|
138 printf " Page Size Medium: %-15llu (0x%llx)\n", ZPageSizeMedium, ZPageSizeMedium |
|
139 printf "Metadata Bits\n" |
|
140 printf " Good: 0x%016llx\n", ZAddressGoodMask |
|
141 printf " Bad: 0x%016llx\n", ZAddressBadMask |
|
142 printf " WeakBad: 0x%016llx\n", ZAddressWeakBadMask |
|
143 printf " Marked: 0x%016llx\n", ZAddressMetadataMarked |
|
144 printf " Remapped: 0x%016llx\n", ZAddressMetadataRemapped |
|
145 end |
|
146 |
|
147 # End of file |