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