hotspot/agent/src/share/classes/sun/jvm/hotspot/debugger/DebuggerBase.java
changeset 360 21d113ecbf6a
parent 1 489c9b5090e2
child 670 ddf3e9583f2f
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
    35     <P> NOTE that much of the code sharing is achieved by having this
    35     <P> NOTE that much of the code sharing is achieved by having this
    36     class implement many of the methods in the Win32Debugger and
    36     class implement many of the methods in the Win32Debugger and
    37     DbxDebugger interfaces. </P> */
    37     DbxDebugger interfaces. </P> */
    38 
    38 
    39 public abstract class DebuggerBase implements Debugger {
    39 public abstract class DebuggerBase implements Debugger {
       
    40 
    40   // May be set lazily, but must be set before calling any of the read
    41   // May be set lazily, but must be set before calling any of the read
    41   // routines below
    42   // routines below
    42   protected MachineDescription machDesc;
    43   protected MachineDescription machDesc;
    43   protected DebuggerUtilities utils;
    44   protected DebuggerUtilities utils;
    44   // Java primitive type sizes, set during bootstrapping. Do not call
    45   // Java primitive type sizes, set during bootstrapping. Do not call
    50   protected long jfloatSize;
    51   protected long jfloatSize;
    51   protected long jintSize;
    52   protected long jintSize;
    52   protected long jlongSize;
    53   protected long jlongSize;
    53   protected long jshortSize;
    54   protected long jshortSize;
    54   protected boolean javaPrimitiveTypesConfigured;
    55   protected boolean javaPrimitiveTypesConfigured;
       
    56   // heap data.
       
    57   protected long oopSize;
       
    58   protected long heapOopSize;
       
    59   protected long heapBase;                 // heap base for compressed oops.
       
    60   protected long logMinObjAlignmentInBytes; // Used to decode compressed oops.
    55   // Should be initialized if desired by calling initCache()
    61   // Should be initialized if desired by calling initCache()
    56   private PageCache cache;
    62   private PageCache cache;
    57 
    63 
    58   // State for faster accessors that don't allocate memory on each read
    64   // State for faster accessors that don't allocate memory on each read
    59   private boolean useFastAccessors;
    65   private boolean useFastAccessors;
   149        (jintSize     == 4) &&
   155        (jintSize     == 4) &&
   150        (jlongSize    == 8) &&
   156        (jlongSize    == 8) &&
   151        (jshortSize   == 2));
   157        (jshortSize   == 2));
   152 
   158 
   153     javaPrimitiveTypesConfigured = true;
   159     javaPrimitiveTypesConfigured = true;
       
   160   }
       
   161 
       
   162   public void putHeapConst(long heapBase, long heapOopSize, long logMinObjAlignmentInBytes) {
       
   163     this.heapBase = heapBase;
       
   164     this.heapOopSize = heapOopSize;
       
   165     this.logMinObjAlignmentInBytes = logMinObjAlignmentInBytes;
   154   }
   166   }
   155 
   167 
   156   /** May be called by subclasses if desired to initialize the page
   168   /** May be called by subclasses if desired to initialize the page
   157       cache but may not be overridden */
   169       cache but may not be overridden */
   158   protected final void initCache(long pageSize, long maxNumPages) {
   170   protected final void initCache(long pageSize, long maxNumPages) {
   440   protected long readAddressValue(long address)
   452   protected long readAddressValue(long address)
   441     throws UnmappedAddressException, UnalignedAddressException {
   453     throws UnmappedAddressException, UnalignedAddressException {
   442     return readCInteger(address, machDesc.getAddressSize(), true);
   454     return readCInteger(address, machDesc.getAddressSize(), true);
   443   }
   455   }
   444 
   456 
       
   457   protected long readCompOopAddressValue(long address)
       
   458     throws UnmappedAddressException, UnalignedAddressException {
       
   459     long value = readCInteger(address, getHeapOopSize(), true);
       
   460     if (value != 0) {
       
   461       // See oop.inline.hpp decode_heap_oop
       
   462       value = (long)(heapBase + (long)(value << logMinObjAlignmentInBytes));
       
   463     }
       
   464     return value;
       
   465   }
       
   466 
   445   protected void writeAddressValue(long address, long value)
   467   protected void writeAddressValue(long address, long value)
   446     throws UnmappedAddressException, UnalignedAddressException {
   468     throws UnmappedAddressException, UnalignedAddressException {
   447     writeCInteger(address, machDesc.getAddressSize(), value);
   469     writeCInteger(address, machDesc.getAddressSize(), value);
   448   }
   470   }
   449 
   471 
   516   }
   538   }
   517 
   539 
   518   public long getJShortSize() {
   540   public long getJShortSize() {
   519     return jshortSize;
   541     return jshortSize;
   520   }
   542   }
       
   543 
       
   544   public long getHeapOopSize() {
       
   545     return heapOopSize;
       
   546   }
       
   547 
       
   548   public long getHeapBase() {
       
   549     return heapBase;
       
   550   }
       
   551   public long getLogMinObjAlignmentInBytes() {
       
   552     return logMinObjAlignmentInBytes;
       
   553   }
   521 }
   554 }