--- /dev/null 2018-04-03 12:55:20.301839954 +0200 +++ new/src/hotspot/share/gc/z/zDebug.gdb 2018-06-08 19:46:02.211940382 +0200 @@ -0,0 +1,147 @@ +# +# GDB functions for debugging the Z Garbage Collector +# + +printf "Loading zDebug.gdb\n" + +# Print Klass* +define zpk + printf "Klass: %s\n", (char*)((Klass*)($arg0))->_name->_body +end + +# Print oop +define zpo + set $obj = (oopDesc*)($arg0) + + printf "Oop: 0x%016llx\tState: ", (uintptr_t)$obj + if ((uintptr_t)$obj & (uintptr_t)ZAddressGoodMask) + printf "Good " + if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataRemapped) + printf "(Remapped)" + else + if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataMarked) + printf "(Marked)" + else + printf "(Unknown)" + end + end + else + printf "Bad " + if ((uintptr_t)ZAddressGoodMask & (uintptr_t)ZAddressMetadataMarked) + # Should be marked + if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataRemapped) + printf "(Not Marked, Remapped)" + else + printf "(Not Marked, Not Remapped)" + end + else + if ((uintptr_t)ZAddressGoodMask & (uintptr_t)ZAddressMetadataRemapped) + # Should be remapped + if ((uintptr_t)$obj & (uintptr_t)ZAddressMetadataMarked) + printf "(Marked, Not Remapped)" + else + printf "(Not Marked, Not Remapped)" + end + else + # Unknown + printf "(Unknown)" + end + end + end + printf "\t Page: %llu\n", ((uintptr_t)$obj & ZAddressOffsetMask) >> ZPageSizeMinShift + x/16gx $obj + printf "Mark: 0x%016llx\tKlass: %s\n", (uintptr_t)$obj->_mark, (char*)$obj->_metadata->_klass->_name->_body +end + +# Print heap page by pagetable index +define zpp + set $page = (ZPage*)((uintptr_t)ZHeap::_heap._pagetable._map._map[($arg0)] & ~1) + printf "Page %p\n", $page + print *$page +end + +# Print pagetable +define zpt + printf "Pagetable (first 128 slots)\n" + x/128gx ZHeap::_heap._pagetable._map._map +end + +# Print live map +define __zmarked + set $livemap = $arg0 + set $bit = $arg1 + set $size = $livemap._bitmap._size + set $segment = $size / ZLiveMap::nsegments + set $segment_bit = 1 << $segment + + printf "Segment is " + if !($livemap._segment_live_bits & $segment_bit) + printf "NOT " + end + printf "live (segment %d)\n", $segment + + if $bit >= $size + print "Error: Bit %z out of bounds (bitmap size %z)\n", $bit, $size + else + set $word_index = $bit / 64 + set $bit_index = $bit % 64 + set $word = $livemap._bitmap._map[$word_index] + set $live_bit = $word & (1 << $bit_index) + + printf "Object is " + if $live_bit == 0 + printf "NOT " + end + printf "live (word index %d, bit index %d)\n", $word_index, $bit_index + end +end + +define zmarked + set $addr = $arg0 + set $obj = ((uintptr_t)$addr & ZAddressOffsetMask) + set $page_index = $obj >> ZPageSizeMinShift + set $page_entry = (uintptr_t)ZHeap::_heap._pagetable._map._map[$page_index] + set $page = (ZPage*)($page_entry & ~1) + set $page_start = (uintptr_t)$page._virtual._start + set $page_end = (uintptr_t)$page._virtual._end + set $page_seqnum = $page._livemap._seqnum + set $global_seqnum = ZGlobalSeqNum + + if $obj < $page_start || $obj >= $page_end + printf "Error: %p not in page %p (start %p, end %p)\n", $obj, $page, $page_start, $page_end + else + printf "Page is " + if $page_seqnum != $global_seqnum + printf "NOT " + end + printf "live (page %p, page seqnum %d, global seqnum %d)\n", $page, $page_seqnum, $global_seqnum + + #if $page_seqnum == $global_seqnum + set $offset = $obj - $page_start + set $bit = $offset / 8 + __zmarked $page._livemap $bit + #end + end +end + +# Print heap information +define zph + printf "Address Space\n" + printf " Start: 0x%llx\n", ZAddressSpaceStart + printf " End: 0x%llx\n", ZAddressSpaceEnd + printf " Size: %-15llu (0x%llx)\n", ZAddressSpaceSize, ZAddressSpaceSize + printf "Heap\n" + printf " GlobalPhase: %u\n", ZGlobalPhase + printf " GlobalSeqNum: %u\n", ZGlobalSeqNum + printf " Offset Max: %-15llu (0x%llx)\n", ZAddressOffsetMax, ZAddressOffsetMax + printf " Page Size Small: %-15llu (0x%llx)\n", ZPageSizeSmall, ZPageSizeSmall + printf " Page Size Medium: %-15llu (0x%llx)\n", ZPageSizeMedium, ZPageSizeMedium + printf "Metadata Bits\n" + printf " Good: 0x%016llx\n", ZAddressGoodMask + printf " Bad: 0x%016llx\n", ZAddressBadMask + printf " WeakBad: 0x%016llx\n", ZAddressWeakBadMask + printf " Marked: 0x%016llx\n", ZAddressMetadataMarked + printf " Remapped: 0x%016llx\n", ZAddressMetadataRemapped +end + +# End of file