src/hotspot/share/gc/z/zDebug.gdb
changeset 50525 767cdb97f103
child 54094 ed3c6f07faab
equal deleted inserted replaced
50524:04f4e983c2f7 50525:767cdb97f103
       
     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