Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java @ 7620:e94ed1591b42
8006403: Regression: jstack failed due to the FieldInfo regression in SA
Reviewed-by: sla, dholmes
Contributed-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
author | sla |
---|---|
date | Wed, 16 Jan 2013 16:30:04 +0100 |
parents | 4a916f2ce331 |
children | 6bd680e9ea35 |
comparison
equal
deleted
inserted
replaced
7591:c793367610c1 | 7620:e94ed1591b42 |
---|---|
51 private static int INITVAL_INDEX_OFFSET; | 51 private static int INITVAL_INDEX_OFFSET; |
52 private static int LOW_OFFSET; | 52 private static int LOW_OFFSET; |
53 private static int HIGH_OFFSET; | 53 private static int HIGH_OFFSET; |
54 private static int FIELD_SLOTS; | 54 private static int FIELD_SLOTS; |
55 private static short FIELDINFO_TAG_SIZE; | 55 private static short FIELDINFO_TAG_SIZE; |
56 private static short FIELDINFO_TAG_MASK; | |
56 private static short FIELDINFO_TAG_OFFSET; | 57 private static short FIELDINFO_TAG_OFFSET; |
57 | 58 |
58 // ClassState constants | 59 // ClassState constants |
59 private static int CLASS_STATE_ALLOCATED; | 60 private static int CLASS_STATE_ALLOCATED; |
60 private static int CLASS_STATE_LOADED; | 61 private static int CLASS_STATE_LOADED; |
100 INITVAL_INDEX_OFFSET = db.lookupIntConstant("FieldInfo::initval_index_offset").intValue(); | 101 INITVAL_INDEX_OFFSET = db.lookupIntConstant("FieldInfo::initval_index_offset").intValue(); |
101 LOW_OFFSET = db.lookupIntConstant("FieldInfo::low_packed_offset").intValue(); | 102 LOW_OFFSET = db.lookupIntConstant("FieldInfo::low_packed_offset").intValue(); |
102 HIGH_OFFSET = db.lookupIntConstant("FieldInfo::high_packed_offset").intValue(); | 103 HIGH_OFFSET = db.lookupIntConstant("FieldInfo::high_packed_offset").intValue(); |
103 FIELD_SLOTS = db.lookupIntConstant("FieldInfo::field_slots").intValue(); | 104 FIELD_SLOTS = db.lookupIntConstant("FieldInfo::field_slots").intValue(); |
104 FIELDINFO_TAG_SIZE = db.lookupIntConstant("FIELDINFO_TAG_SIZE").shortValue(); | 105 FIELDINFO_TAG_SIZE = db.lookupIntConstant("FIELDINFO_TAG_SIZE").shortValue(); |
106 FIELDINFO_TAG_MASK = db.lookupIntConstant("FIELDINFO_TAG_MASK").shortValue(); | |
105 FIELDINFO_TAG_OFFSET = db.lookupIntConstant("FIELDINFO_TAG_OFFSET").shortValue(); | 107 FIELDINFO_TAG_OFFSET = db.lookupIntConstant("FIELDINFO_TAG_OFFSET").shortValue(); |
106 | 108 |
107 // read ClassState constants | 109 // read ClassState constants |
108 CLASS_STATE_ALLOCATED = db.lookupIntConstant("InstanceKlass::allocated").intValue(); | 110 CLASS_STATE_ALLOCATED = db.lookupIntConstant("InstanceKlass::allocated").intValue(); |
109 CLASS_STATE_LOADED = db.lookupIntConstant("InstanceKlass::loaded").intValue(); | 111 CLASS_STATE_LOADED = db.lookupIntConstant("InstanceKlass::loaded").intValue(); |
319 | 321 |
320 public int getFieldOffset(int index) { | 322 public int getFieldOffset(int index) { |
321 U2Array fields = getFields(); | 323 U2Array fields = getFields(); |
322 short lo = fields.at(index * FIELD_SLOTS + LOW_OFFSET); | 324 short lo = fields.at(index * FIELD_SLOTS + LOW_OFFSET); |
323 short hi = fields.at(index * FIELD_SLOTS + HIGH_OFFSET); | 325 short hi = fields.at(index * FIELD_SLOTS + HIGH_OFFSET); |
324 if ((lo & FIELDINFO_TAG_SIZE) == FIELDINFO_TAG_OFFSET) { | 326 if ((lo & FIELDINFO_TAG_MASK) == FIELDINFO_TAG_OFFSET) { |
325 return VM.getVM().buildIntFromShorts(lo, hi) >> FIELDINFO_TAG_SIZE; | 327 return VM.getVM().buildIntFromShorts(lo, hi) >> FIELDINFO_TAG_SIZE; |
326 } | 328 } |
327 throw new RuntimeException("should not reach here"); | 329 throw new RuntimeException("should not reach here"); |
328 } | 330 } |
329 | 331 |